Vulnerabilità di iniezione di comandi e il pericolo che presentano

Oggi parleremo delle vulnerabilità di iniezione di comandi del sistema operativo. Quanto sono una minaccia? Come si possono prevenire queste vulnerabilità? Come NexDAST aiuta a porvi rimedio? Risponderemo a tutte queste domande in dettaglio qui sotto!

Che cosa sono le iniezioni di comando del sistema operativo?

Non confondere l’iniezione di comando con l’iniezione di codice. Un codice maligno che viene iniettato in un linguaggio di programmazione è una vulnerabilità di iniezione di codice. Le iniezioni di comando del sistema operativo sono un tipo di carico utile che l’hacker inietta. Il payload viene poi eseguito come un comando del sistema operativo.

Un hacker esegue un comando temporaneo del sistema operativo sul server delle applicazioni con il rischio di compromettere l’applicazione e i dati. Le vulnerabilità di iniezione di comandi del sistema operativo sono spesso usate come uno sgabello da parte degli hacker. Questo è lo scenario peggiore con le iniezioni di comandi OS, poiché inizia con le iniezioni di comandi OS e porta allo sfruttamento di altre parti dell’infrastruttura di hosting con conseguente esposizione di tutta una serie di altri sistemi.

Python, Ruby, Perl, Java, C, PHP. Tutti questi linguaggi di programmazione permettono agli utenti di chiamare un comando shell di sistema. Questo li rende vulnerabili alle iniezioni di comandi del sistema operativo. Tuttavia, l’esecuzione del comando temporaneo iniettato dipende dai privilegi del web-server. Questo è il motivo per cui le vulnerabilità di command injection non sono così pericolose da sole. Ma un hacker può sfruttare l’escalation dei privilegi e accedere a più informazioni. Con queste informazioni, altre vulnerabilità possono essere trovate e sfruttate.

Esempi di vulnerabilità OS Command Injection

Diciamo che vuoi comprare una tastiera da un sito web. L’applicazione deve prima farvi vedere se la tastiera che volete è in stock. Gli utenti ottengono queste informazioni tramite URL come questo:

https://Keyboard-website.com/StockStatus?ProductID=111&StoreID=22

L’applicazione chiede ai sistemi legacy di fornire all’utente informazioni sulle scorte. La chiamata ad un comando di shell rappresenta questa funzionalità. Gli ID dei prodotti e dei negozi sono argomenti, quindi il comando shell assomiglia a questo:

Keyboards.py 111 22

Gli utenti ora vedono se la loro tastiera preferita è in magazzino. Tuttavia, c’è un problema qui. L’applicazione non è protetta contro le iniezioni di comandi del sistema operativo. Gli hacker possono ora inviare un input che esegue un comando temporaneo. Sembra qualcosa come “& echo randomstring &” nel parametro storeID. L’applicazione poi esegue questo comando:

Keyboards.py & echo randomstring & 22

Cosa fa questo comando? Fa riecheggiare la stringa fornita nell’output. Un modo efficiente per testare i tipi di iniezioni di comandi del sistema operativo. Il separatore di comandi della shell ( & ) trasforma un comando in tre. Gli utenti vedono quindi tre risultati:

Error - productID was not provided
Randomstring
22: command not found

Il comando originale Keyboard.py è stato eseguito, ma mancavano gli argomenti previsti. Questo è il motivo per cui abbiamo ricevuto un messaggio di errore. La stringa fornita (Randomstring) ha fatto eco nell’output. Questo è l’obiettivo del comando echo iniettato. Ma, 22: comando non trovato sta mostrando. Perché? Perché l’argomento originale 22 è stato eseguito come un comando, causando un errore.

Ora, copriamo le vulnerabilità di iniezione di comandi del sistema operativo cieco. Questo si verifica quando un’applicazione non restituisce l’output di un comando nella sua risposta. Nonostante questo, gli hacker hanno ancora varie tecniche per sfruttare queste vulnerabilità:

  • ritardi di tempo
  • redire l’output

Utilizzare un comando iniettato per innescare un ritardo di tempo permette ad un hacker di confermare se il comando è stato eseguito. Il tempo impiegato da un’applicazione per rispondere è ciò che vi dice se il comando è stato eseguito o meno. Uno dei comandi più efficaci per sfruttare questa vulnerabilità cieca è un ping. Questo comando permette di scegliere un numero esatto di pacchetti ICMP da inviare. Quel numero sarà il tempo necessario per l’esecuzione di questo comando.

Redirezionare l’output è un altro exploit di iniezione di comandi OS. Si reindirizza l’output del comando iniettato direttamente in un file. Questo file si trova all’interno della webroot che viene recuperata tramite il browser.

Prevenire le iniezioni di comandi del sistema operativo

Come puoi prevenire le iniezioni di comandi OS? Il modo più semplice ed efficace è quello di non usare mai shell_exec o chiamate simili per i comandi del sistema operativo host. Applicate invece gli stessi comandi nel linguaggio di programmazione che state usando. Un problema appare se il vostro linguaggio di programmazione non ha un comando corrispondente a quello di cui avete bisogno. In questi casi dovreste usare la sanificazione dell’input. Sarà utile farlo prima di assegnare il valore al comando della shell. L’uso della whitelist è sempre l’opzione più sicura quando si tratta di iniezioni.

Altre opzioni di validazione dell’input potenti includono:

  • Convalida dei caratteri alfanumerici (Conferma l’inclusione di soli caratteri alfanumerici senza spazi o sintassi nell’input)
  • Convalida dei numeri (Conferma che l’input è un numero)
  • Witelist dei valori consentiti (Conferma rispetto alle whitelist dei valori consentiti)

Non si dovrebbe mai evitare il metacarattere della shell e provare a sanitizzare l’input in questo modo. Poiché questo rende l’input vulnerabile agli hacker intelligenti, che possono bypassare facilmente.

Come NexDAST può aiutare a prevenire le iniezioni di comandi del sistema operativo

Il modo più semplice ed efficace per prevenire le iniezioni di comandi del sistema operativo è di utilizzare NexDAST. La nostra soluzione di test di sicurezza black-box esamina automaticamente la tua applicazione. Quando viene rilevata una OS Command Injection, le linee guida di rimedio vengono inviate allo sviluppatore o al team SecOps. Non c’è bisogno di lunghi e lenti test manuali con NexDAST.

Esempio di NexDAST che identifica un OS Command Injection:

vulnerable.com/site/ping?ip=8.8.8.8%3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd

La parte %3B+%2Fbin%2Fcat+%2Fetc%2Fpasswd è la vulnerabilità. NexDAST fornisce anche linee guida di rimedio che ti aiutano a rimediare a questa vulnerabilità nel modo più efficiente possibile.

Vuoi saperne di più su NexDAST? Ne abbiamo già parlato approfonditamente in uno dei nostri blog, e se avete un problema che NexDAST può aiutare, richiedete una demo qui!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.