CVE-2023-3349 / CVE-2023-3350 | IBERMATICA RPS 2019
Recherche en sécurité documentant une divulgation d'informations non authentifiée et une faille de conception cryptographique dans IBERMATICA RPS 2019.
Les vulnérabilités peuvent être enchaînées pour exposer les journaux d'application contenant des requêtes SQL liées à l'authentification et récupérer les mots de passe des utilisateurs à partir de textes chiffrés AES-CBC réversibles.
[AVERTISSEMENT]
Ce dépôt est fourni uniquement à des fins de recherche en sécurité, de validation défensive et d'éducation. Testez exclusivement sur des systèmes que vous possédez ou que vous êtes explicitement autorisé à évaluer.
Résumé
Un utilisateur non authentifié peut accéder à la page d'état du service RPS à l'adresse :
/RPS2019Service/status.html
La page expose des commandes de journalisation opérationnelle et permet de télécharger les journaux générés. Ces journaux peuvent contenir des données applicatives sensibles, notamment des noms d'utilisateur, des adresses IP, des requêtes SQL et des valeurs liées aux mots de passe.
Les mots de passe ne sont pas protégés par une fonction de hachage de mot de passe à sens unique. À la place, RPS 2019 utilise AES-128-CBC avec un matériel de clé dérivé de manière prévisible du nom d'utilisateur. Une fois qu'un nom d'utilisateur et la valeur chiffrée de son mot de passe sont obtenus à partir des journaux, le mot de passe peut être récupéré en clair.
Vulnérabilités
| CVE | Description | CWE | CVSS 3.1 (CNA) |
|---|
| CVE-2023-3349 | Exposition non authentifiée d'informations sensibles via des journaux d'application téléchargeables | CWE-200 | 8.2 Élevé |
| CVE-2023-3350 | Protection de mot de passe réversible basée sur AES-128-CBC et un matériel de clé prévisible dérivé du nom d'utilisateur | CWE-327 | 8.2 Élevé |
Produit concerné
- Produit : IBERMATICA RPS
- Version concernée : RPS 2019
- Composant : fonctionnalités d'état et de journalisation du service RPS 2019
Chaîne d'attaque
- Accéder à la page d'état RPS exposée sans authentification.
- Activer la journalisation de l'application via les commandes disponibles sur la page d'état.
- Déclencher ou attendre une activité d'authentification.
- Télécharger le fichier journal généré.
- Extraire les noms d'utilisateur et les valeurs de mots de passe chiffrées des requêtes SQL journalisées.
- Dériver le matériel de clé AES du nom d'utilisateur correspondant.
- Déchiffrer la valeur stockée et récupérer le mot de passe en clair.
Aucune injection SQL, force brute de mot de passe ou compte applicatif préalable n'est requise pour cette chaîne.
Notes techniques
L'investigation a identifié les conditions suivantes :
- Les journaux de débogage contiennent des requêtes SQL complètes liées à l'authentification.
- Les tentatives de connexion avec des noms d'utilisateur inexistants peuvent journaliser le mot de passe fourni en clair.
- Les mots de passe des utilisateurs existants apparaissent comme du texte chiffré encodé en Base64 dans les requêtes SQL.
- Le schéma de chiffrement utilise AES-128 en mode CBC.
- La clé et le vecteur d'initialisation sont dérivés de manière déterministe du nom d'utilisateur et complétés à 16 octets avec un caractère fixe.
- La même valeur prévisible est utilisée à la fois comme clé et comme IV.
AES n'est pas le problème sous-jacent en soi. La vulnérabilité résulte de l'utilisation d'un chiffrement réversible pour les mots de passe, d'un matériel de clé prévisible et d'un IV qui n'est ni aléatoire ni indépendant.
Impact
Une exploitation réussie peut permettre à un attaquant distant non authentifié de :
- récupérer des informations opérationnelles et applicatives sensibles ;
- énumérer les noms d'utilisateur valides et les détails de l'infrastructure ;
- obtenir des mots de passe en clair ;
- compromettre des comptes RPS privilégiés ;
- réutiliser les identifiants exposés contre d'autres services où les mots de passe ont été partagés.
- Appliquer la mise à jour ou l'atténuation fournie par l'éditeur pour RPS 2019.
- Supprimer l'accès public à
/RPS2019Service/status.html.
- Exiger une authentification et une autorisation fortes pour tous les points de terminaison de diagnostic, d'administration, d'état, de santé, de débogage et de métriques.
- Désactiver la journalisation de débogage en production lorsqu'elle n'est pas strictement nécessaire.
- Expurger les identifiants, les données d'authentification et les requêtes SQL complètes des journaux.
- Stocker les mots de passe avec une fonction de hachage de mot de passe moderne, salée et à sens unique telle qu'Argon2id, scrypt ou bcrypt.
- Effectuer la rotation de tous les identifiants qui ont pu apparaître dans les journaux concernés.
- Examiner les journaux d'accès historiques pour les requêtes vers la page d'état et les téléchargements de journaux.
- Empêcher l'exposition directe des interfaces de gestion et de support ERP sur Internet.
Opportunités de détection
Les défenseurs devraient examiner :
- les requêtes inattendues vers
/RPS2019Service/status.html ;
- les requêtes qui activent, arrêtent, suppriment ou téléchargent des journaux d'application ;
- les accès aux points de terminaison d'état ou de diagnostic depuis des réseaux non fiables ;
- les événements d'authentification inhabituels suite à l'accès aux fichiers journaux RPS ;
- la réutilisation d'identifiants RPS contre d'autres services internes ou externes.
Divulgation
Les problèmes ont été découverts par LABS @ ITRES lors d'un engagement de sécurité offensive autorisé et ont reçu des identifiants CVE via INCIBE-CERT.
Une analyse technique détaillée est disponible dans la première entrée de la série Old Dives :
Références
Avis juridique
Les informations contenues dans ce dépôt visent à aider les organisations à identifier, valider et corriger les vulnérabilités documentées. Les auteurs et contributeurs ne sont pas responsables des mauvais usages ou des dommages résultant de l'utilisation de ce matériel.