🔍 Contexte : Le 29 septembre 2026, CloudSEK Global Threat Intelligence publie un rapport d’analyse technique (Part 2 de la série GTI-TOPHIT) documentant une opération de cryptojacking GPU en cours contre la marketplace vast.ai. La découverte fait suite à l’investigation de 85 packages npm malveillants publiés sous le scope @prime0, tous balisant vers 69.48.229.140:8080.
🎯 Découverte du panel : Le même hôte expose sur le port 80 une application FastAPI se présentant comme VHX Harvester v0.1.0. Une misconfiguration critique laisse 17 endpoints sans authentification, dont /agent/code.tar.gz qui sert le code source complet de l’agent C2 (13 574 octets, 8 modules Python) avec des credentials par défaut codés en dur, permettant un accès total au panel.
⚙️ Kill chain en 8 phases :
- Phase 1 : Énumération des hôtes GPU via l’API publique vast.ai (297 hôtes collectés)
- Phase 2 : Scan de ports 10 000–31 000 (≈100 millions de sondes sur 16 cycles)
- Phase 3 : Classification et fingerprinting des services (FastAPI, ComfyUI, vLLM, Jupyter, ttyd…)
- Phase 4 : Exfiltration de métadonnées et variables d’environnement (98 dumps contenant API keys, credentials cloud)
- Phase 5 : Injection XSS stockée dans les logs du proxy Caddy auth pour vol de tokens de session
- Phase 6 : Déploiement d’agents bridge — containers légitimes loués sur le même hôte physique que la cible pour scanner le réseau Docker bridge (172.17.0.0/16)
- Phase 7 : Accès root à un notebook Jupyter non protégé (180.189.55.43:20041) via caddy-bypass
- Phase 8 : Déploiement de miners cryptographiques — non encore atteint (0 plants)
📊 État opérationnel au 25 septembre 2026 : 297 hôtes découverts, 13 368 endpoints scannés, 416 findings récoltés, 25 agents bridge déployés (dépense totale : 6,69 $), 1 shell root confirmé, 0 miner planté. L’opération est en phase de développement (r10 = au moins 10 itérations).
🆕 Techniques sans précédent documenté :
- Bridge agent co-tenancy : location de containers légitimes sur le même hôte physique via l’API marketplace pour accéder au bridge Docker
- XSS stocké via injection dans les logs Caddy : exfiltration de tokens de session lorsque l’admin consulte les logs
- npm typosquats comme vecteur de découverte d’infrastructure GPU
🔗 Attribution : Ancres dans config.py — chemin /root/kimi/r10/collect et référence au mot de passe blackhat-2026. Aucune correspondance dans les bases CTI publiques.
📄 Type d’article : Analyse technique approfondie et rapport d’adversaire intelligence, visant à documenter une opération active, exposer ses IOCs et techniques, et alerter les défenseurs sur vast.ai.
🧠 TTPs et IOCs détectés
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1046 — Network Service Discovery (Discovery)
- T1592 — Gather Victim Host Information (Reconnaissance)
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
- T1005 — Data from Local System (Collection)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
- T1059.006 — Command and Scripting Interpreter: Python (Execution)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1583.003 — Acquire Infrastructure: Virtual Private Server (Resource Development)
- T1496 — Resource Hijacking (Impact)
- T1040 — Network Sniffing (Credential Access)
- T1217 — Browser Information Discovery (Discovery)
- T1102 — Web Service (Command and Control)
IOC
- IPv4 :
69.48.229.140— AbuseIPDB · VT · ThreatFox - IPv4 :
180.189.55.43— AbuseIPDB · VT · ThreatFox - IPv4 :
91.150.160.38— AbuseIPDB · VT · ThreatFox - URLs :
http://69.48.229.140/agent/code.tar.gz— URLhaus - URLs :
http://69.48.229.140/docs— URLhaus - URLs :
http://69.48.229.140/openapi.json— URLhaus - URLs :
http://69.48.229.140/files— URLhaus - URLs :
http://69.48.229.140/agent/report— URLhaus - URLs :
http://69.48.229.140/x/— URLhaus - Fichiers :
agent/code.tar.gz - Fichiers :
harvest.db - Fichiers :
vast_key.txt - Fichiers :
config.py - Fichiers :
tokens.py - Fichiers :
db.py - Fichiers :
net.py - Fichiers :
attack.py - Fichiers :
harvest.py - Fichiers :
extract.py - Fichiers :
agent_main.py - Chemins :
/root/kimi/r10/collect
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 29 septembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- VHX Harvester (framework)
- VHX Bridge Agent (other)
🟢 Indice de vérification factuelle : 70/100 (haute)
- ✅ cloudsek.com — source reconnue (Rösti community) (20pts)
- ✅ 33740 chars — texte complet (fulltext extrait) (15pts)
- ✅ 21 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ 0/6 IOCs confirmés externellement (0pts)
- ✅ 14 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://www.cloudsek.com/blog/tophit-part-2-renting-the-attack-surface