In che modo la patch Shellshock impedisce effettivamente il problema?

2

Non riesco a capire qualcosa sul bug di Shellshock - se queste funzioni ambientali (la cui dichiarazione inizia con " () ") vengono eseguite all'avvio della shell, in che modo la patch previene il problema?

Possiamo ancora impostare alcune funzioni tramite le intestazioni HTTP, e la prossima volta che sul server qualcuno apre Terminal per esempio (quando si carica bash), il corpo della funzione verrà eseguito, anche quando il parser non viene eseguito arbitrariamente comandi dopo il corpo della funzione (come nella versione senza patch, dove invochiamo bash con ' bash -c : ' e ottieni immediatamente il RCE).

Il nome della variabile che contiene la funzione non dovrebbe avere importanza.

qual è la differenza se sarà ' x ' o ' HTTP_COOKIE '? Qualcuno può spiegarmi?

    
posta programings 26.09.2014 - 09:29
fonte

1 risposta

6

Bash ha una funzione che interpreta alcune variabili d'ambiente come definizioni di funzioni. Ad esempio, con la variabile di ambiente HTTP_COOKIE impostata su () { echo hello; } , bash analizza il valore della variabile come una definizione di funzione, come se lo script fosse stato avviato con HTTP_COOKIE () { echo hello; } . Il body della funzione non viene eseguito, a meno che lo script non chiami HTTP_COOKIE come un comando: è la funzione definizione che viene eseguita.

La vulnerabilità di Shellshock è dovuta all'interpretazione delle variabili come più delle definizioni di funzioni. Ad esempio, se HTTP_COOKIE è impostato su () { echo hello; }; echo pwned , quindi bash analizza ed esegue la definizione di funzione all'avvio, e continua felicemente a eseguire il resto del contenuto della variabile, quindi esegue l'istruzione echo pwned .

Con la patch Shellshock, sono accettate solo definizioni di funzioni ben formate. Un valore come () { echo hello; }; echo pwned viene rifiutato perché contiene un codice finale dopo la definizione della funzione.

Lo script deve essere scritto con attenzione e non usare HTTP_COOKIE (o qualunque variabile abbia contenuto che possa essere scelto da un avversario) come nome di comando. Solo i nomi delle variabili utilizzati come nomi dei comandi dallo script possono portare all'iniezione del codice: i nomi delle variabili utilizzati come variabili o non utilizzati nello script non rappresentano un problema.

Una variabile d'ambiente definita in uno script CGI non ha alcuna influenza su una shell avviata in un terminale. Le variabili d'ambiente influenzano i processi e sono ereditate dai sottoprocessi, non saltano magicamente in qualche modo su altri processi che accadono per eseguire la stessa applicazione.

    
risposta data 26.09.2014 - 11:43
fonte

Leggi altre domande sui tag