Secondo uno studio i più diffusi linguaggi di programmazione hanno alcune falle che potrebbero esporre ad attacchi qualsiasi applicazione sicura costruita su di essi
Il titolo è volutamente provocatorio è sottolinea una criticità emersa nel corso della conferenza di hacking Black Hat Europe tenutasi a Londra la scorsa settimana. L’esperto di sicurezza Fernando Arnaboldi ha condotto uno studio sui più diffusi linguaggi di programmazione scoprendo che alcune falle in essi presenti potrebbero esporre ad attacchi qualsiasi applicazione sicura costruita su di essi. Arnaboldi, attualmente ricercatore senior dell’azienda di sicurezza IOActive, ha illustrato i risultati di un’interessante ricerca sulle vulnerabilità in alcuni dei più popolari linguaggi di programmazione come JavaScript, Perl, PHP, Python e Ruby.
Il fuzzing test
Per l’individuazione delle falle, l’esperto ha utilizzato una metodica di test consolidata nota come fuzzing test o fuzz che prevede l’invio di dati casuali al sistema in analisi allo scopo di causarne il crash o anomalie nel comportamento. Gli esperti quindi monitorano la risposta ai dati casuali forniti in input focalizzandosi su eccezioni (e.g. arresti anomali) per individuare potenziali problemi. Grazie alla tecnica Fuzzing, gli esperti di Google hanno scoperto molti problemi in popolari software come la libreria OpenSSL ed alcuni componenti del sistema operativo Linux . L’elenco dei linguaggi di programmazione testati dal ricercatore con la tecnica fuzzing è riportato di seguito:
Il fuzzer differenziale
Arnaboldi ha sviluppato un fuzzer differenziale per i suoi test che ha battezzato XDiFF (Extended Differential Fuzzing Framework). Il Fuzzer è stato appositamente progettato per testare la struttura dei linguaggi di programmazione, il suo codice sorgente è stato rilasciato come progetto open source su GitHub. Arnaboldi ha identificato la maggior parte delle funzioni di base dei linguaggi di programmazione e testato ciascuna di esse con il fuzzer XDiFF.
Permutazione tra funzioni e payload
“Prima dell’esecuzione, il fuzzer genera tutti i possibili casi di test eseguendo la permutazione tra funzioni e payload. I test case combinano ciascuna funzione del linguaggio in esame con differenti payload” si legge nel documento di ricerca intitolato “Exposing Hidden Exploitable Behaviors in Programming Languages Using Differential Fuzzing”. Ha spiegato Arnaboldi: “La scoperta di vulnerabilità significative dipende interamente dalla scelta dell’input corretto – ha detto ancora – per questo nei test sono stati utilizzati meno di 30 valori primitivi (cioè un numero, una lettera, ecc.) combinati con speciali payload. Questi payload speciali sono stati definiti in modo da aiutare a identificare i tentativi del software di accedere a risorse esterne”.
Le vulnerabilità dei linguaggi
Arnaboldi ha esposto gravi vulnerabilità in tutti i principali linguaggi di programmazione che ha analizzato con il suo fuzzer. Di seguito i principali problemi emersi dalla ricerca: Python contiene metodi non documentati e variabili di ambiente locali che possono essere utilizzate per l’esecuzione di comandi del sistema operativo. Perl contiene una funzione typemaps in grado di eseguire codice come eval (). NodeJS emette messaggi di errore che possono rivelare contenuti parziali dei file. JRuby carica ed esegue il codice remoto su una funzione non progettata per il l’esecuzione remota del codice. I nomi delle costanti PHP possono essere utilizzati per eseguire dei comandi da remoto.
Anche errori di semplificazione
“Assumendo che non vi siano intenzioni malevole, queste vulnerabilità potrebbero essere il risultato di errori o tentativi di semplificare lo sviluppo del software. Le vulnerabilità hanno un impatto finale sulle applicazioni analizzate dagli interpreti interessati; tuttavia, le correzioni dovrebbero essere applicate agli interpreti stessi “, afferma Arnaboldi. Secondo l’esperto, un utente malintenzionato può sfruttare questi difetti per hackerare anche le applicazioni più sicure basate su questi linguaggi di programmazione. “Gli sviluppatori di software possono includere inconsapevolmente codice in un’applicazione che può essere utilizzata in un modo che il progettista non ha previsto”, conclude l’esperto. “Alcuni di questi comportamenti rappresentano un rischio per la sicurezza delle applicazioni che sono state sviluppate in modo sicuro seguendo per principali best practice”.
Sconcertante
Quanto è emerso dalla ricerca è semplice quanto sconcertante, nell’analisi delle applicazioni ci si focalizza sul loro codice ignorando la possibilità che il linguaggio stesso con il quale sono state sviluppate possa essere affetto fa falle sfruttabili da un attaccante per alterarne il comportamento. I linguaggi testati da Arnaboldi sono utilizzati per lo sviluppo di un gran numero di applicazioni nei più disparati settori, per questo motivo quanto dimostrato dal ricercatore è di essenziale importanza.