Il tag ENTITY in XML sono utilizzati per rappresentare un particolare dato in un documento XML. Questi possono anche essere EXTERNAL cioè fuori dal Document Type e utilizzano la keywork SYSTEM
L'XML external entity injection (nota anche come XXE) è una vulnerabilità che consente a un utente malintenzionato di interferire con l'elaborazione dei dati XML da parte di un'applicazione.
Spesso consente di visualizzare i file presenti sul file system dell'application server e di interagire con qualsiasi sistema esterno o di back-end a cui l'applicazione stessa può accedere.
In alcune situazioni, un utente malintenzionato può intensificare un attacco XXE per compromettere il server sottostante o un'altra infrastruttura back-end, sfruttando questa vulnerabilità per eseguire attacchi SSRF (server-side request forgery).
Un esempio potrebbe essere: <!ENTITY xxe SYSTEM "file:///dev/random" >]> dove si prova ad esegure un attacco Dos sul server facendogli caricare un file di lunghezza infinita!
Pillole di #penetrationtest
Con il termine enumerazione intendiamo una attività di ricerca attiva su servizi esposti che sia capace di rilevare informazioni tecniche e non sull'obiettivo.
Differisce dalla information gathering o recon solo per profondità e opportunità di indagine, non per sostanza: siamo alle sfumature.
Ma vogliamo intendere con enumerazione la capacità di ottenere elenchi di informazioni e risorse direttamente attraverso servizi esposti dall'obiettivo, in maniera diretta e trasparente, senza ausilio di exploit aggressivi.
Questo può avvenire grazie a comportamenti naturali di servizi di rete che, una volta conosciuti nella loro capacità di "chiacchierare", possono essere uno strumento fondamentale per la recon, anche se in una fase avanzata (probabilmente post-scansione, nell'ambito di un modello circolare di penetration test).
Partiamo dalle tecniche più datate e probabilmente oggi non più disponibili (eppure, mai dire mai) all'interno di asset aggiornati. La null session (connessione senza autenticazione del protocollo SMB) che consente (vedi enum4linux) di ottenere elenco utenti di un sistema (Windows o *nix se adotta Samba). Il protocollo finger (con servizio e client omonimi) consente una analoga enumerazione nel mondo *nix: è un protocollo storico per questi sistemi, nato per gestire le informazione utente in una specie di rubrica telefonica per il sistema locale (informazioni Gecos). Si tratta certamente di un protocollo superato da altri più efficaci e completi (che gestiscono i dati di una intera sottorete), ma è importante storicamente in quanto all'origine della prima diffuzione (1988) di un WORM (Morris worm). Anche in questo caso mai dire mai, seguiamo le tracce rilevate dalla scansione sull'asset.
Parlando di protocolli vivi e vegeti, non possiamo dimenticare che il protocollo SMTP può essere stimolato (rapidamente con comando VRFY, se abiitato, o "facendo finta di inviare una email") a verificare la presenza di un utente o alias (una mailbox): questo basta a costruire (mediante un paziente "attacco a dizionario") l'elenco di email di un dominio di posta.
Ultimi ma non meno importante, qualora fossero disponibili il protocollo SNMP o WMI, ovvero sia disponibile un accesso tramite questi, la cosa porterebbe un vantaggio enorme nella fase di recon, in quanto potrebbe rompere la barriera delle informazioni puramente legate ai servizi esposti per arrivare a informazioni che riguardano l'interno del sistema operativo, ivi compreso l'hardware.
Ed è proprio questo che richiedono gli strumenti automatici di VA quando ispezionano "internamente" l'obiettivo e ci forniscono dettagli di vulnerabilità locali (ossia non esposte via rete).