Red Hot Cyber

La cybersecurity è condivisione.
Riconosci il rischio, combattilo, condividi le tue esperienze ed 
incentiva gli altri a fare meglio di te.

Cerca
Crowdstrike

JavaScream: il toolkit per pentest che scova i Javascript pericolosi nelle pagine web

Davide Cavallini : 3 Agosto 2022 07:00

  

Autore: Massimiliano Brolli

Ne avevamo parlato poco tempo fa di questo software, ma nel mentre molte cose sono state migliorate e oltra ad avergli dato un nome, sono state introdotte una serie di nuove funzionalità:

  • Programmazione migliorata dal punto di vista funzionale
  • Protezione della memoria nella ricorsione per la ricerca nel codice
  • Creata estensione per Firefox
  • Modificata completamente la struttura dei Payload
  • Aggiunti molti payload RCE e Sql Injection
  • Aumento delle performance di velocità durante la scansione (più payload testati nella stessa quantità di tempo)
  • Eliminato il bug del parametro undefined durante la scansione
  • Rimossi molti falsi positivi durante le scansioni con il fuzzer
  • Aggiunta interfaccia grafica
  • Aumentate le stringhe ed espressioni regolari per la ricerca nel codice
  • Aggiunta auto reverse-shell con settaggi ip e porta dell’attaccante
  • Potenziata la serializzazione dei dati dei form per il fuzzing
  • Ordinata la repository
  • Risolto bug dei jQuery listeners
  • Aggiunto il Reverse Mapper per i metodi Javascript
  • Aggiunte info di debug utili durante esecuzione Payloads
  • Ri-testato tutto

Davide Cavallini è uno sviluppatore italiano di software e un penetration tester in ambito web che per esigenze personali ha iniziato a sviluppare uno strumento che ora è diventato una estensione di Firefox per poter trovare facilmente bug all’interno delle pagine web visitate.

E’ semplice da usare ed è ancora in fase di sviluppo, pertanto potrete trovare ancora dei bug e dei miglioramenti da introdurre, ma con pochi step ci mostra la qualità del codice lato client presente nelle pagine che navighiamo, ora con una interfaccia grafica.

Inoltre, l’esigenza per uno strumento simile in ambito cybersec era molto sentita.

Il programma è facilmente installabile. Basta aprire l’url “about:debugging” e in “Questo Firefox” caricare il “manifest.json”. Non necessita praticamente di nessuna configurazione, e permette una scansione passiva abbastanza efficace.

A tal proposito abbiamo intervistato Davide Cavallini, membro della nostra Community per fargli qualche domanda in proposito:

RHC: Buongiorno Davide, raccontaci un po’ chi sei
Davide Cavallini: Buongiorno Massimiliano. Intanto volevo ringraziare per la grande opportunità di far conoscere il mio lavoro che mi state fornendo. Posso dirvi che sono essenzialmente un appassionato di programmazione fin dalla tenera età. Ho iniziato a programmare a 7 anni in linguaggio Basic sul computer Philips 8020 di mio nonno. All’inizio copiavo codice. Poi ho iniziato a ragionare e scrivere qualche programmino semplice su carta. Quando successivamente andavo dal nonno lo mettevo in esecuzione. Credo la mia spinta fosse quella di inventare qualcosa di nuovo… certamente questa è la forza motrice che ha fatto crescere ogni giorno la mia passione. Nel mondo nuovo della programmazione la voglia di inventare trova ancora moltissima ispirazione.

RHC: Molto interessante. E dal punto di vista lavorativo?
Davide Cavallini: Lavoro come programmatore da circa 11 anni. Mi sono sempre occupato di Web Applications. Programmo in PHP, JavaScript e relativi framework. Usiamo una base modulare fatta in Laravel e Vue, chiamata “Xot Cms”. Lavoro sempre assieme al team Laraxot di Marco Sottana. E’ un programmatore e persona di cui ho tantissima stima. Da qualche tempo sono anche Project Manager e Penetration Tester come lavoratore dipendente. Altra mia passione è certamente l’informatica quantistica. Sono riusciuto anche ad ottenerne alcune certificazioni”

RHC: Bene. Che cosa ci racconti del tuo tool?
Davide Cavallini: E’ uno strumento che ho ideato inizialmente per uso personale. Volevo avere una panoramica rapida sulle pagine web e senza configurare nulla

RHC: Ma dimmi come mai ti è venuta in mente questa idea? Perché l’hai fatto?
Davide Cavallini: In primis perché ne avevo bisogno. In secundis per velocizzare il lavoro. Non ho finora mai trovato nulla di simile, così semplice e comodo da usare. Certo, è ancora in fase di sviluppo. In questi giorni il tool è stato arricchito di una comoda interfaccia grafica. Spero presto di poterlo migliorare grazie alla collaborazione di validi colleghi

RHC: Bene. Ti lascio spazio per spiegare bene il software.
Davide Cavallini: Grazie Massimiliano. E’ sempre un piacere parlare con te e con i membri di Red Hot Cyber. Ritengo che sia una rivista online di CyberSecurity dalla professionalità indiscussa. E’ certamente un giornale assolutamente valido e libero e che seguo fin dalla sua nascita. Partiamo dal software appena installato. Sono presenti solo due bottoni, ed una serie di checkbox con dei settaggi facoltativi. Lanciamo la scansione di base, senza checkbox, apriamo la GUI e la console (F12). Già al primo impatto possiamo trovare dei possibili indicatori di rischio. Tutto ciò all’interno della pagina web, del javascript caricato in memoria e dei listeners. La prima sezione che vediamo è intitolata “Body Source Suspicius Points”. Indica i punti potenzialmente sospetti trovati nel sorgente HTML della pagina.

Esempio. In questo semplicissimo caso, vediamo subito che c’è un form che fa una richiesta POST nel body

Già così troveremo form, inclusi nascosti, API keys o altri elementi senza leggere il codice.

La seconda sezione che vediamo si chiama “Window Memory Suspicious Point”. Analizza i metodi javascript nella memoria e ci permette anche delle azioni interessanti. Andiamo a vedere:

Notiamo subito che il metodo f07 contiene una richiesta POST via Ajax con dei parametri. Per andare più nel profondo clicchiamo l’hyperlink f07 e apriamo la console. Cliccando la freccetta in console ci troviamo nel debugger dentro la funzione stessa.

In questo caso possiamo andare a replicare la richiesta e vedere che cosa ci restituisce 

Come fare a vedere i possibili entry point per arrivare a richiamare la funzione f07?

Niente di più facile! infatti basta cliccare il link “Reverse Map” all’interno dell’interfaccia grafica. Vediamo che cosa succede…

Noteremo subito che in console sono apparse delle scritte. La prima riga va ad indicare la funzione su cui abbiamo fatto Reverse Mapping, cioè f07. Il livello è 0, ovvero ancora deve iniziare il mapping.

Nella seconda riga abbiamo f04 con livello 1. Significa f04 va a sua volta a richiamare il metodo f07, ed è ad un livello inferiore di 1 rispetto a f07 stesso.

Nella terza riga, e anche nella quinta riga, vediamo che abbiamo f03 e f05 a livello 2. Questo significa che f03() e f05() richiamano entrambe f04

Come quarta riga, come livello più basso di tutti, abbiamo f01,che richiama f03 > f04 > f07

Facendo uno schema troveremo questa “relazione tra metodi”

Quindi abbiamo già individuato senza sforzo gli entry point per arrivare ad f07(). Ma non finisce qui!

Infatti nella sezione “JS Listeners Suspicious Points” troviamo alcuni listener JavaScript potenzialmente sospetti. In questo caso vediamo che c’è una funzione che va a richiedere l’update di una tabella ad un MySql database.

Qui i listeners non sono cliccabili da interfaccia ma solo da console. Lo stesso vale per i jQuery listeners e per i listeners jQuery nel documento.

Esempio: $(document).on(“click”,”#test-element”,function() {})

Inoltre abbiamo altre informazioni potenzialmente utili a portata di mano: Cookie ed Headers.

Ok, ora andiamo a vedere la seconda parte: il fuzzer. Il fuzzer è un componente accessorio per capire la “schifosità” della pagina. Andiamo a fare una scansione completa, e vediamo i risultati…

Notiamo subito che alcuni payload RCE hanno dato risultato positivo.

Ora andiamo a fare qualcosa in più. Inseriamo nel form dell’estensione IP e porta in Ascolto. Apriamo un terminale ncat -l 3333. Vediamo che cosa succede facendo una scansione RCE + Form Fuzzer.

Et voilà, siamo dentro!

Conclusioni

Perchè utilizzare questo strumento in fase di sviluppo quando esistono tools più specifici?

  • Perchè racchiude vari strumenti in uno. 
  • Perchè permette un’analisi immediata della pagina. 
  • Perchè è non richiede nessuna configurazione
  • Perchè è velocissimo

Ovviamente non toglie il fatto di poter usare tools migliori in base ai risultati avuti. Ribadiamo che chiunque volesse portarlo avanti e collaborare allo sviluppo è benvenuto. C’è tantissimo lavoro da fare!

Davide Cavallini
Davide Cavallini è un esperto sviluppatore senior specializzato in Laravel e JavaScript, con una notevole esperienza come penetration tester. La sua carriera è caratterizzata da un impegno nell'insegnamento e nella condivisione della sua conoscenza, contribuendo alla formazione di nuovi professionisti nel campo dello sviluppo software e della sicurezza informatica. La sua passione per la tecnologia lo spinge a rimanere sempre aggiornato e a esplorare nuove frontiere dell'informatica.