XXE: Externe XML-Entität

Bild
In diesem Artikel werden wir erklären, was die Injektion externer XML-Entitäten ist, einige allgemeine Beispiele beschreiben, erklären, wie verschiedene Arten von XXE-Injektionen gefunden und verwendet werden, und allgemein verallgemeinern, wie Angriffe mit ihrer Hilfe verhindert werden können.

Was ist eine Injektion externer XML-Entitäten?


Das Injizieren externer XML-Entitäten (auch als XXE bezeichnet) ist eine Sicherheitslücke im Web, die es einem Angreifer ermöglichen kann, die Verarbeitung von XML-Daten durch eine Anwendung zu stören. Ein Angreifer kann häufig Dateien im Dateisystem des Anwendungsservers anzeigen und mit jedem Server oder externen System interagieren, auf das die Anwendung selbst zugreifen kann.

In einigen Situationen kann ein Angreifer einen XXE-Angriff nutzen, um einen Kernserver oder eine andere interne Infrastruktur zu gefährden, indem er die XXE-Sicherheitsanfälligkeit ausnutzt, um serverseitige Anforderungsfälschungsangriffe (SSRFs) durchzuführen.

Wie entstehen XXE-Schwachstellen?


Einige Anwendungen verwenden das XML-Format, um Daten zwischen dem Browser und dem Server zu übertragen. Anwendungen, die dies tun, verwenden fast immer die Standardbibliothek oder Plattform-APIs, um XML-Daten auf dem Server zu verarbeiten. Die XXE-Schwachstellen treten auf, weil die XML-Spezifikation verschiedene potenziell gefährliche Funktionen enthält und Standard-Parser diese Funktionen unterstützen, auch wenn sie normalerweise nicht von der Anwendung verwendet werden.

Externe XML-Entitäten sind eine Art benutzerdefinierte XML-Entität, deren spezifische Werte aus den DTD-Dateien geladen werden, in die sie geschrieben wurden. Externe Entitäten sind aus Sicherheitsgründen besonders interessant, da Sie damit eine Entität basierend auf dem Inhalt eines Dateipfads oder einer URL definieren können.

Welche Arten von XXE-Angriffen gibt es?


  • Verwenden von XXE zum Extrahieren von Dateien, wobei eine externe Entität einschließlich des Inhalts der Datei ermittelt und in der Anwendungsantwort zurückgegeben wird.
  • Verwenden von XXE zum Ausführen von SSRF-Angriffen, bei denen eine externe Entität basierend auf der URL des internen Systems bestimmt wird.
  • Verwenden der blinden Extraktion von XXE-Informationen auf dem Kontrollkanal, wo vertrauliche Daten vom Anwendungsserver an das vom Angreifer kontrollierte System übertragen werden.
  • Verwenden von blindem XXE zum Zurückgeben von Daten aus Fehlermeldungen, wenn ein Angreifer eine Fehlermeldung mit den erforderlichen Informationen auslösen kann.
  • Verwenden von XXE zum Extrahieren von Dateien

Um einen Angriff der Form XXE-Injection durchzuführen, bei dem eine beliebige Datei aus dem Server-Dateisystem extrahiert wird, müssen Sie das dargestellte XML auf zwei Arten ändern:

  • Geben Sie das DOCTYPE-Element ein (oder ändern Sie es), das die externe Entität definiert, die den Dateipfad enthält.
  • Ändern Sie den Wert der Daten in XML, die in der Anwendungsantwort zurückgegeben werden, um eine bestimmte externe Entität zu verwenden.

Angenommen, eine Einkaufsanwendung überprüft die Menge der Produktbestände, indem sie das folgende XML an den Server sendet:

<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck>      XXE,     XXE    /etc/passwd,    XXE: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck> 

Diese XXE-Struktur definiert eine externe Entität & xxe, deren Wert der Inhalt der Datei / etc / passwd ist, und verwendet eine Entität mit dem Wert productId. Dies bewirkt, dass die Anwendungsantwort den Inhalt der Datei enthält:

 Invalid product ID: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ... 

Bei echten XXE-Schwachstellen enthält das übermittelte XML häufig eine große Anzahl von Datenwerten, von denen jeder in der Anwendungsantwort verwendet werden kann. Für das systematische Testen von XXE-Schwachstellen muss in der Regel jeder Datenknoten in XML einzeln unter Verwendung einer bestimmten Entität überprüft und der Status der Antwort angezeigt werden.

Neben dem Extrahieren vertraulicher Daten besteht eine weitere Möglichkeit, XXE-Angriffe zu verwenden, darin, sie zum Fälschen von serverseitigen Anforderungen (SSRF) zu verwenden.

Dies ist eine potenziell schwerwiegende Sicherheitsanfälligkeit. Mit ihrer Hilfe kann die Serveranwendung verwendet werden, um HTTP-Anforderungen an eine beliebige URL auszuführen, auf die der Server zugreifen kann.

Um die XXE-Sicherheitsanfälligkeit zum Ausführen eines SSRF-Angriffs zu verwenden, müssen Sie eine externe XML-Entität mithilfe der URL definieren, auf die Sie zugreifen möchten, und eine bestimmte Entität mit einem Datenwert verwenden. Wenn Sie eine bestimmte Entität mit dem Wert der Daten verwenden können, die in der Antwort der Anwendung zurückgegeben werden, können Sie die Antwort von der URL in der Antwort der Anwendung anzeigen und so eine bidirektionale Interaktion mit dem Serversystem erhalten. Wenn nicht, können Sie nur blinde SSRF-Angriffe ausführen (was auch kritische Konsequenzen haben kann).

Im folgenden Beispiel mit XXE zwingt eine externe Entität den Server, eine interne HTTP-Anforderung an das interne System innerhalb der Systeminfrastruktur auszuführen:

 <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]> 

Verwenden von XXE zum Ausführen von SSRF-Angriffen:


Viele Arten von XXE-Schwachstellen sind blind. Dies bedeutet, dass die Anwendung in ihren Antworten nicht den Wert bestimmter externer Entitäten zurückgibt und daher eine direkte Suche nach Dateien auf der Serverseite nicht möglich ist.

Blinde XXE-Schwachstellen können weiterhin erkannt und ausgenutzt werden, es sind jedoch erweiterte Methoden erforderlich. Manchmal können Sie externe Methoden verwenden, um nach Schwachstellen zu suchen und diese zum Exfiltrieren von Daten zu verwenden. Manchmal kann es auch zu XML-Analysefehlern kommen, die zur Offenlegung vertraulicher Daten in Fehlermeldungen führen.

Suche und Verwendung von blinden Schwachstellen XXE:


Die Fähigkeit, mit einer XXE-Injektion anzugreifen, ist in vielen Fällen offensichtlich, da der normale HTTP-Verkehr der Anwendung Anforderungen enthält, die XML-Daten enthalten. In anderen Fällen ist die Angriffsfähigkeit weniger auffällig. Wenn Sie jedoch an den richtigen Stellen suchen, finden Sie in Abfragen, die kein XML enthalten, die Möglichkeit eines XXE-Angriffs.

X Angriffe einschließen


Einige Anwendungen empfangen vom Client gesendete Daten, fügen sie serverseitig in ein XML-Dokument ein und analysieren sie anschließend. Ein Beispiel hierfür ist, wenn Clientdaten in eine SOAP-Backend-Anforderung gestellt werden, die dann vom SOAP-Backend-Service verarbeitet wird.

In diesem Fall können Sie den klassischen XXE-Angriff nicht ausführen, da Sie nicht die Kontrolle über das gesamte XML-Dokument haben und daher das DOCTYPE-Element nicht bestimmen oder ändern können. Sie können jedoch stattdessen XInclude verwenden. XInclude ist Teil der XML-Spezifikation, mit der Sie ein XML-Dokument aus verschachtelten Dokumenten erstellen können. Sie können einen XInclude-Angriff auf einen beliebigen Datenwert in einem XML-Dokument ausführen, sodass der Angriff in Situationen ausgeführt werden kann, in denen Sie nur ein Datenelement steuern, das in einem XML-Dokument auf der Serverseite platziert ist.

Um einen XInclude-Angriff auszuführen, müssen Sie auf den XInclude-Namespace verweisen und den Pfad zu der Datei angeben, die Sie einbeziehen möchten. Zum Beispiel:

 <foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo> 

In einigen Anwendungen können Benutzer Dateien hochladen, die dann auf der Serverseite verarbeitet werden. Einige gängige Dateiformate verwenden XML oder enthalten XML-Unterkomponenten. Beispiele für XML-Formate sind Office-Dokumentformate wie DOCX und Bildformate wie SVG.

Beispielsweise kann eine Anwendung es Benutzern ermöglichen, Bilder hochzuladen und sie nach dem Herunterladen auf dem Server zu verarbeiten oder zu überprüfen. Selbst wenn die Anwendung erwartet, PNG- oder JPEG-Format zu empfangen, unterstützt die verwendete Bildverarbeitungsbibliothek möglicherweise SVG-Bilder. Da das SVG-Format XML verwendet, kann ein Angreifer ein schädliches SVG-Image senden und so XXE-Schwachstellen angreifen.

Verwenden von XXE durch Hochladen von Bilddateien:


Die meisten POST-Anforderungen verwenden den Standardinhaltstyp, der von HTML-Formularen erstellt wurde, z. B. application / x-www-form-urlencoded. Einige Websites erwarten Anfragen in diesem Format, erlauben jedoch andere Arten von Inhalten, einschließlich XML.

Zum Beispiel, wenn eine reguläre Anfrage Folgendes enthält:

 POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar         : POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo> 

Wenn eine Anwendung Anforderungen akzeptiert, die XML im Nachrichtentext enthalten, und den Inhalt als XML analysiert, können Sie XXE angreifen, indem Sie die Anforderungen einfach neu formatieren, um das XML-Format zu verwenden.

So finden und überprüfen Sie XXE-Schwachstellen


Die überwiegende Mehrheit der XXE-Schwachstellen kann mithilfe des Burp Suite-Web-Schwachstellenscanners schnell und zuverlässig gefunden werden.

  • Das manuelle Testen von XXE-Schwachstellen umfasst normalerweise:
  • Testen der Dateiextraktion durch Definieren einer externen Entität basierend auf einer bekannten Betriebssystemdatei und Verwenden dieses Objekts in den in der Anwendungsantwort zurückgegebenen Daten.
  • Testen von blinden XXE-Schwachstellen durch Definieren einer externen Entität basierend auf der URL des Systems, das Sie verwalten, und Überwachen der Interaktion mit diesem System. Der Burp Collaborator-Client ist ideal für diesen Zweck.
  • Testen auf anfällige Aufnahme von Nicht-XML-Benutzerdaten in ein XML-Serverdokument mithilfe eines XInclude-Angriffs, um zu versuchen, eine bekannte Betriebssystemdatei abzurufen.

So verhindern Sie XXE-Schwachstellen


Fast alle XXE-Schwachstellen entstehen aufgrund der Tatsache, dass die Parsing-Bibliothek für XML-Anwendungen potenziell gefährliche XML-Funktionen unterstützt, die die Anwendung nicht benötigt oder nicht verwenden soll. Der einfachste und effektivste Weg, XXE-Angriffe zu verhindern, besteht darin, diese Funktionen zu deaktivieren.

In der Regel reicht es aus, die Auflösung externer Entitäten zu deaktivieren und die XInclude-Unterstützung zu deaktivieren. Dies kann normalerweise mithilfe von Konfigurationsoptionen oder durch programmgesteuertes Überschreiben des Standardverhaltens erfolgen. Weitere Informationen zum Deaktivieren unnötiger Funktionen finden Sie in der Dokumentation zur XML- oder API-Parsing-Bibliothek.



Sie können spezialisierte Labors als Schulungsgelände verwenden, um die Fähigkeiten zum Ausnutzen solcher Schwachstellen zu testen.



Die neuesten Dual-Prozessor-Konfigurationen dedizierter Server mit Intel Scalable-Prozessoren für 2019 sind auf DEDIC.SH verfügbar:
  • 2x Xeon Silver 4214 - insgesamt 24 Kerne
  • 2x Xeon Gold 5218 - insgesamt 32 Kerne
  • 2x Xeon Gold 6240 - Konfiguration mit 36 ​​Kernen.

Die Kosten für einen Server mit zwei Xeon Silver 4214 - ab 15210 Rubel / Monat
Wir sind auch bereit, jede Konfiguration für Sie zu sammeln - schreiben Sie uns !

Wenn keine großen Leistungen eines dedizierten Servers erforderlich sind - VDS ab 150 Rubel / Monat ist das, was Sie brauchen!

Source: https://habr.com/ru/post/de454614/


All Articles