Der rasante Aufstieg der Technologie hat zu einem hohen Bedarf an qualifizierten Entwicklern geführt. Open-Source-Software (OSS) ist zu einem unverzichtbaren Werkzeug für diese wachsende Zahl von Arbeitskräften geworden. Es gibt inzwischen Hunderttausende gut eingeführter OSS-Pakete in verschiedenen Programmiersprachen. Über 90 % der Entwickler setzen diese Open-Source-Komponenten in ihren eigenen Anwendungen ein, was die Effizienz und den Wert von OSS unterstreicht. Um seine Bedeutung weiter zu unterstreichen, wird erwartet, dass der weltweite Markt für Open-Source-Software bis 2030 ein Volumen von 80,7 Milliarden Dollar erreichen wird, was einer prognostizierten Wachstumsrate von 16,7 % pro Jahr entspricht.
Software ist ein wesentlicher Bestandteil von Geschäftsabläufen auf der ganzen Welt und wird daher häufig von Bedrohungsakteuren ins Visier genommen. Im Jahr 2023 beliefen sich die Ausgaben für Anwendungssicherheit auf ca. 5,76 Mrd. US-Dollar, wobei für 2024 ein Wert von 6,67 Mrd. US-Dollar prognostiziert wird. Innerhalb von AppSec hat die Sicherheit der Software-Lieferkette in den letzten drei Jahren an Bedeutung gewonnen und stellt die am schnellsten wachsende Angriffskategorie dar, wobei große Sicherheitslücken und Exploits regelmäßig für Schlagzeilen sorgen.
Unternehmen gehen oft davon aus, dass die meisten Risiken von öffentlich zugänglichen Webanwendungen ausgehen. Diese Sichtweise hat sich jedoch in den letzten Jahren geändert. Da jede Anwendung aus Dutzenden von kleinen Komponenten besteht, können Risiken heute von jedem Punkt der Codebasis ausgehen. Für Unternehmen ist es wichtiger denn je, sich mit bestehenden und neu auftretenden Sicherheitslücken im Lebenszyklus der Softwareentwicklung vertraut zu machen. In diesem Blogbeitrag werfen unsere Graduate Fellows einen genaueren Blick auf CVE-2023-23924, eine kritische Sicherheitslücke, die in der weit verbreiteten dompdf-Bibliothek entdeckt wurde - einem leistungsstarken PHP-Tool, das die dynamische Erzeugung von PDF-Dokumenten aus HTML und CSS ermöglicht.
In einer umfassenden Analyse werden wir die technischen Feinheiten dieser Schwachstelle, die zugehörigen Technologien, die eine entscheidende Rolle spielen, und eine Simulation des Ausnutzungsprozesses untersuchen. Wir werden auch untersuchen, wie OPSWAT MetaDefender Core, insbesondere seine Software Bill of Materials (SBOM) Engine, kann genutzt werden, um diese Schwachstelle zu erkennen und zu entschärfen. So können Softwareentwickler und Sicherheitsteams potenziellen Bedrohungen einen Schritt voraus sein.
Hintergrund zu CVE-2023-23924
Eine Sicherheitslücke wurde in dompdf Version 2.0.1 entdeckt und Anfang 2023 veröffentlicht:
- Die URI-Validierung von dompdf 2.0.1 kann beim SVG-Parsing umgangen werden, indem man
<image>
Tags mit Großbuchstaben. Dies erlaubt einem Angreifer, beliebige URLs mit beliebigen Protokollen aufzurufen, was in PHP-Versionen vor 8.0.0 zu einer beliebigen Objekt-Deserialisierung führt. Durch den PHAR-URL-Wrapper kann diese Verwundbarkeit, abhängig von den verfügbaren Klassen, eine beliebige Dateilöschung und sogar entfernte Codeausführung verursachen. - Die NVD-Analysten wiesen CVE-2023-23924 eine CVSS-Punktzahl von 9.8 CRITICAL zu.
Die Dompdf-Schwachstelle verstehen
Um die Sicherheitslücke CVE-2023-23924 in dompdf vollständig zu verstehen, ist es wichtig, sich mit zwei eng verwandten Technologien vertraut zu machen: Skalierbare Vektorgrafiken (SVG) und PHAR-Dateien.
SVG (Scalable Vector Graphics, skalierbare Vektorgrafiken) ist ein vielseitiges Bildformat, das aufgrund seiner Fähigkeit, qualitativ hochwertige Grafiken im Web zu rendern und dabei leichtgewichtig und skalierbar zu bleiben, große Beliebtheit erlangt hat. Im Gegensatz zu Rasterbildern basieren SVGs auf XML-Markup und ermöglichen eine präzise Steuerung von Elementen wie Linien, Formen und Text. Einer der Hauptvorteile von SVGs ist, dass sie nahtlos skaliert werden können, ohne dass die Bildqualität darunter leidet, was sie ideal für responsives Webdesign und hochauflösende Displays macht.
PHAR (PHP Archive) ist analog zum JAR-Dateikonzept, jedoch für PHP. Es ermöglicht eine einfache Bereitstellung durch Bündelung des gesamten PHP-Codes und der Ressourcendatei in einer einzigen Archivdatei.
Eine PHAR-Datei besteht aus 4 Abschnitten:
- Stubs: enthält den Code für das Bootstrapping des Archivs.
- Manifest: enthält die Metadaten des Archivs. Die Metadaten werden in einem serialisierten Format gespeichert, das zum Auslösen eines deserialisierten PHP-Angriffs in einer bösartigen PHAR-Datei verwendet werden könnte.
- Dateiinhalt: enthält den Inhalt des Archivs, einschließlich PHP-Code und Ressourcendateien.
- Signatur (optional): enthält Daten zur Überprüfung der Integrität der Datei.
Da die Metadaten in einem serialisierten Format gespeichert sind, könnte die Kombination aus dem PHAR-Wrapper und den Metadaten der PHAR-Datei möglicherweise einen Deserialisierungsangriff auslösen, wenn sie als Eingabe in PHP-Funktionen wie file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
oder Dateigröße()
. Diese Sicherheitslücke könnte es Angreifern ermöglichen, über eine PHAR-Datei entfernten Code auszuführen.
Wie Dompdf eine PDF-Datei generiert
Bei der Analyse haben die OPSWAT Graduate Fellows festgestellt, dass der Konvertierungsprozess bei dompdf in drei Phasen abläuft. Um eine HTML-Datei in das PDF-Format zu konvertieren, zerlegt die dompdf-Bibliothek zunächst die Eingabedatei in einen DOM-Baum und speichert die Positionierungs- und Layout-Informationen der einzelnen Objekte. Anschließend wird das CSS-Styling analysiert und auf jedes Objekt angewendet. Zum Schluss werden die Objekte so umorganisiert, dass sie auf die Seite passen und in die endgültige PDF-Datei gerendert werden.
Um die Sicherheit zu erhöhen, implementiert dompdf eine Validierung, um die Sicherheit der URI-Eingaben zu gewährleisten, bevor mit dem nächsten Schritt fortgefahren wird. Dieser Validierungsprozess zeigt sich bei der Verarbeitung von SVG-Dateien innerhalb des Wertes von xlink:href
Attribut.
Enthält die SVG-Eingabedatei das <image>
Tag unter dem <svg>
Tag ist eine Bedingung implementiert, die nur bestimmte Protokolle zulässt, wie z. B. http://
, https://
und file://
für die xlink:href
Feld.
Die resolve_url()
Funktion validiert den URI, bevor sie ihn mit der drawImage()
Funktion. Wenn das Schema im URI nicht zu den zulässigen Protokollen gehört, wird die resolve_url()
Funktion gibt eine Ausnahme an die Anwendung zurück.
Wenn der URI die Validierung besteht, wird er an die drawImage()
Funktion, die die file_get_contents()
Funktion zur Behandlung des URI-Werts innerhalb der xlink:href
Attribut. Die Sicherheitslücke entsteht an diesem Punkt: ein PHAR-Deserialisierungsangriff könnte ausgelöst werden, wenn ein Angreifer die Validierung umgehen und einen PHAR-Wrapper in den URI einfügen könnte.
Nach der Analyse wird festgestellt, dass die Validierung nur bei Tags mit dem exakten Namensbild erzwungen wird.
Daher kann sie leicht umgangen werden, indem ein oder mehrere Zeichen im Namen des Tags großgeschrieben werden, wie z. B. Image. Infolgedessen könnte eine speziell gestaltete SVG-Datei, die Image anstelle von image verwendet, diese Validierung umgehen.
In einem weiteren Schritt wird die drawImage()
aufgerufen und die URI der SVG-Datei an die Funktion file_get_contents()
Funktion. Daher ermöglicht die Kombination aus der Umgehung der Validierung und einem Deserialisierungsangriff auf eine PHAR-Datei einem Angreifer die Ausführung von Remote-Code. Diese Schwachstelle öffnet einem böswilligen Angreifer die Tür, um den Anwendungsserver über eine SVG-Datei zu kompromittieren, wenn diese von einer anfälligen Version von dompdf verarbeitet wird.
Dompdf-Ausnutzungssimulation
Um diese Ausnutzung als reales Szenario zu simulieren, haben OPSWAT Graduate Fellows eine Webanwendung entwickelt, die die Konvertierung von HTML in PDF mit der dompdf-Bibliothek Version 2.0.1 ermöglicht. Mit dieser Anwendung können Benutzer Dateitypen wie HTML, XML oder SVG hochladen und dann in PDF-Dateien umwandeln.
Ein Angreifer geht folgendermaßen vor, um diese Schwachstelle in einer Anwendung auszunutzen, die eine verwundbare dompdf-Version (Version 2.0.1) verwendet:
Zunächst erzeugt ein Angreifer ein bösartiges Objekt, das beim Aufruf des Destruktors eine Reverse Shell erstellt.
Zweitens erstellt der Angreifer eine PHAR-Datei, die das bösartige Metadatenobjekt enthält. Wenn die PHAR-Datei von dem PHAR-Wrapper in der file_get_content()
Funktion werden die Metadaten deserialisiert und das angegebene Objekt wird verarbeitet. Während dieses Deserialisierungsprozesses löst sie die Destruktoren aus und führt die Reverse Shell aus.
Letztendlich bettet der Angreifer den URI-Link, der den PHAR-Wrapper enthält, in den Wert von xlink:href
Attribut im Image-Tag, um die Validierung zu umgehen, bösartigen Code auszuführen und diese bösartige Datei in die Anwendung hochzuladen.
Während der Verarbeitung der hochgeladenen bösartigen SVG-Datei baut die Anwendung eine umgekehrte Verbindung zum Angreifer auf, wodurch dieser den Anwendungsserver kompromittieren kann.
Absicherung von Open-Source-Komponenten mit OPSWAT MetaDefender Core
Um die Sicherheitslücke CVE-2023-23924 in dompdf zu erkennen und zu entschärfen, nutzten unsere Graduate Fellows OPSWAT MetaDefender Core , ein mehrschichtiges Cybersecurity-Produkt, das fortschrittliche Malware-Präventions- und Erkennungstechnologien, einschließlich SBOM, bietet.
OPSWAT SBOM sichert die Software-Lieferkette durch die Bereitstellung eines umfassenden Komponenteninventars für Quellcode und Container. Durch die Analyse der dompdf-Bibliothek und ihrer Abhängigkeiten kann OPSWAT SBOM das Vorhandensein der verwundbaren Version 2.0.1 schnell identifizieren und die Benutzer auf das potenzielle Risiko hinweisen.
Darüber hinaus kann OPSWAT SBOM verwandte Technologien wie SVG- und PHAR-Dateien erkennen, die für das Verständnis und die Entschärfung der Sicherheitslücke CVE-2023-23924 wichtig sind. Diese ganzheitliche Sicht auf die Softwarekomponenten der Anwendung ermöglicht es den Sicherheitsteams, fundierte Entscheidungen zu treffen und geeignete Maßnahmen zur Behebung der erkannten Risiken zu ergreifen.
Neben der Erkennung der verwundbaren dompdf-Version bietet OPSWAT SBOM auch wertvolle Einblicke in die betroffenen Komponenten, ihre Versionen und alle verfügbaren Updates oder Patches. Anhand dieser Informationen können Sicherheitsteams ihre Abhilfemaßnahmen priorisieren und sicherstellen, dass die Anwendung auf eine sichere Version von dompdf aktualisiert wird, um die Sicherheitslücke CVE-2023-23924 effektiv zu schließen.
Durch den Einsatz der SBOM-Engine in MetaDefender Core können Unternehmen ihre Software-Lieferkette proaktiv überwachen, potenzielle Schwachstellen in Open-Source-Komponenten identifizieren und rechtzeitig Strategien zur Schadensbegrenzung implementieren, um die allgemeine Sicherheit und Integrität ihrer Anwendungen zu gewährleisten.
Abschließende Überlegungen
Die Entdeckung von CVE-2023-23924 in der dompdf-Bibliothek unterstreicht die Notwendigkeit der Wachsamkeit in der dynamischen Landschaft der Anwendungssicherheit. Durch die Nutzung der in diesem Blog-Beitrag beschriebenen Erkenntnisse und Strategien können Sicherheitsteams ihre Anwendungen effektiv aufspüren, entschärfen und vor solchen Schwachstellen schützen und so die allgemeine Sicherheit und Integrität ihres Software-Ökosystems gewährleisten.