Lezione del 04/04/2024

XSS STORED

Prevede uno step importante di ingegneria sociale. La cosa complicata e’ convincere qualcuno a fare qualcosa. Questa cosa non esiste con le classe di tipo STORED, a contrario del riflesso su cui non abbiamo traccia sul sito vulnerabile. L’attacco in se non modifica nulla dei siti effettivamente. Nel permanente alla fine voglio andare a fare la stessa cosa, pero’ la vittima non si deve attaccare da sola, questo volta l’attaccante riesce a memorizzare in maniera permanene lo script con fa l’attacco. Come faccio a memorizzare qualcosa in maniera permanente? Ci sono tanti siti che permettono agli utenti di andare a creare contenuti, come quelli in cui posso andare a scrivere recensioni. Tutti questi siti consentono all’utente di

Questo succede spesso quando dimentico di andare a sanificare gli input. E’ come se al posto di una recensione io vada a lasciare del codice js messo dall’attaccante per esempio. Questo sempre con il tag script.

Adesso i siti moderni non hanno queste vulerabilita’ ma se fai cose fuori dal cms standard sicuramente posso incappare in queste cose. O se uso dei plugin vecchi etc. … solite cose insomma. Framework moderni hanno gia’ una buona quantita’ di feature di sicurezza builtin.

Che cosa posso fare per mettermi a ripare? Eliminare tutti quanti i caratteri a rischio sicuramente, quindi -,=,* etc. … se posso usare whitelist e’ meglio, al massimo black list con caratteri particolari. Non elimino la vulnerabilita’ ma riesco a metterci una patch che mi aiuta sicuramente la vita. SIcuramente la cosa migliore e’ usare object relational map, non fare query a manima anche se non sono ottimizzate, pero’ dobbiamo capire se il bottleneck e’ quello oppure no.

Devo creare delle query parametrizzabile in cui non esiste confusione tra parametri e codice. E’ piu’ complicato rispetto ad aprire una connessione al db e fare la query. Qui devo andare a fare la query usando dei caratteri particolari, questi sono come dei place holder, poi sucede che questa query le invio al db:

Untitled

Dico solamente al db che queste query ha due parametri che devo andare a definire poi. Il db la query la analizza gia’ e poi quando lo voglio andare ad eseguire prendo la query gia’ formatttata e utilizzo dei metodi sulla query per andare a settare i parametri.

Altra cosa e’ che possiamo andare a fare del codice js super mega offuscata oppure andare a fare dei casting dinamici.

Untitled

Le magie di js

Usando tutte queste tecniche si possono evadere black list e white list di ogni genere e sorta. La soluzione definitiva e’ la codifica di tutti i caratteri che possono causare SXX. Tipo google che non interpreta caratteri senza essere tag html.

Solitamente si trasformano caratteri normali in altri caratteri che non vengono interpretati → funzione html specail charts, che converte i caratteri pericolosi con caratteri che vengono visualizzati correttamente ma senza creare problemi di sorta. Vediti siti di OWASP se ti interessano questo genere di cose.

Tra i progetti che gestisce i piu’ famosi sono la owasp top 10 delle app web vulnerabilities.

Noi abbiamo solamente alcuni esempi di quelle che sono elencate all’interno del sito.

Ciclo di vita di Vulnerabilita’ Software

La vulnerabilty e’ qualcosa di vivo: nasce, cresce e muore. Fino a quando nessuno se ne accorge non succede niente. Ad un certo punto qualcuno se ne accorge, nel caso migliore e’ una persona non attaccante. Prima o poi comunque ci troviamo degli exploit 0 day. La vulnerabilita’ verra’ rilevato da qualcuno e l’azienda lo scopre. Il vendor dovrebbe fare disclosure pubblica. Fino alla disclosure si parla di attacco zero day!

Untitled

La disclosure potrebbe essere arma a doppio taglio, ma anche se abilito l’attaccante ed e’ meglio se lo sanno piu’ attacanti e lo sanno anche i difensori e i sys admin. Dal momento in cui la vulnerabilita’ e’ pubblica chi difende puo’ andare a intraprendere delle misure di mitigazione. Poi ad un ceto punto arrivano anche le firme e antivirus quindi se aggiorno questi sistemi divento anche in grado di riconoscere tentativi di sfruttamente di questa vulnerabilita’. Ci si auspica sempre che la patch coincida con D0. La patch e’ una modifica che dovrebbe andare ad eliminare una vulnerabilita’.