Anche con la patch Shellshock, Bash non è vulnerabile al comando della ridefinizione?

12

Rischio di aggiungere all'heap di domande relative a "Shellshock" ...

La patch Shellshock impedisce l'esecuzione di codice arbitrario dopo le definizioni di funzione nelle variabili di ambiente. Ad esempio, ecco cosa fa una versione con patch di Bash quando si tenta di sfruttare il buco:

$ env foo='() { :;}; echo derp' bash -c 'echo herp'
bash: foo: ignoring function definition attempt
bash: error importing function definition for 'foo'
herp

Questo è ancora consentito dalla progettazione:

$ env foo='() { echo derp; }' bash -c foo
derp

Ma se la definizione della funzione attraverso l'ambiente è possibile, allora chiunque abbia la possibilità di modificare l'ambiente può sostituire i comandi con codice arbitrario (assumendo che lo script di destinazione non specifichi i comandi per il percorso assoluto):

$ env ls='() { echo derp; }' bash -c ls
derp

Mentre la patch Shellshock impedisce cose come l'attacco dell'header HTTP User-Agent, dove la variabile d'ambiente qualsiasi può essere usata per eseguire il codice, non fa nulla per impedire di ridefinire i comandi esistenti.

Un attacco simile è già possibile senza ereditarietà delle funzioni, modificando PATH in modo che faccia riferimento a una directory contenente eseguibili arbitrariamente denominati, ma tale scenario richiede l'accesso al filesystem. Questo non lo fa.

La domanda, quindi: la possibilità di ridefinire i comandi attraverso l'ambiente conta come una vulnerabilità? Esiste una situazione comune in cui potrebbe essere sfruttata a scopi nefandi? (Ad esempio, Git / Mercurial su SSH, Gitolite ...)

    
posta Sam Harada 25.09.2014 - 21:51
fonte

1 risposta

12

In teoria, sì. Ma poi hai anche problemi con

  • LD_PRELOAD
  • LD_LIBARAY
  • BASH_ENV
  • ecc.

Il problema più grande con shellshock è che il nome della variabile di ambiente non ha importanza, bash eseguirà il codice al suo interno anche se non si chiama mai es. HTTP_COOKIES (chi lo farebbe btw?)

L'attaccante di solito può solo scegliere una parte del nome della variabile, ed è improbabile (ma non impossibile) che una funzione / programma con tale nome sia chiamato.

es. Se si limita la git su SSH in modo che possano invocare solo git , l'autore dell'attacco deve definire una variabile di ambiente git e ciò non dovrebbe essere possibile.

Aggiornamento : esiste un'altra possibile escalation dei privilegi locali:

Puoi nascondere i comandi anche se sono chiamati con il percorso completo

env /bin/date='() { echo fail; }' bash -c /bin/date

Che può rovinare con system (e altre) chiamate - e questo è un problema per l'eseguibile SUID che usa una di queste funzioni come root.

    
risposta data 26.09.2014 - 00:26
fonte

Leggi altre domande sui tag