- Introduzione
- Che cos’è l’iniezione di comando?
- Why are command injection vulnerabilities dangerous?
- Vulnerabilità che possono portare all’esecuzione dei comandi
- Arbitrary command injection
- Upload arbitrari di file
- Serializzazione non sicura
- Server-side template injection
- XML external entity injection
- Conclusione
Introduzione
Le vulnerabilità di Command injection sono una delle vulnerabilità web più pericolose. Molti tester di sicurezza e cacciatori di taglie mirano a trovare vulnerabilità di command injection a causa dell’impatto che possono creare sull’applicazione di destinazione.
Questo articolo fornirà una panoramica delle vulnerabilità di command injection, insieme a un’introduzione a varie vulnerabilità che possono portare alla command injection.
Che cos’è l’iniezione di comando?
Command injection è un tipo di vulnerabilità Web che consente agli aggressori di eseguire comandi arbitrari del sistema operativo sul server, in cui è in esecuzione l’applicazione. Le vulnerabilità di Command injection si verificano quando le applicazioni utilizzano comandi di shell o script che eseguono comandi di shell in background.
Consideriamo il seguente URL di un’applicazione, che esegue la codifica base64 dell’input dell’utente.
http://target-site.com/encode.php?text=helloworld
Questo input dell’utente viene passato come parametro get alla codifica.file php.
Il seguente è il codice sorgente di encode.php:
<?php
input input= _ _GET;
sistema (“echo-n”. $input.”/base64″);
?>
Come possiamo notare dal frammento di codice precedente, l’input dell’utente viene passato alla funzione php system (), che viene utilizzata per eseguire i comandi del sistema operativo in PHP.
Se un utente aggiunge un comando di sistema all’input, verrà eseguito come comando del sistema operativo, che assomiglia a questo:
http://target-site.com/encode.php?text=test;id
Di seguito è riportata la risposta restituita all’utente:
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
La classe di vulnerabilità command injection è considerata una delle vulnerabilità web più pericolose perché fornisce il controllo sul sistema operativo sottostante a un utente malintenzionato. Questo controllo può essere utilizzato in diversi modi, incluso il movimento laterale attraverso la rete interna utilizzando la fiducia che il server di destinazione ha con altri sistemi sulla rete.
Vulnerabilità che possono portare all’esecuzione dei comandi
Mentre le vulnerabilità di esecuzione dei comandi si verificano quando l’applicazione vulnerabile consente all’utente finale di estendere la funzionalità predefinita dell’applicazione ed eseguire comandi di sistema, è anche possibile eseguire comandi tramite il codice dell’applicazione. Questo è comunemente noto come esecuzione di codice. Anche quando esiste una vulnerabilità di esecuzione del codice, l’obiettivo finale è eseguire comandi di sistema arbitrari attraverso di esso. Considerando questo, discutiamo alcune delle vulnerabilità che possono portare all’esecuzione di comandi tramite iniezione di comandi o esecuzione di codice.
Di seguito sono riportate alcune delle vulnerabilità che possono eventualmente portare ad attacchi di iniezione di comando.
Arbitrary command injection
Come abbiamo discusso nel nostro esempio precedente, è possibile per le applicazioni avere applicazioni che ricevono comandi di sistema arbitrari dall’utente direttamente ed eseguirli sull’host sottostante. Questo è un esempio di classe di vulnerabilità command injection.
Upload arbitrari di file
Quando le applicazioni consentono agli utenti di caricare file con estensioni di file arbitrarie, può portare a comando di iniezione quando questi file caricati sono collocati all’interno del webroot. Questo è ancora un altro modo comune applicazioni web possono diventare vulnerabili a iniezione di comando.
Serializzazione non sicura
Oltre alle vulnerabilità standard di iniezione dei comandi, l’esecuzione arbitraria dei comandi può essere possibile anche utilizzando altre vulnerabilità come la deserializzazione non sicura. Ciò sfrutta il fatto che il codice lato server deserializza il contenuto serializzato passato dall’utente, senza convalidarlo correttamente. Anche se questa è comunemente nota come classe di vulnerabilità di serializzazione non sicura, alla fine porta a command injection se l’applicazione di destinazione soddisfa determinati requisiti, ad esempio i gadget appropriati disponibili nel percorso della classe.
Server-side template injection
Quando le applicazioni web utilizzano tecnologie di template lato server come Jinja2 o Twig per generare risposte HTML dinamiche, è possibile avere server-side template injection. Le vulnerabilità SSTI si verificano quando l’input dell’utente è incorporato in un modello in modo non sicuro e si traduce in esecuzione di codice remoto sul server.
XML external entity injection
XML external entity vulnerability è un altro tipo di vulnerabilità, che si verifica contro le applicazioni che analizzano l’input XML controllato dall’utente utilizzando un parser XML debolmente configurato. XXE vulnerabilità di solito portano alla lettura di file arbitrari dal server e causando attacchi Denial-of-Service.
Tuttavia, possono anche portare all’esecuzione di comandi sul server quando vengono soddisfatte determinate condizioni. Ad esempio, se PHP expect:// wrapper è abilitato sul server vulnerabile di destinazione, è possibile eseguire comandi arbitrari sul server.
Si prega di notare che questo non è un elenco esaustivo delle vulnerabilità che possono portare a command injection e ci sono diverse altre vulnerabilità che possono portare a command injection quando soddisfano determinate condizioni.
Conclusione
È evidente che esistono diverse vulnerabilità che possono portare all’esecuzione dei comandi sul server. Gli sviluppatori devono essere consapevoli di queste vulnerabilità di iniezione di comando a causa del fatto che queste vulnerabilità sono di alto impatto, in quanto possono dare il pieno controllo sull’infrastruttura sottostante.
Nei prossimi articoli di questa serie, tratteremo alcuni concetti più correlati all’iniezione di comandi come identificare e sfruttare l’iniezione di comandi ciechi.