Les fichiers images sont généralement considérés comme des fichiers sûrs et sont souvent manipulés sans conscience des problèmes de sécurité potentiels. Ces fichiers images, en particulier les fichiers SVG, sont des vecteurs d'attaque courants pour lancer des attaques dangereuses telles que les scripts intersites (XSS) ou l'injection d'entités externes XML (XXE). Contrairement aux attaques XSS, les attaques par injection XXE n'affectent pas le côté client, mais elles peuvent affecter de manière significative le côté serveur, entraînant plusieurs impacts graves. Dans ce billet de blog, nous allons explorer la nature des attaques XXE, en particulier via le vecteur d'attaque SVG (Scalable Vector Graphics ), discuter d'un exemple réel et fournir des stratégies d'atténuation avec les produits OPSWAT .
Informations générales
Avant de nous pencher sur la vulnérabilité, nous allons d'abord examiner le format de fichier XML et SVG et la cause profonde de la technique d'injection XXE.
Format de fichier XML
XML (eXtensible Markup Language) est un format de fichier indépendant de la plate-forme pour le stockage et l'échange de données structurées. Le XML prend en charge la structure hiérarchique, ce qui le rend idéal pour représenter des relations de données complexes. Les données au format XML sont organisées en balises, attributs et contenu, de la même manière que le HTML. Cependant, XML est hautement personnalisable et extensible, ce qui permet aux utilisateurs de définir leurs balises et leurs attributs en fonction de leurs besoins. La figure ci-dessous montre les données du département IT au format XML.
Entités XML
En XML, les entités sont des espaces réservés pour les données qui vous permettent d'incorporer du texte ou des documents entiers dans le document actuel. D'un point de vue syntaxique, une entité en XML est entourée d'une esperluette (&) et d'un point-virgule ( ;). Dans l'exemple ci-dessous, deux entités sont définies dans la définition du type de document et font référence au contenu du fichier XML. La différence entre les deux entités est que l'entité interne est définie et référencée dans le document actuel, tandis que le contenu de l'entité externe provient d'un document externe. Après l'analyse et la résolution des entités, celles-ci sont remplacées par les données correspondantes.
Format de fichier SVG
SVG (Scalable Vector Graphics) est un format de fichier polyvalent très utilisé dans le développement web, la conception graphique et la visualisation de données. Contrairement aux formats d'image traditionnels tels que JPEG ou PNG, SVG utilise le format XML pour décrire des graphiques vectoriels bidimensionnels. Plus précisément, les images SVG sont composées de formes géométriques telles que des lignes, des courbes et des polygones, définies par des équations mathématiques plutôt que par des pixels individuels. Par conséquent, les graphiques SVG peuvent être mis à l'échelle à l'infini sans perte de qualité, ce qui les rend idéaux pour la conception de sites web réactifs et les écrans à haute résolution. En raison de la nature XML du format SVG, il fournit également des vecteurs d'attaque potentiels pour les exploits liés à XML.
Technique d'injection XXE et impacts
La technique d'injection XXE abuse du mécanisme de résolution des entités externes. Plus précisément, lorsque l'analyseur syntaxique rencontre une entité externe, il récupère le contenu correspondant en fonction du type du fichier ressource.
Si le fichier de ressources est local, l'analyseur syntaxique récupère le contenu du fichier et remplace l'entité par les données correspondantes. Cela permettrait à un attaquant de montrer des données sensibles telles que la configuration du serveur, les informations d'identification, etc. Pour exploiter avec succès la vulnérabilité, l'attaquant déclare une entité externe faisant référence au contenu de fichiers sensibles, /etc./password par exemple.
Toutefois, si la ressource est distante ou s'il s'agit d'un service interne, l'analyseur syntaxique essaiera de récupérer les données en demandant l'URL définie. Cela pourrait être exploité pour effectuer une falsification de requête côté serveur (SSRF). Dans ce cas, au lieu de faire référence à un fichier local, l'attaquant modifiera la charge utile en URL du service vulnérable à demander au nom du serveur.
Attaque XXE via une mauvaise manipulation des fichiers SVG : Une étude de cas
Nous allons étudier un XXE pour un cas réel, la bibliothèque SVGLIB jusqu'à la version 0.9.3. La vulnérabilité a été découverte en 2020 et assignée CVE-2020-10799. Nous allons d'abord examiner le flux de la bibliothèque, analyser l'extrait de code vulnérable, et enfin prouver l'exploitation via un service de conversion de SVG en PNG. La cible est constituée d'applications web auto-implémentées utilisant des versions vulnérables de SVGLIB pour la conversion.
Paquet svglib
svglib est une bibliothèque purement Python conçue pour convertir le format SVG en d'autres formats tels que PNG, JPG, PDF, etc. en utilisant la boîte à outils Open-Source Report Lab. Comme les fichiers SVG utilisent le format XML, l'analyse et la manipulation du XML font également partie du flux principal de la bibliothèque. Les trois étapes principales de la bibliothèque sont les suivantes :
Exploitation
La vulnérabilité réside dans le processus d'analyse du fichier SVG qui, s'il est mal configuré, entraîne une fuite des données sensibles sur le serveur et peut provoquer des vulnérabilités SSRF. Un examen plus approfondi du code source du paquetage svglib montre que la vulnérabilité XXE est due à l'utilisation de la configuration par défaut pour l'analyse et le traitement du format XML lors du chargement du fichier SVG. Le paquetage utilise le paquetage lxml, dans lequel la valeur par défaut des attributs resolve_ entities pour la classe XMLParser est True.
Remédiation
La cause première du problème est l'analyse XML non sécurisée, qui est mise en œuvre de manière incorrecte dans la bibliothèque svglib et dans une partie de la dépendance lxml. Par conséquent, l'utilisation d'une version vulnérable de cette bibliothèque peut entraîner la divulgation d'informations sensibles, la falsification de requêtes côté serveur, voire l'exécution potentielle de codes à distance, en fonction de l'environnement déployé et de la fonctionnalité de l'application. Les vulnérabilités introduites par des bibliothèques tierces constituent un problème grave pour la sécurité des grandes applications, car leurs dépendances peuvent être complexes et non transparentes.
MetaDefender Software Supply Chain
OPSWAT MetaDefender Software Supply Chain offre une visibilité accrue et une défense solide contre les risques liés à la chaîne d'approvisionnement grâce à la combinaison de plusieurs technologies. OPSWAT Software Bill of Materials (SBOM) permet d'obtenir une visibilité sur les logiciels tiers open-source et d'identifier les dépendances logicielles, les vulnérabilités et autres risques potentiels existant sous chaque couche d'une image de conteneur. Grâce à l'intégration de plus de 30 moteurs antivirus combinés, le taux de détection des logiciels malveillants de la technologieMultiscanning atteint plus de 99,99 %. En outre, la technologieProactive DLP (Data Loss Prevention) identifie les informations d'identification telles que les mots de passe, les secrets, les jetons, les clés API ou d'autres informations sensibles laissées dans le code source. Grâce à nos technologies de détection et de prévention des menaces à confiance zéro, votre cycle de développement logiciel (SDLC) est protégé contre les logiciels malveillants et les vulnérabilités, ce qui renforce la sécurité des applications et le respect de la conformité.
MDSSC détecte le CVE trouvé dans svglib. Il signale également le niveau de gravité du CVE dans le rapport SBOM et identifie la version du logiciel vulnérable.
MetaDefender Core - Deep CDR
Une autre raison qui rend l'exploit possible est que l'application traite un fichier SVG injecté avec une charge utile malveillante. Par conséquent, si le fichier image est assaini avant d'être introduit dans le service de conversion, la charge utile sera éliminée, ce qui empêchera l'attaque de se produire. La technologie Deep Content Disarm and Reconstruction (CDR) de MetaDefender Core protège contre les menaces connues et inconnues véhiculées par les fichiers en assainissant et en reconstruisant les fichiers. Grâce à la prise en charge de plus de 160 types de fichiers courants et à des centaines d'options de reconstruction de fichiers, OPSWAT's Deep CDR neutralise toute menace potentielle intégrée, garantissant que le fichier assaini reste pleinement utilisable avec un contenu sûr.

Luan Pham a participé au programme Critical Infrastructure Cybersecurity Graduate Fellowship de OPSWAT et il est actuellement testeur de pénétration associé à OPSWAT. Il est passionné par la protection des produits de OPSWAT contre les menaces potentielles et par le partage de ses connaissances.