L'essor rapide des technologies a créé une forte demande de développeurs qualifiés. Les logiciels libres sont devenus un outil essentiel pour cette main-d'œuvre en pleine croissance. Il existe aujourd'hui des centaines de milliers de logiciels libres bien établis dans différents langages de programmation. Plus de 90 % des développeurs utilisent ces composants libres dans leurs applications propriétaires, ce qui souligne l'efficacité et la valeur ajoutée des logiciels libres. Le marché mondial des logiciels libres devrait atteindre 80,7 milliards de dollars d'ici à 2030, soit un taux de croissance annuel de 16,7 %, ce qui souligne encore son importance.
Les Software font partie intégrante des opérations commerciales dans le monde entier et sont donc fréquemment ciblés par les acteurs de la menace. En 2023, les dépenses consacrées à la sécurité des applications s'élevaient à environ 5,76 milliards de dollars, avec des projections atteignant 6,67 milliards de dollars en 2024. Au sein de l'AppSec, la sécurité de la chaîne d'approvisionnement des logiciels a pris de l'importance au cours des trois dernières années, représentant la catégorie d'attaque à la croissance la plus rapide, avec des brèches et des exploits majeurs faisant régulièrement la une des journaux.
Les entreprises partent souvent du principe que la plupart des risques proviennent des applications web publiques. Toutefois, cette perspective a changé au cours des dernières années. Avec des dizaines de petits composants dans chaque application, les risques peuvent désormais émerger de n'importe quel endroit de la base de code. Il est plus que jamais essentiel pour les organisations de se familiariser avec les failles de sécurité existantes et émergentes dans le cycle de développement des logiciels. Dans ce billet de blog, nos boursiers diplômés examinent de plus près la CVE-2023-23924, une faille de sécurité critique découverte dans la bibliothèque dompdf largement utilisée, un outil PHP puissant qui permet la génération dynamique de documents PDF à partir de HTML et de CSS.
Grâce à une analyse complète, nous explorerons les subtilités techniques de cette vulnérabilité, les technologies connexes qui jouent un rôle crucial, ainsi qu'une simulation du processus d'exploitation. Nous examinerons également comment OPSWAT MetaDefender CoreOPSWAT MetaDefender Core, en particulier son Software Bill of Materials (SBOM) peut être utilisé pour détecter et atténuer cette vulnérabilité, permettant ainsi aux développeurs de logiciels et aux équipes de sécurité de garder une longueur d'avance sur les menaces potentielles.
Contexte de CVE-2023-23924
Une faille de sécurité a été découverte dans la version 2.0.1 de dompdf et rendue publique au début de l'année 2023 :
- La validation de l'URI sur dompdf 2.0.1 peut être contournée lors de l'analyse SVG en passant le paramètre
<image>
avec des lettres majuscules. Cela permet à un attaquant d'appeler des URL arbitraires avec des protocoles arbitraires, conduisant à une désérialisation arbitraire des objets dans les versions de PHP antérieures à 8.0.0. À travers le wrapper URL PHAR, cette vulnérabilité peut provoquer la suppression arbitraire de fichiers et même l'exécution de code à distance, en fonction des classes disponibles. - Les analystes de NVD ont attribué un score CVSS de 9.8 CRITIQUE à CVE-2023-23924.
Comprendre la vulnérabilité de Dompdf
Pour bien comprendre la vulnérabilité CVE-2023-23924 dans dompdf, il est essentiel de se familiariser avec deux technologies étroitement liées : les graphiques vectoriels évolutifs (SVG) et les fichiers PHAR.
SVG (Scalable Vector Graphics) est un format d'image polyvalent qui a gagné en popularité grâce à sa capacité à restituer des graphiques de haute qualité sur le web tout en restant léger et évolutif. Contrairement aux images matricielles, les SVG sont basés sur le balisage XML, ce qui permet un contrôle précis des éléments tels que les lignes, les formes et le texte. L'un des principaux avantages des SVG est leur capacité à s'adapter de manière transparente sans perdre la qualité de l'image, ce qui les rend idéaux pour la conception de sites web réactifs et les écrans à haute résolution.
PHAR (PHP Archive) est analogue au concept de fichier JAR, mais pour PHP. Il permet un déploiement facile en regroupant tout le code PHP et les fichiers de ressources dans un seul fichier d'archive.
Un fichier PHAR se compose de 4 sections :
- Stubs : contient le code pour démarrer l'archive.
- Manifest : contient les métadonnées de l'archive. Les métadonnées sont stockées dans un format sérialisé, qui pourrait être utilisé pour déclencher une attaque par désérialisation PHP dans un fichier PHAR malveillant.
- Contenu du fichier : contient le contenu de l'archive, y compris le code PHP et les fichiers de ressources.
- Signature (facultatif) : contient des données permettant de vérifier l'intégrité du fichier.
Les métadonnées étant stockées dans un format sérialisé, la combinaison de l'enveloppe PHAR et des métadonnées du fichier PHAR pourrait potentiellement déclencher une attaque par désérialisation lorsqu'elle est utilisée comme entrée dans des fonctions PHP telles que file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
ou taille des fichiers()
. Cette faille de sécurité pourrait permettre à des attaquants d'exécuter du code à distance via un fichier PHAR.
Comment Dompdf génère un fichier PDF
Grâce à l'analyse, OPSWAT Graduate Fellows a identifié trois étapes au cours du processus de conversion sur dompdf. Pour convertir un fichier HTML au format PDF, la bibliothèque dompdf analyse d'abord le fichier d'entrée en un arbre DOM et stocke les informations de positionnement et de mise en page de chaque objet. Ensuite, le style CSS est analysé et appliqué à chaque objet. Enfin, les objets sont réorganisés pour tenir sur la page et rendus dans le fichier PDF final.
Pour améliorer la sécurité, dompdf met en œuvre une validation pour garantir la sécurité des entrées URI avant de passer à l'étape suivante. Ce processus de validation est évident lors du traitement des fichiers SVG dans la valeur de xlink:href
attribut.
Si le fichier d'entrée SVG contient l'élément <image>
sous la balise <svg>
une condition est mise en œuvre pour n'autoriser que certains protocoles, tels que http://
, https://
et file://
pour les xlink:href
domaine.
Le resolve_url()
validera l'URI avant de le traiter avec la fonction drawImage()
fonction. Si le schéma de l'URI ne figure pas parmi les protocoles autorisés, la fonction resolve_url()
renverra une exception à l'application.
Si l'URI passe la validation, il sera transmis à la fonction drawImage()
qui utilise la fonction file_get_contents()
pour gérer la valeur de l'URI dans le xlink:href
attribut. La faille de sécurité apparaît à ce stade : une attaque de désérialisation PHAR pourrait être déclenchée si un attaquant pouvait contourner la validation et passer un wrapper PHAR dans l'URI.
Après analyse, on découvre que la validation n'est appliquée qu'aux balises dont l'image du nom est exacte.
Par conséquent, il peut être facilement contourné en mettant en majuscule un ou plusieurs caractères dans le nom de la balise, comme Image. Par conséquent, un fichier SVG spécialement conçu utilisant Image au lieu de image pourrait échapper à cette validation.
Dans l'étape suivante, le drawImage()
est invoquée, en passant l'URI du fichier SVG à la fonction file_get_contents()
. Par conséquent, la combinaison du contournement de la validation et d'une attaque de désérialisation sur un fichier PHAR permet à un attaquant de procéder à une exécution de code à distance. Cette vulnérabilité permet à un attaquant malveillant de compromettre le serveur d'application par le biais d'un fichier SVG s'il est traité par une version vulnérable de dompdf.
Simulation d'exploitation de Dompdf
Pour simuler cette exploitation comme un scénario réel, les boursiers diplômés de OPSWAT ont développé une application web permettant la conversion de HTML en PDF à l'aide de la version 2.0.1 de la bibliothèque dompdf. Cette application permet aux utilisateurs de télécharger des types de fichiers tels que HTML, XML ou SVG, puis de les convertir en fichiers PDF.
Un attaquant suivra les étapes suivantes pour exploiter cette vulnérabilité dans une application utilisant une version vulnérable de dompdf (version 2.0.1) :
Tout d'abord, un attaquant génère un objet malveillant qui crée un shell inversé lorsque le destructeur est appelé.
Ensuite, l'attaquant crée un fichier PHAR contenant l'objet de métadonnées malveillant. Lorsque le fichier PHAR est invoqué par le wrapper PHAR dans le fichier file_get_content()
les métadonnées sont désérialisées et l'objet spécifié est traité. Au cours de ce processus de désérialisation, elle déclenche les destructeurs et exécute le reverse shell.
Enfin, l'attaquant insère le lien URI contenant l'enveloppe PHAR dans la valeur de xlink:href
dans la balise Image afin de contourner la validation, d'exécuter un code malveillant et de télécharger ce fichier malveillant vers l'application.
Pendant le traitement du fichier SVG malveillant téléchargé, l'application établit une connexion inverse avec l'attaquant, ce qui lui permet de compromettre le serveur d'application.
Sécuriser les composants open-source avec OPSWAT MetaDefender Core
Pour détecter et atténuer la vulnérabilité CVE-2023-23924 dans dompdf, nos boursiers ont utilisé OPSWAT MetaDefender Core , un produit de cybersécurité à plusieurs niveaux offrant des technologies avancées de prévention et de détection des logiciels malveillants, y compris le SBOM.
OPSWAT SBOM sécurise la chaîne d'approvisionnement des logiciels en fournissant un inventaire complet des composants du code source et des conteneurs. En analysant la bibliothèque dompdf et ses dépendances, OPSWAT SBOM peut rapidement identifier la présence de la version 2.0.1 vulnérable et alerter les utilisateurs du risque potentiel.
En outre, OPSWAT SBOM peut détecter des technologies connexes, telles que les fichiers SVG et PHAR, qui sont essentielles pour comprendre et atténuer la vulnérabilité CVE-2023-23924. Cette vision holistique des composants logiciels de l'application permet aux équipes de sécurité de prendre des décisions éclairées et de prendre des mesures appropriées pour faire face aux risques identifiés.
Au-delà de la détection de la version vulnérable de dompdf, OPSWAT SBOM fournit également des informations précieuses sur les composants affectés, leurs versions et toutes les mises à jour ou correctifs disponibles. Ces informations permettent aux équipes de sécurité de prioriser leurs efforts de remédiation et de s'assurer que l'application est mise à jour vers une version sécurisée de dompdf, ce qui permet de remédier efficacement à la vulnérabilité CVE-2023-23924.
En s'appuyant sur le moteur SBOM de MetaDefender Core , les organisations peuvent surveiller de manière proactive leur chaîne d'approvisionnement en logiciels, identifier les vulnérabilités potentielles des composants open-source et mettre en œuvre des stratégies d'atténuation opportunes, garantissant ainsi la sécurité et l'intégrité globales de leurs applications.
Réflexions finales
La découverte de CVE-2023-23924 dans la bibliothèque dompdf souligne le besoin critique de vigilance dans le paysage dynamique de la sécurité des applications. En s'appuyant sur les idées et les stratégies décrites dans ce billet, les équipes de sécurité peuvent détecter, atténuer et protéger efficacement leurs applications contre de telles vulnérabilités, garantissant ainsi la sécurité et l'intégrité globales de leur écosystème logiciel.