Cyberattaques alimentées par l'IA : Comment détecter, prévenir et se défendre contre les menaces intelligentes

Lire la suite
Nous utilisons l'intelligence artificielle pour les traductions de sites et, bien que nous nous efforcions d'être précis, il se peut que les traductions ne soient pas toujours exactes à 100 %. Nous vous remercions de votre compréhension.

CVE-2024-36401 dans le GeoServer Open-Source expose les systèmes à une exécution de code à distance

par OPSWAT
Partager cet article
Photos des participants au programme de bourses OPSWAT
Participants au programme de bourses d'OPSWAT

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 :

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.

Illustration représentant l'analyse de la vulnérabilité de GeoServer

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). 

Capture d'écran du score de base CVSS utilisé pour évaluer les vulnérabilités des logiciels

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.

idnomemplacement
1OPSWATPOINT (10.769829, 106.685248)
GeoServer : mappage simple de lignes de base de données vers des éléments XML

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 :

idnomemplacementgu_id
1OPSWATPOINT (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_idurnedescription
12urn:x-demo:feature:GeologicUnit:12Gneiss métamorphique

En utilisant ces tableaux, nous pouvons faire correspondre l'entreprise à une sa:Société d'échantillonnagequi 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.

Relations entre les unités géologiques imbriquées dans les éléments complexes de GeoServer

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 :

  1. 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.
  2. 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.
  3. 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 au Valeur 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.
GeoServer se rabat sur commons-jxpath pour l'évaluation XPath dans un tableau
  • 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.
Diagramme de flux de travail illustrant l'opération GetPropertyValue de GeoServer et le flux d'attaque

Exploitation et analyse des vulnérabilités

JXPath et le pont d'exécution Java

Traitement par Commons-jxpath des expressions XPath malveillantes dans GeoServer

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.

JXPath navigation dans les graphes d'objets Java à l'aide de la syntaxe XPath

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 :

JXPath pour l'interrogation des propriétés d'un objet Java Employee

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.

Invocation d'une fonction d'extension reliant XPath aux méthodes Java

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.

Opération WFS GetPropertyValue renvoyant une propriété XML
Structure de la réponse XML WFS GetPropertyValue

Analyse des flux de travail

  1. Un attaquant envoie une requête POST à /geoserver/wfs.
  2. GeoServer examine la balise XML la plus à l'extérieur-wfs:GetPropertyValue-pour déterminer l'opération à exécuter.
  3. 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.
GeoServer Dispatcher dirige la requête vers la méthode GetPropertyValue
  1. 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.
  2. La fonction exécuter() reçoit la demande, y compris l'élément critique valeurRéférence paramètre contrôlé par l'utilisateur.
Méthode du gestionnaire run() recevant la demande de l'utilisateur avec le paramètre valueReference
  1. Au cours de la exécuter() GeoServer récupère la méthode valeur de référence et invoque son évaluer() fonction.
GeoServer récupère la valeur de référence et invoque la fonction evaluate()
  1. 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ément FeaturePropertyAccessorqui interprète valeurRéférence en tant qu'expression XPath.
FeaturePropertyAccessor interprétant valueReference comme une expression XPath
  1. Le get() dans FeaturePropertyAccessor utilise la méthode commun-jxpath pour exécuter la requête XPath. Ici, l'utilisateur valeurRéférence est passé directement dans le paramètre xpath sans validation. Par l'intermédiaire de JXPathContext.newContext()GeoServer initialise un environnement pour les requêtes XPath, puis les exécute par l'intermédiaire de iteratePointers().
Commons-jxpath : exécution d'une requête XPath avec une référence de valeur fournie par l'utilisateur

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.

Un attaquant injecte un code malveillant via une expression XPath pour le RCE

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.

Capture d'écran de l'interface GeoServer sur une machine Windows pour la simulation de la vulnérabilité

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.

Extrait de code XML démontrant une requête POST malveillante exploitant valueReference dans GeoServer

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.

Capture d'écran illustrant le lancement de l'application Calculator après un exploit RCE réussi

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 :

  1. Détecte les composants logiciels affectés par les vulnérabilités.
  2. Évalue et classe la gravité de la faille de sécurité - ici, les CVE de GeoServer sont marqués comme "critiques".
  3. Identifie la version concernée.
  4. Recommande la version corrigée afin que les équipes de développement puissent appliquer des correctifs ou prendre des mesures correctives rapidement.
Capture d'écran du tableau de bord d'OPSWAT SBOM détectant les paquets GeoServer présentant des vulnérabilités critiques
La technologie SBOMSoftware Bill of Materials) d'OPSWAT détecte les paquets GeoServer présentant des vulnérabilités critiques.

Autres mesures recommandées

  1. 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.
  2. 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.
  3. Restreindre l'accès : Déployer GeoServer derrière des pare-feu ou des couches d'authentification pour minimiser la surface d'attaque.
  4. 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 :

Restez à jour avec OPSWAT!

Inscrivez-vous dès aujourd'hui pour recevoir les dernières mises à jour de l'entreprise, de l'entreprise, des histoires, des informations sur les événements, et plus encore.