🔍 Contexte

Analyse technique publiée le 12 juin 2026 par SafeDep, documentant une attaque de type supply chain ciblant le dépôt open source Egonex-AI/Understand-Anything (outil code-to-knowledge-graph, 57 000+ étoiles GitHub). L’article est une analyse post-mortem détaillée avec déobfuscation complète du payload.

🎯 Vecteur d’attaque

L’acteur AsimRaza10 a soumis trois pull requests frauduleuses (PR #198, #206, #261) entre le 24 et le 26 mai 2026, toutes pointant vers le même commit malveillant (8d30be36). Chaque PR présentait une description légitime fictive (correction React, édition README, fichiers de santé communautaire) ne correspondant pas au diff réel. Les deux seuls fichiers modifiés étaient :

  • .gitignore : ajout de branch_structure.json, temp_auto_push.bat, temp_interactive_push.bat pour masquer les outils d’automatisation Windows
  • homepage/astro.config.mjs : insertion d’un IIFE obfusqué après des centaines de caractères d’espace horizontal, invisible dans le rendu diff de GitHub

⚙️ Mécanisme d’exécution

Astro évalue astro.config.mjs comme module Node.js live à chaque invocation de astro build, astro dev ou astro preview, avant tout code utilisateur, avec accès complet au système de fichiers et aux variables d’environnement. Le payload restaure require via createRequire pour contourner le contexte ESM sans imports visibles dans le diff.

🔗 Architecture C2 en deux étages

Stage B (C2 direct) :

  • Sélection d’un serveur C2 parmi trois selon le marqueur de campagne (global['!'] = '8-3317')
  • Beacon HTTP GET vers /$/boot avec User-Agent Chrome 131 spoofé
  • Header Sec-V exfiltre le marqueur de campagne
  • Réponse XOR-déchiffrée (clé : ThZG+0jfXE6VAGOJ) puis évaluée comme bot client

Stage A (dead drop blockchain) :

  1. Récupération de la dernière transaction sortante de l’adresse Tron TMfKQEd7TJJa5xNZJZ2Lep838vrzrs7mAP via api.trongrid.io → décodage hex + inversion de chaîne = hash BSC
  2. Fallback : compte Aptos 0xbe037400...380811e via fullnode.mainnet.aptoslabs.com
  3. Récupération de la transaction BSC via bsc-dataseed.binance.org (fallback : bsc-rpc.publicnode.com) → extraction du payload après délimiteur ?.?
  4. XOR-déchiffrement (clé : 2[gWfGj;<:-93Z^C) → eval() du payload

Les deux transactions BSC actives au moment de l’analyse : 0x80a1148ee589125bc1e57d36abac9f08089b2990d9372be3a33a1f057ad1ef89 et 0xa896af4f2876df59af1e705fb75031630ebd37fa89659a9896be4d3da8c87f02.

🏴 Attribution

Les empreintes cryptographiques (fonction décodeur _$_1e42, marqueur shuffle rmcej%otb%, seed 2857687, adresse Tron identique, clé XOR identique) correspondent à la campagne PolinRider, attribuée à la RPDC et documentée par OpenSourceMalware depuis début 2026. Le vecteur PR upstream est inédit pour ce groupe, qui ciblait jusqu’alors directement les développeurs (packages npm empoisonnés, faux tests techniques).

📋 Type d’article

Analyse technique approfondie avec déobfuscation statique complète, tableau d’IoCs et mise en contexte dans un modèle de menace (V4 vector). But principal : documenter une instance réelle d’attaque supply chain via PR malveillante avec C2 blockchain.

🧠 TTPs et IOCs détectés

Acteurs de menace

  • PolinRider (state-sponsored) —

TTP

  • T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
  • T1102 — Web Service (Command and Control)
  • T1132.001 — Data Encoding: Standard Encoding (Command and Control)
  • T1573.001 — Encrypted Channel: Symmetric Cryptography (Command and Control)
  • T1020 — Automated Exfiltration (Exfiltration)
  • T1036 — Masquerading (Defense Evasion)
  • T1564.001 — Hide Artifacts: Hidden Files and Directories (Defense Evasion)

IOC

  • IPv4 : 166.88.54.158AbuseIPDB · VT · ThreatFox
  • IPv4 : 198.105.127.210AbuseIPDB · VT · ThreatFox
  • IPv4 : 23.27.202.27AbuseIPDB · VT · ThreatFox
  • URLs : http://166.88.54.158/$/bootURLhaus
  • URLs : http://198.105.127.210/$/bootURLhaus
  • URLs : http://23.27.202.27:27017/$/bootURLhaus
  • SHA256 : 80a1148ee589125bc1e57d36abac9f08089b2990d9372be3a33a1f057ad1ef89VT · MalwareBazaar
  • SHA256 : a896af4f2876df59af1e705fb75031630ebd37fa89659a9896be4d3da8c87f02VT · MalwareBazaar
  • Fichiers : astro.config.mjs
  • Fichiers : temp_auto_push.bat
  • Fichiers : temp_interactive_push.bat
  • Fichiers : branch_structure.json

Malware / Outils

  • PolinRider loader (loader)

🟢 Indice de vérification factuelle : 65/100 (haute)

  • ⬜ safedep.io — source non référencée (0pts)
  • ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 12 IOCs dont des hashes (15pts)
  • ✅ 3/8 IOCs confirmés (AbuseIPDB, MalwareBazaar, ThreatFox, URLhaus, VirusTotal) (15pts)
  • ✅ 9 TTPs MITRE identifiées (15pts)
  • ⬜ date RSS ou approximée (0pts)
  • ✅ acteur(s) identifié(s) : PolinRider (5pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • 166.88.54.158 (ip) → VT (17/91 détections) + ThreatFox (BeaverTail)
  • 198.105.127.210 (ip) → ThreatFox (BeaverTail)
  • 23.27.202.27 (ip) → VT (16/91 détections) + ThreatFox (BeaverTail)

🔗 Source originale : https://safedep.io/astro-config-blockchain-c2-supply-chain/