🔍 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