42 Référentiels GitHub Armes Révèlent un Éditeur npm Caché
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une campagne sophistiquée suivie sous le nom de testmetest utilise des packages npm malveillants et des dépôts GitHub compromis pour voler des identifiants et automatiser des publications de packages malveillants. Les attaquants s’appuient sur des wrappers polymorphes, des addons Node.js natifs et des charges utiles chiffrées pour échapper à la détection. La campagne implique également une infrastructure utilisée pour scanner et exploiter des vulnérabilités de cPanel.
Investigation
Les chercheurs en sécurité de JFrog ont identifié 42 dépôts GitHub armés ainsi que plusieurs packages npm malveillants. Ils ont découvert que les attaquants utilisaient une technique de camouflage d’addon natif dans laquelle un .node compilé déchiffre une charge utile dissimulée à l’exécution. L’enquête a également lié l’activité à des scanners shellpanel ciblant les systèmes cPanel via CVE-2026-41940.
Atténuation
Les utilisateurs doivent supprimer les packages npm malveillants identifiés et reconstruire les systèmes affectés à partir de sources fiables. Les organisations doivent tourner tous les identifiants potentiellement compromis, y compris GitHub, npm et les tokens cloud. Il est également essentiel d’auditer les dépôts pour détecter les fichiers de configuration non autorisés tels que .github/init.js et les hooks d’exécution inattendus dans les fichiers package.json ou Makefiles.
Réponse
Lorsque une activité malveillante est détectée, révoquer immédiatement les secrets exposés et tourner les identifiants. Rechercher les mécanismes de persistance tels que net-health-checker or pkg-runtime. Examiner les journaux des actions GitHub pour les workflows non autorisés et surveiller les systèmes pour les charges utiles déchiffrées écrites dans les répertoires temporaires.
Flux d’attaque
Nous mettons encore à jour cette partie.
Détections
Fichier caché créé sur l’hôte Linux (via file_event)
Processus enfant NodeJS suspect [Windows] (via cmdline)
Téléchargement de fichiers GitHub possible initié par un processus inhabituel (via network_connection)
Utilisation de Nohup (via cmdline)
Processus enfant NodeJS suspect [Linux] (via cmdline)
Exécution chmod suspecte pointant vers des répertoires suspects (via cmdline)
Téléchargements vers des dossiers suspects (via cmdline)
IOCs (HashSha256) à détecter : Beyond testmetest : Camouflage Addon natif et 42 dépôts GitHub armés révèlent un éditeur npm caché
IOCs (SourceIP) à détecter : Beyond testmetest : Camouflage Addon natif et 42 dépôts GitHub armés révèlent un éditeur npm caché
IOCs (DestinationIP) à détecter : Beyond testmetest : Camouflage Addon natif et 42 dépôts GitHub armés révèlent un éditeur npm caché
Vérification de la présence d’un débogueur via IsDebuggerPresent ou CheckRemoteDebuggerPresent [Journal des événements de sécurité Windows]
Création de processus suspecte et exécution temporaire de fichiers JS [Création de processus Windows]
Détection de l’exécution des Addons natifs Node.js [Chargement de l’image Windows]
Exécution détectée de processus d’addon Node malveillants [Création de processus Linux]
Lectures suspectes de mappes de mémoire d’addons natifs [Plateforme Google Cloud]
Exécution de la simulation
-
Narrative d’attaque & Commandes : L’adversaire a réussi à déposer une charge utile JavaScript malveillante dans le répertoire temporaire de l’utilisateur, la nommant
.ncpour potentiellement imiter un fichier lié à Netcat ou simplement pour obfusquer son but. Pour exécuter cela, l’adversaire utilise un chargeur qui invoque l’APICreateProcessAWin32 pour lancer l’Hôte de Script Windows (wscript.exe) avec le fichier temporaire comme argument. Cette séquence spécifique—utilisant la version ANSI de l’API de création de processus pour exécuter un script depuis%TEMP%—est le modèle exact que la règle de détection est conçue pour intercepter. -
Script de test de régression :
# Script de simulation : déclenchement de la 'Création de processus suspecte et exécution temporaire de fichiers JS' # 1. Définir les chemins $tempPath = $env:TEMP $targetFile = Join-Path $tempPath ".nc" # 2. Créer un fichier JS malveillant factice dans le répertoire %TEMP% # Remarque : Nous le nommons .nc selon les exigences de la logique de détection "WScript.Echo('Activité malveillante simulée ');" | Out-File -FilePath $targetFile -Encoding ascii Write-Host "[+] Fichier malveillant créé à : $targetFile" # 3. Simuler l'exécution via wscript.exe # Dans un scénario réel, le 'CallTrace' contenant 'CreateProcessA' est généré # par l'appel d'API Windows sous-jacent utilisé par le chargeur de malware. # Exécuter cela via PowerShell/CMD générera l'événement de création de processus. Write-Host "[+] Commande de simulation envoyée." -
Commandes de nettoyage :
# Script de nettoyage : supprimer les artefacts de simulation $tempPath = $env:TEMP $targetFile = Join-Path $tempPath ".nc" if (Test-Path $targetFile) { Remove-Item -Path $targetFile -Force Write-Host "[+] Nettoyage réussi : $targetFile retiré." } else { Write-Host "[!] Échec du nettoyage : Fichier non trouvé." }