Iniezione XXE

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

Iniezione XXE — Fasi della formazione

  1. 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.

  2. Dove avviene l'analisi

    Una riga in quella pagina è l'intera ragione per cui Bob è interessato.

  3. 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.

  4. Ciò che ha fatto eco il parser

    L'ordine è stato analizzato in modo pulito. Un dettaglio nella risposta dice a Bob come attaccarlo.

  5. 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.

  6. 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.

  7. L'entità

    Sono bastate due righe.

  8. 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.

  9. 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.

  10. 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