La cosa allucinante non è che sia vulnerabile, ma il fatto che qualcuno abbia pensato che fare l'eval a caso di tutte le variabili d'ambiente fosse una buona idea...![]()
La cosa allucinante non è che sia vulnerabile, ma il fatto che qualcuno abbia pensato che fare l'eval a caso di tutte le variabili d'ambiente fosse una buona idea...![]()
Amaro C++, il gusto pieno dell'undefined behavior.
erano altri tempi...
http://paste.lisp.org/display/143864
Ultima modifica di andrea.paiola; 27-09-2014 a 16:55
Mah, il solo fatto che il tizio dica che secondo lui è un baco di Apache non filtrare le variabili d'ambiente la dice lunga... Che, adesso Apache deve sapere delle paturnie di ogni possibile shell/interprete e filtrare di conseguenza? Non diciamo cazzate, non si fa l'eval di cose a caso, punto, cercare di risolvere il problema con filtri a livello di web server sarebbe lo stesso approccio delle atroci magic_quotes di PHP.
Amaro C++, il gusto pieno dell'undefined behavior.
beh ma scusa io non lo considererei sicuro un sistema che ti permette da remoto e senza controlli di settare variabili d'ambiente... e più che Apache sarebbe PHP, in questo caso.
Poi certo sarebbe ottimo controllare le variabili d'ambiente quando le usi, ma in prima istanza non le farei settare.
Comunque ripeto: semplicemente non si aspettavano che altri software usassero Bash in quel modo.
Ultima modifica di andrea.paiola; 28-09-2014 a 09:34
Non è che da remoto puoi settare variabili d'ambiente a caso, CGI specifica esattamente quali. L'imprudenza è di bash che cicla sulle variabili e fa l'eval di qualunque cosa che assomiglia ad una funzione, è andarsi a cercare rogne.
PHP era un esempio di soluzione sbagliata ad un problema di sicurezza. Se (come fa il tizio di quell'articolo) chiedi che ti vengano escapati a monte dei dati vuol dire che hai già perso, dato che:e più che Apache sarebbe PHP, in questo caso.
1) significa che a valle non sai distinguere dati da codice, la madre di tutti i problemi di sicurezza (vedi SQL injection, un non-problema che deriva dalla gestione intrinsecamente sbagliata che i programmatori incompetenti fanno dei dati delle query SQL);
2) stai cercando di risolvere il problema nel posto sbagliato, visto che puoi fare l'escaping solo per un determinato linguaggio (PHP lo fa(ceva) per SQL, Apache secondo questa logica malata lo avrebbe dovuto fare per bash), quando a valle potrebbe esserci qualunque cosa: uno script CGI può essere scritto in qualunque linguaggio, e Apache non può saperlo a priori, a meno di non andarsi a guardare lo shebang e introdurre escape differenti a seconda del linguaggio - pura follia; si riproporrebbe appunto il problema delle "magic quotes", per cui ti ritrovi roba escapata per un caso d'uso specifico, e in tutti gli altri casi devi de-escaparla per riottenere i dati originali.
No, non le devi controllare, devi semplicemente farti gli affari tuoi e non cercare di fare l'eval di cose a cazzo, punto.Poi certo sarebbe ottimo controllare le variabili d'ambiente quando le usi, ma in prima istanza non le farei settare.
Amaro C++, il gusto pieno dell'undefined behavior.
Difatti, l'ultima patch fa la cosa corretta: non fa l'eval di variabili d'ambiente a caso, ma solo di quelle che riconosce come "sue" fin dal nome.
Amaro C++, il gusto pieno dell'undefined behavior.