Dans ce blog, nous explorons la CVE-2024-36401, une vulnérabilité de sécurité découverte dans GeoServer, un serveur Java open-source largement utilisé pour la manipulation et le partage de données géospatiales. Cette vulnérabilité, qui pourrait permettre l'exécution de code à distance (RCE) par des utilisateurs non authentifiés, souligne l'importance cruciale d'apporter des correctifs aux déploiements de GeoServer dès que possible.
Dans notre dernière analyse de sécurité, deux boursiers diplômés d'OPSWAT étudient cette menace :
- Examen approfondi des vecteurs d'attaque du CVE
- Identifier les failles de sécurité que les attaquants pourraient utiliser pour exploiter GeoServer
- Simulation de la manière dont les attaquants peuvent compromettre les déploiements de GeoServer
Nous expliquerons également comment la technologie SBOM d'OPSWAT peut détecter cette vulnérabilité, et nous proposerons aux équipes des mesures concrètes pour sécuriser leur infrastructure géospatiale avant que les attaquants ne frappent.

Présentation de GeoServer
GeoServer est un serveur open-source basé sur Java, conçu pour visualiser, éditer et partager des données géospatiales. Lancé en 2001 par le TOPP (The Open Planning Project), GeoServer a été développé pour améliorer l'engagement du public dans le gouvernement et la planification urbaine grâce à l'échange de données spatiales ouvertes. Plus de vingt ans plus tard, GeoServer est devenu une plateforme robuste capable de gérer différents formats de données spatiales et de s'intégrer à différentes sources de données.
GeoServer fournit des services basés sur les normes de l'OGC (Open Geospatial Consortium ), notamment :
- WFS (Web Feature Service) - Permet de créer, de modifier et d'échanger des informations géographiques au format vectoriel en utilisant le protocole HTTP.
- WCS (Web Coverage Service) - Facilite l'accès aux données matricielles (par exemple, l'imagerie satellitaire) pour la modélisation et l'analyse complexes.
- WMS (Web Map Service) - Fournit une interface HTTP simple pour demander des images cartographiques.
Contexte de CVE-2024-36401
CVE-2024-36401 affecte les versions de GeoServer antérieures à 2.25.2, 2.24.4 et 2.23.6. Elle provient de l'évaluation non sécurisée des noms de propriétés en tant qu'expressions XPath à travers de multiples paramètres de requêtes OGC. Les attaquants peuvent exploiter cette faille pour créer une exécution de code à distance (RCE) en injectant des données d'entrée fabriquées dans une installation par défaut de GeoServer.
Selon les avis de sécurité de GitHub, cette vulnérabilité a un score CVSS v3.1 de 9.8 (critique).
Fonctionnalités simples et complexes de GeoServer
GeoServer prend en charge les types d'entités simples et complexes pour s'adapter aux différentes structures de données géospatiales, qu'il s'agisse d'ensembles de données plats ou complexes et imbriqués. Cependant, c'est la mauvaise gestion des expressions XPath dans ces types de données qui rend CVE-2024-36401 exploitable.
Caractéristiques simples
Les types d'entités simples représentent des données géospatiales simples dans un format plat, où chaque ligne d'une base de données correspond à une entité géospatiale et où chaque attribut correspond directement à un élément XML.
Par exemple, un tableau représentant des entreprises avec des colonnes telles que l'identifiant, le nom et la localisation peut être facilement converti en caractéristiques XML simples.
id | nom | emplacement |
1 | OPSWAT | POINT (10.769829, 106.685248) |
Caractéristiques du complexe
En revanche, les types d'entités complexes gèrent des données plus complexes. Ce type d'entité prend en charge les propriétés imbriquées et les relations entre différents ensembles de données. Ces schémas complexes ne sont pas générés automatiquement, mais sont définis à l'aide de normes communautaires, comme indiqué dans l'extension Application Schema du GeoServer.
Exemple :
Sous le tableau des entreprises précédent, nous ajoutons une clé étrangère gu_id
pour décrire la relation entre une entreprise et son unité géologique équivalente :
id | nom | emplacement | gu_id |
1 | OPSWAT | POINT (10.769829, 106.685248) | 12 |
Les informations relatives à l'unité géologique sont stockées séparément dans la table unité géologique
:
gu_id | urne | description |
12 | urn:x-demo:feature:GeologicUnit:12 | Gneiss métamorphique |
En utilisant ces tableaux, nous pouvons faire correspondre l'entreprise à une sa:Société d'échantillonnage
qui contient un gsml:GeologicUnit
. Cette configuration crée une fonctionnalité complexe, car elle implique des types et des relations imbriqués définis par les spécifications de la communauté plutôt que par des schémas générés automatiquement.
Cette flexibilité est essentielle pour modéliser des scénarios complexes du monde réel, mais elle introduit également des vulnérabilités en raison de sa dépendance à l'égard de techniques de traitement avancées telles que l'évaluation JXPath pour gérer efficacement les structures imbriquées.
Comment la vulnérabilité apparaît-elle ?
GeoServer est conçu pour utiliser l'évaluation XPath afin de traiter les types d'entités complexes (tels que ceux trouvés dans les magasins de données Application Schema). Mais en raison d'une mauvaise manipulation, il applique par erreur l'évaluation XPath à des types d'entités simples également. Cela crée un vecteur d'attaque car :
- GeoServer s'appuie sur la bibliothèque GeoTools pour évaluer les noms de propriétés lors de la récupération des données.
- Le
commun-jxpath
utilisée pour traiter les expressions XPath, n'est pas correctement validée, ce qui permet d'exécuter du code arbitraire lors du traitement des expressions XPath. - Cette faille expose toutes les instances de GeoServer à des vulnérabilités RCE potentielles, car un attaquant peut créer une requête malveillante qui exploite cette exécution XPath non sécurisée pour contrôler le serveur.
Vue d'ensemble du processus d'exploitation
- A
POST
est envoyée auValeur de la propriété
opération. Ensuite, le GeoServer tente de récupérer le bien (ou la propriété).valeurRéférence
) pour une caractéristique donnée. - Si la propriété demandée existe dans la table Feature Type Details, GeoServer la traite normalement.
- Toutefois, si le bien n'est pas répertorié, GeoServer se rabat sur la liste des biens de l'Union européenne.
commun-jxpath
pour interpréter le paramètre de la demande comme une expression XPath. - Depuis
commun-jxpath
permet d'exécuter du code Java directement à partir de XPath, ce mécanisme de repli permet potentiellement d'exploiter les paramètres de requête fournis par l'utilisateur en vue d'une exécution de code à distance. En d'autres termes, un attaquant peut injecter du code malveillant pour réaliser une exécution de code à distance.
Exploitation et analyse des vulnérabilités
JXPath et le pont d'exécution Java
Le commun-jxpath
communément appelée JXPath, permet de naviguer dans les graphes d'objets Java (JavaBeans, objets DOM, etc.) à l'aide de la syntaxe XPath. Par exemple, si vous avez un simple objet Employé avec des propriétés telles que le nom et l'adresse, JXPath vous permet d'interroger ces propriétés comme s'il s'agissait de nœuds dans un document XML.
Exploiter les fonctions d'extension
Outre les fonctions standard, JXPath prend également en charge des fonctions d'extension qui servent de passerelle vers Java. Ce "pont vers Java" est crucial car il permet d'invoquer des fonctions Java directement dans les requêtes XPath, par exemple :
En raison des quelques limitations concernant les méthodes Java qui peuvent être appelées par le biais de ce pont, un attaquant peut exploiter la fonction exec()
(ou des méthodes similaires) pour exécuter des commandes arbitraires sur le serveur.
WFS GetPropertyValue
Le WFS de GeoServer permet aux utilisateurs d'interroger et de manipuler des entités géospatiales. Dans des conditions normales, le WFS Valeur de la propriété
renvoie simplement la propriété demandée dans une structure XML.


Analyse des flux de travail
- Un attaquant envoie une requête POST à /geoserver/wfs.
- GeoServer examine la balise XML la plus à l'extérieur-
wfs:GetPropertyValue-
pour déterminer l'opération à exécuter. - Le GeoServer délègue ensuite les paramètres de la requête à la méthode correspondante de la classe WFS. Dans ce scénario, le Dispatcher dirige la requête vers la méthode
Valeur de la propriété
méthode.
- Au sein de la classe DefaultWebFeatureService20 (WFS), cette
Valeur de la propriété
transmet les paramètres de l'utilisateur à un gestionnaire du même nom. - La fonction
exécuter()
reçoit la demande, y compris l'élément critiquevaleurRéférence
paramètre contrôlé par l'utilisateur.
- Au cours de la
exécuter()
GeoServer récupère la méthodevaleur de référence
et invoque sonévaluer()
fonction.
- Si
valeurRéférence
ne correspond pas aux propriétés prédéfinies de GeoServer, GeoServer lui attribue par défaut la valeur de l'élémentFeaturePropertyAccessor
qui interprètevaleurRéférence
en tant qu'expression XPath.
- Le
get()
dans FeaturePropertyAccessor utilise la méthodecommun-jxpath
pour exécuter la requête XPath. Ici, l'utilisateurvaleurRéférence
est passé directement dans le paramètre xpath sans validation. Par l'intermédiaire deJXPathContext.newContext()
GeoServer initialise un environnement pour les requêtes XPath, puis les exécute par l'intermédiaire deiteratePointers()
.
Comme JXPath prend en charge les fonctions d'extension, les attaquants peuvent injecter du code malveillant dans l'expression XPath, ce qui déclenche l'exécution de code arbitraire sur l'instance GeoServer.
Cet enchaînement d'événements montre comment une manipulation dangereuse de la valeurRéférence
peut conduire à un RCE, ce qui représente une grave menace pour la sécurité des déploiements vulnérables de GeoServer.
Simulation de l'attaque
Pour simuler cette exploitation dans un scénario réel, nos boursiers diplômés OPSWAT ont déployé GeoServer sur une machine Windows locale. L'interface suivante s'est affichée lors de l'accès à GeoServer.
Une fois que le serveur fonctionne, un attaquant peut exploiter la vulnérabilité en envoyant une requête POST avec une expression XPath malveillante par l'intermédiaire de valeurRéférence
vers le point de terminaison /geoserver/wfs.
Résultat : Après l'envoi de la demande, l'expression XPath malveillante exécute une commande système et déclenche le lancement de l'application Calculator.
Atténuation et recommandations
Un simple exploit peut se transformer en une attaque de la chaîne logistique logicielle, en particulier dans les projets qui s'appuient sur des logiciels libres tels que GeoServer. La technologie SBOM (Software Bill of Materials) d'OPSWAT aide à identifier les vulnérabilités telles que CVE-2024-36401 dans votre base de code.
Cet exemple montre comment OPSWAT SBOM :
- Détecte les composants logiciels affectés par les vulnérabilités.
- Évalue et classe la gravité de la faille de sécurité - ici, les CVE de GeoServer sont marqués comme "critiques".
- Identifie la version concernée.
- Recommande la version corrigée afin que les équipes de développement puissent appliquer des correctifs ou prendre des mesures correctives rapidement.
Autres mesures recommandées
- Mettre à jour GeoServer : Passez aux versions 2.25.2, 2.24.4 ou 2.23.6 (ou ultérieures) de GeoServer où la vulnérabilité est corrigée.
- Dépendances en matière d'audit : Utiliser régulièrement des outils tels que OPSWAT SBOM pour identifier les bibliothèques obsolètes (par ex,
commun-jxpath
) dans votre environnement. - Restreindre l'accès : Déployer GeoServer derrière des pare-feu ou des couches d'authentification pour minimiser la surface d'attaque.
- Surveiller les avis de sécurité : Gardez un œil sur les notes de version officielles de GeoServer et les bases de données CVE pour vous tenir au courant des nouveaux correctifs.
À propos d'OPSWAT SBOM
OPSWAT SBOM prend en charge les langages de programmation les plus populaires, offrant aux équipes de développement logiciel une visibilité sur les bibliothèques open-source tierces, leurs dépendances associées et les dernières versions disponibles à mettre à jour. Les développeurs peuvent intégrer OPSWAT SBOM à leur code source et aux services de conteneurs tels que GitHub, BitBucket, GitLab, Amazon ECR, DockerHub, etc. En savoir plus sur SBOM.
Contactez un expert dès aujourd'hui pour savoir comment intégrer les outils et les solutions d'OPSWAT à votre infrastructure et à vos flux de travail existants :