Iniezione XXE
Un file XML caricato che legge i file del server.
Cos’è Iniezione XXE?
XXE trasforma un parser XML in una primitiva di lettura di file e di falsificazione di richieste. L'aggressore dichiara un'entità SYSTEM in un DOCTYPE e il parser incorpora un file locale o la risposta di un URL interno, prima che il codice veda il documento. Ciò lo rende un bug di configurazione del parser piuttosto che di forma dell'input. Indirizzerai il caricamento di un ordine di acquisto su file:///etc/passwd e lo rileggerai nel campo del fornitore ripetuto. Quindi correggi libxmljs.parseXml(..., { noent: true }) : rifiuta DOCTYPE e dichiarazioni di entità e analizza con la risoluzione di entità esterna e DTD disattivata.
Cosa imparerai in Iniezione XXE
- Riconoscere XXE come un bug di configurazione del parser, non un bug di forma dell'input
- Leggere un payload XML e identificare la dichiarazione dell'entità SYSTEM che lo rende pericoloso
- Comprendi che XXE generalizza dalla lettura del file locale al recupero dell'URL interno (SSRF)
- Applica la correzione a livello di parser (disabilita la risoluzione delle entità esterne) e sovrapponi i controlli approfonditi di difesa in cima
- Controlla ogni sito di chiamata di analisi XML per lo stesso flag una volta trovato
Iniezione XXE — Fasi della formazione
-
Trova la funzione di assunzione
Brackwell Logistics consente a qualsiasi fornitore registrato di inviare un ordine di acquisto caricandolo come file XML. Il modulo prende il documento, lo analizza sui server di Brackwell e legge il fornitore e il totale. Bob apre la funzione per vedere come si comporta prima di toccarla.
-
Dove avviene l'analisi
Una riga in quella pagina è l'intera ragione per cui Bob è interessato.
-
Carica un ordine normale
Innanzitutto, osserva la funzione comportarsi normalmente. Bob allega un ordine di acquisto ordinario e lo invia. Il pannello Rete del browser registra la richiesta e la risposta del server, esattamente ciò che uno sviluppatore vede in DevTools.
-
Ciò che ha fatto eco il parser
L'ordine è stato analizzato in modo pulito. Un dettaglio nella risposta dice a Bob come attaccarlo.
-
Inizia da un file normale
Bob apre l'ordine d'acquisto ordinario nel suo editor. In questo momento è esattamente quello che sembra: un fornitore e dati completi e semplici. XML consente a un documento di dichiarare un'entità esterna, un segnaposto con nome il cui valore il parser recupera da qualche altra parte. Bob sta per aggiungerne uno.
-
Trasforma il file in un'arma
Bob aggiunge un DOCTYPE che dichiara un'entità esterna che punta a un file su disco, quindi indirizza il campo del fornitore a quell'entità. Il file viene comunque analizzato come un ordine di acquisto. Inizia con il file che ogni macchina Linux ha, per dimostrare che il parser segue del tutto il riferimento.
-
L'entità
Sono bastate due righe.
-
Carica il file creato
Bob invia il file creato tramite la stessa funzione di assunzione. Per il browser è solo un altro caricamento di ordini di acquisto.
-
Il file ritorna
La risposta non è il nome di un fornitore. È il file della password del server, letto dal disco e restituito direttamente tramite il normale output del caricamento.
-
Verifica della conoscenza
Hai appena visto il caricamento di un ordine di acquisto leggere i file del server. Blocca il perché.
Copertura dei framework di sicurezza
OWASP Top 10
- A02:2025 Security Misconfiguration
- A05:2021 Security Misconfiguration
CWE
- CWE-611 Improper Restriction of XML External Entity Reference
- CWE-918 Server-Side Request Forgery (SSRF)
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security