Selon des chercheurs de ReversingLab, 19 extensions malveillantes ont été identifiées sur le Marketplace VS Code, la majorité embarquant un fichier malveillant se faisant passer pour une image PNG.

Campagne malveillante ciblant VS Code via des dépendances piégées

1. Contexte général

Les chercheurs de ReversingLabs ont identifié une campagne active depuis février 2025, découverte le 2 décembre 2025, impliquant 19 extensions malveillantes Visual Studio Code publiées sur le VS Code Marketplace.

Cette campagne s’inscrit dans une tendance plus large :

  • Forte hausse des extensions malveillantes en 2025
  • Passage de 27 détections en 2024 à 105 en 2025 (+~4x)
  • Attaques de plus en plus profondes dans la supply chain, via dépendances

2. Vecteur d’attaque principal

🎯 Abus du dossier node_modules

Les attaquants exploitent un point de confiance implicite :

  • Les extensions VS Code sont livrées avec leurs dépendances pré-packagées
  • Les utilisateurs ne vérifient généralement pas le contenu réel de ces dépendances

👉 Les attaquants ont modifié localement une dépendance légitime très populaire :

  • path-is-absolute
    • +9 milliards de téléchargements cumulés depuis 2021
    • Le package officiel sur npm est intact
    • La version piégée existe uniquement à l’intérieur des extensions malveillantes

Dans 4 cas, le package @actions/io est utilisé avec une technique similaire.


3. Chaîne d’infection technique

Étape 1 — Modification de la dépendance

  • Le fichier index.js de path-is-absolute est modifié
  • Ajout d’une classe malveillante exécutée au démarrage de VS Code
  • Cette classe décode et exécute un dropper JavaScript dissimulé

Étape 2 — Obfuscation du dropper

  • Code JavaScript :
    • Encodé en Base64
    • Puis inversé caractère par caractère
  • Stocké dans un fichier nommé lock

Étape 3 — Faux fichier image

  • Ajout d’un fichier banner.png
  • Ce fichier :
    • N’est pas une image valide
    • Est en réalité une archive contenant deux binaires malveillants

Étape 4 — Exécution via LOLBIN

  • Les binaires sont lancés via cmstp.exe (Living-off-the-Land Binary)
  • Rôles des binaires :
    • Binaire 1 : ferme cmstp.exe en simulant une frappe clavier
    • Binaire 2 : cheval de Troie Rust (analyse encore en cours)

Variante

  • Dans les extensions utilisant @actions/io, les binaires sont :
    • Dissimulés dans des fichiers .ts et .map
    • Toujours chargés de manière détournée

4. Pourquoi cette attaque est particulièrement dangereuse

  • Exploitation d’un package npm de confiance
  • Aucun changement côté npm → réputation intacte
  • Malware enfoui dans une dépendance
  • Binaire caché sous une fausse image PNG
  • Usage de LOLBIN Windows pour l’exécution
  • Déploiement via un outil très répandu chez les développeurs

➡️ Un exemple typique de supply chain attack furtive.


5. TTPs observées (MITRE ATT&CK)

🛠️ Tactiques & techniques

  • T1195.002 – Compromise Software Supply Chain (extensions VS Code)
  • T1059.007 – JavaScript execution
  • T1140 – Deobfuscate / Decode Files or Information
  • T1027 – Obfuscated / Encrypted Payloads
  • T1218.003 – Signed Binary Proxy Execution (cmstp.exe)
  • T1036 – Masquerading (PNG factice)
  • T1105 – Ingress Tool Transfer (chargement de payloads)
  • T1204.002 – User Execution (installation d’extension)

6. Indicators of Compromise (IoCs)

🔹 Extensions VS Code malveillantes

Package Version SHA1
malkolm.theme-artschool-remake 1.0.0 edcbdb65d8653c11be197bd188241813bf431bc7
malkolm.theme-ascetic-remake 1.0.0 c6e5b9c41e5dd7cadc7247bcfbaeb643ade61e46
malkolm.theme-aurora-remake 1.0.0 71c241a7110abb70bff59d22e0238bc5553d495a
malkolm.theme-azure-remake 1.0.0 9985d8e1c820cf4bdf25f7b0023d2b879c8af722
malkolm.theme-bashling-remake 1.0.0 7cb116b08bda294d962b28bf47ece4b40d9ed2a8
pandaexpress.theme-anarchist-plugin 1.0.0 77c76d6d067821bc3a34b734a719df44a39c12df
pandaexpress.theme-anarchisteighties-plugin 1.0.0 451dc570125d4e0db47217d5e177d0fa94c8bbb3
pandaexpress.theme-ant-plugin 1.0.0 578b6b117d433b71e3cb69c2062ab61f29171ae6
pandaexpress.theme-array-plugin 1.0.0 dc40c33ffbca097917f17f7482eef295856d8076
pandaexpress.theme-arstotzka-plugin 1.0.0 6a1fc337ec7fdfaa89604d686cf5afef5057dc90
prada555.theme-abyss-ported 1.0.0 0aad0649f74872d37fbce2369f4de3a5212f47de
prada555.theme-acai-ported 1.0.0 21a53bcb9d97ae04ed9247063485f441bd072f15
prada555.theme-active4d-ported 1.0.0 3be8024c4fa34f7d7d100fd783df1a95e0c9dbbe
prada555.theme-afterglow-ported 1.0.0 35080681cf76a5715ea4c04ec1aa126af53a3238
priskinski.Theme-Afterglow-remake 1.0.0 9252d278a3e693d1a41b99c2aeca05347a3ba107
priskinski.Theme-AgolaDark-remake 1.0.0 772d1159c93b097b449b17a20e4b60bfd038adc8
priskinski.Theme-AllHallowsEve-remake 1.0.0 6a2e4e2668dfcae345dad3694b2631fffae7d132
priskinski.Theme-Amber-remake 1.0.0 d85271c013499ab45b3e6fa1820f79d268ea3a7e
priskinski.Theme-Amy-remake 1.0.0 40fb5d1cedcd5342e0d9b899ac18388886bcb4f0

7. Recommandations clés

  • 🔍 Auditer systématiquement les extensions, y compris leurs dépendances
  • ⚠️ Se méfier des extensions :
    • récentes
    • peu téléchargées
    • sans avis
  • 🧰 Utiliser des outils d’analyse supply chain (ex. Spectra Assure)
  • 👨‍💻 Sensibiliser les développeurs : les dépendances sont une surface d’attaque

🎯 Conclusion

Cette campagne illustre une évolution majeure des attaques supply chain :
les dépendances de confiance deviennent des vecteurs d’infection silencieux.
Dans l’écosystème développeur, la confiance implicite est désormais un risque.

  • Il s’agit d’une publication de recherche signalant l’identification d’extensions malveillantes et décrivant la technique de dissimulation d’un fichier malveillant en PNG.

🔗 Source originale : https://www.reversinglabs.com/blog/malicious-vs-code-fake-image

🖴 Archive : https://web.archive.org/web/20251213160023/https://www.reversinglabs.com/blog/malicious-vs-code-fake-image