Command Injection Vulnerability

OS command injection (noto anche come shell injection) è una vulnerabilità di sicurezza Web che consente a un utente malintenzionato di eseguire comandi arbitrari del sistema operativo (OS) sul server che sta eseguendo un’applicazione e in genere compromette completamente l’applicazione e tutti i suoi dati.

Perché le applicazioni Web devono eseguire comandi di sistema?

Le applicazioni Web a volte devono eseguire comandi del sistema operativo (comandi del sistema operativo) per comunicare con il sistema operativo host sottostante e il file system. Questo può essere fatto per eseguire comandi di sistema, avviare applicazioni scritte in un altro linguaggio di programmazione o eseguire script shell, python, perl o PHP. Per qualsiasi sistema operativo, inclusi Windows, Unix e Linux, sono disponibili funzioni che possono eseguire un comando che viene passato agli altri script come comando di shell. Sebbene estremamente utile, questa funzionalità può essere pericolosa se utilizzata in modo errato e può portare a problemi di sicurezza delle applicazioni Web, come spiegato in questo articolo.

Perché si dovrebbe fare attenzione quando si utilizzano i comandi di sistema in applicazioni Web

Sfruttando una vulnerabilità command injection in un’applicazione vulnerabile, gli aggressori possono aggiungere comandi aggiuntivi o iniettare i propri comandi del sistema operativo. Ciò significa che durante un attacco di iniezione di comando, un utente malintenzionato può facilmente prendere il controllo completo del sistema operativo host del server web. Pertanto, gli sviluppatori dovrebbero fare molta attenzione a come passare l’input dell’utente in una di queste funzioni durante lo sviluppo di applicazioni web.

Esempio di vulnerabilità di Command Injection

In questo esempio di vulnerabilità di command injection, stiamo usando la funzionalità ping, che è notoriamente insicura su molti router. Immaginate un’applicazione vulnerabile che ha una funzione comune che passa un indirizzo IP da un input dell’utente al comando ping del sistema. Pertanto, se l’input dell’utente è 127.0.0.1, il seguente comando viene eseguito sul sistema operativo host:

ping -c 5 127.0.0.1

Poiché abbiamo a che fare con un’applicazione web vulnerabile, è possibile uscire dal comando ping o provocare un errore che restituisce informazioni utili all’attaccante. L’attaccante può quindi utilizzare questa funzionalità per eseguire i propri comandi arbitrari. Un esempio di aggiunta di comandi di sistema aggiuntivi potrebbe essere simile a questo:

ping -c 5 127.0.0.1; id

Nell’esempio precedente, prima viene eseguito il comando ping e subito dopo viene eseguita l’esecuzione del comando id. Pertanto l’output del comando sulla pagina sarà simile a questo:

Durante un attacco di iniezione del comando del sistema operativo, l’utente malintenzionato può anche impostare un attacco basato su errori. Per esempio, una iniezione di codice in questo caso, in genere come il seguente:

ping -c 5 "$(id)"

L’iniezione di codice restituisce una risposta come questa:

ping: unknown host uid=0(root) gid=0(root) groups=0(root)

Come Evitare di Comando del Sistema di Iniezione di Vulnerabilità

al fine di impedire a un utente malintenzionato di sfruttare vulnerabilità di applicazioni web e l’inserimento di caratteri speciali nel comando del sistema operativo, si dovrebbe provare, in generale, di evitare le chiamate di sistema, dove possibile. In tutti i casi, evitare l’input dell’utente di qualsiasi tipo a meno che non sia assolutamente necessario. E se è necessario, assicurati che ci sia una corretta convalida dell’input sul posto-la convalida dell’input è sempre un must per garantire che il codice dell’applicazione Web non sia vulnerabile ad altre vulnerabilità ad alto impatto, tra cui XSS e SQL Injection.

Inoltre, disattivare questa funzionalità nel file di configurazione della tua lingua se non ne hai bisogno, in modo che gli aggressori non possano mai riuscire ad accedere alla shell di sistema sul sistema operativo host attraverso applicazioni Web vulnerabili. In alcune lingue, è possibile separare l’esecuzione del processo dai parametri di input. È inoltre possibile creare una lista bianca di possibili input e controllare i formati, ad esempio accettando solo integer per un id numerico.

Classificazione delle vulnerabilità e tabella di gravità

Rimani aggiornato sulle tendenze della sicurezza web

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.