Solana FakeFix : 25 packages npm et PyPI malveillants se font passer pour des versions stables
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
Une campagne de paquets malveillants cible les développeurs Solana à travers des bibliothèques npm et PyPI typosquattées, promues comme des correctifs de construction stable. Le malware exploite l’exécution du cycle de vie des paquets et les hooks d’importation pour voler les secrets des portefeuilles, les identifiants de cloud, et les clés SSH des environnements infectés. Certains échantillons vont au-delà du vol en agissant comme des portes dérobées complètes via un commandement et un contrôle basé sur Telegram ou en déployant des chargeurs axés sur Windows construits autour de Deno.
Enquête
Des chercheurs en sécurité de JFrog ont découvert deux opérations distinctes mais liées. La première, suivie sous le nom de Solana FakeFix, utilisait des paquets de style SDK contrefaits pour collecter des secrets sensibles auprès des développeurs et des systèmes de construction. La seconde utilisait des paquets npm thématiques CMS pour charger des exécutables Windows. Leur analyse a montré que le code malveillant était souvent ajouté à des bibliothèques qui semblaient fonctionnelles pour aider les paquets à paraître légitimes tout en récupérant discrètement des charges utiles de deuxième étape de manière dynamique via Deno.
Atténuation
Les organisations devraient supprimer tous les paquets affectés des stations de travail des développeurs, des pipelines CI/CD et des caches de paquets internes. Toute identification potentiellement exposée devrait être immédiatement renouvelée, y compris les clés de portefeuilles Solana, les clés SSH, les identifiants AWS, et les jetons GitHub. Les équipes de sécurité devraient également auditer les hôtes pour les méthodes de persistance telles que les clés de registre Run, les tâches planifiées et les modifications des profils shell.
Réponse
Les défenseurs devraient désinstaller les paquets malveillants identifiés et examiner les fichiers de verrouillage des dépendances pour des bibliothèques non autorisées ou inattendues. Tous les secrets exposés doivent être renouvelés immédiatement, et toute cryptomonnaie stockée dans des portefeuilles potentiellement compromis doit être transférée vers de nouvelles adresses de confiance. Les systèmes de CI et ceux des développeurs doivent ensuite être reconstruits à partir d’images propres pour s’assurer qu’aucune porte dérobée cachée ou mécanisme de persistance ne subsiste.
"graph TB %% Class Definitions Section classDef technique fill:#99ccff classDef persistence fill:#ff99cc classDef command_control fill:#cc99ff classDef exfiltration fill:#ffcc99 classDef credential_access fill:#ffff99 %% Initial Access and Execution Phase attack_supply_chain["<b>Technique</b> – <b>T1195.001 Compromission de la chaîne d’approvisionnement : <br/>Compromission des dépendances logicielles et des outils de développement</b><br/><b>Description</b> : Utilisation de typosquatting et de spam de problèmes GitHub pour inciter les développeurs à installer des paquets npm et PyPI malveillants se faisant passer pour des SDK Solana légitimes.<br/><b>Cibles</b> : @solana-labs/web3.js et outils similaires."] class attack_supply_chain technique attack_user_exec_copy["<b>Technique</b> – <b>T1204.004 Exécution par l’utilisateur : Copie et collage malveillants</b><br/><b>Description</b> : Les développeurs exécutent des commandes suggérées par des attaquants via des problèmes GitHub ou des instructions de paquets."] class attack_user_exec_copy technique attack_user_exec_lib["<b>Technique</b> – <b>T1204.005 Exécution par l’utilisateur : Bibliothèque malveillante</b><br/><b>Description</b> : Les développeurs importent des bibliothèques malveillantes dans leurs projets."] class attack_user_exec_lib technique op_exec_trigger(("AND")) class op_exec_trigger technique attack_event_trigger["<b>Technique</b> – <b>T1546.016 Exécution déclenchée par un événement : Paquets d’installation</b><br/><b>Description</b> : Exécution de code contrôlé par un attaquant via des scripts de cycle de vie post-installation npm ou des importations PyPI __init__.py."] class attack_event_trigger technique attack_drive_by["<b>Technique</b> – <b>T1189 Compromission en passant</b><br/><b>Description</b> : Téléchargement de charges utiles secondaires telles que des exécutables Windows ou des chargeurs basés sur Deno."] class attack_drive_by technique %% Persistence Phase persist_active_setup["<b>Technique</b> – <b>T1547.014 Exécution automatique au démarrage ou à la connexion : Configuration active</b><br/><b>Description</b> : Création de clés de registre Run pour lancer des charges utiles malveillantes."] class persist_active_setup persistence persist_windows_service["<b>Technique</b> – <b>T1543.003 Créer ou modifier un processus système : Service Windows</b><br/><b>Description</b> : Établir une persistance en créant des services Windows."] class persist_windows_service persistence payload_deno["<b>Malware</b> – <b>Campagne CMS basée sur Deno</b><br/><b>Description</b> : Charge utile JavaScript malveillante exécutée en mode sans tête via conhost.exe."] class payload_deno technique %% Command and Control Phase c2_web_service["<b>Technique</b> – <b>T1102.003 Service Web : Communication à sens unique</b><br/><b>Description</b> : Utilisation de jetons de bot Telegram pour recevoir des commandes et exfiltrer des données."] class c2_web_service command_control c2_dynamic_res["<b>Technique</b> – <b>T1568 Résolution dynamique</b><br/><b>Description</b> : Utilisation de méthodes dynamiques pour communiquer avec l’infrastructure C2."] class c2_dynamic_res command_control %% Credential Access and Exfiltration Phase cred_files["<b>Technique</b> – <b>T1552.001 Informations d’identification non sécurisées : Informations d’identification dans les fichiers</b><br/><b>Description</b> : Analyse du système de fichiers local pour des fichiers JSON de portefeuilles Solana id.json, des clés SSH id_rsa, des identifiants AWS, et des fichiers .env."] class cred_files credential_access exfil_c2["<b>Technique</b> – <b>T1041 Exfiltration sur le canal C2</b><br/><b>Description</b> : Envoi de données sensibles volées via l’API Telegram."] class exfil_c2 exfiltration %% Connections attack_supply_chain –>|mène à| op_exec_trigger op_exec_trigger –>|nécessite| attack_user_exec_copy op_exec_trigger –>|nécessite| attack_user_exec_lib attack_user_exec_copy –>|déclenche| attack_event_trigger attack_user_exec_lib –>|déclenche| attack_event_trigger attack_event_trigger –>|télécharge_via| attack_drive_by attack_drive_by –>|installe| payload_deno payload_deno –>|établit| persist_active_setup payload_deno –>|établit| persist_windows_service persist_active_setup –>|communique_via| c2_web_service persist_windows_service –>|communique_via| c2_web_service c2_web_service –>|utilise| c2_dynamic_res payload_deno –>|effectue_un_acces_aux_identifiants| cred_files cred_files –>|donnée_envoyée_via| exfil_c2 exfil_c2 –>|utilise| c2_web_service "
Flux d’attaque
Détections
Points de persistance possible [ASEPs – Logiciel/NTUSER Hive] (via evenement_registre)
Voir
LOLBAS Conhost (via ligne de commande)
Voir
Possibilité d’abus de Telegram en tant que canal de Commandement et Contrôle (via requête_dns)
Voir
Communications C2 possibles sur HTTP vers une IP directe avec port inhabituel (via proxy)
Voir
IOCs (SourceIP) à détecter : Solana FakeFix : 25 paquets npm et PyPI malveillants attirent les développeurs avec de fausses constructions stables
Voir
IOCs (DestinationIP) à détecter : Solana FakeFix : 25 paquets npm et PyPI malveillants attirent les développeurs avec de fausses constructions stables
Voir
Détection d’activités de paquets malveillants impliquant des charges utiles dynamiques à distance et C2 Telegram [Connexion réseau Windows]
Voir
Exécution de conhost.exe en mode sans tête pour l’exécution de scripts malveillants [Création de processus Windows]
Voir
Détection de persistance via la clé Run du registre du chargeur Windows CMS [Événement registre Windows]
Voir
Détection de persistance du hook de profil PowerShell et exécution PowerShell cachée [Windows Powershell]
Voir
Exécution de simulation
Préalable : la vérification préliminaire de la télémétrie et des bases de référence doit avoir été réussie.
Raisonnement : Cette section détaille l’exécution précise de la technique de l’adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et visent à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non liés conduiront à un mauvais diagnostic.
-
Narratif de l’Attaque & Commandes : L’attaquant a obtenu un accès initial et a l’intention de maintenir une présence. Il décide d’utiliser une charge utile basée sur Deno. Pour masquer l’exécution du terminal, il utilise le
--headlessflag pourconhost.exe. Il exécute une commande qui modifie la clé de registreHKCUSoftwareMicrosoftWindowsCurrentVersionRun, ajoutant une valeur nomméeDenoUpdaterqui exécuteconhost.exe --headless deno.exe [malicious_script]. Cela garantira que la charge utile s’exécute silencieusement en arrière-plan lors de la connexion utilisateur. -
Script de Test de Régression :
# Simulation de persistance basée sur Deno via la clé Run du registre $RegistryPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun" $Name = "DenoUpdater" $Value = "C:WindowsSystem32conhost.exe --headless C:UsersPublicdeno.exe malicious_payload.js" Write-Host "[*] Simulation du mécanisme de persistance..." New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType String -Force Write-Host "[+] Clé de registre créée. Vérifiez l'alerte dans le SIEM." -
Commandes de Nettoyage :
# Nettoyer la persistance simulée $RegistryPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionRun" $Name = "DenoUpdater" if (Get-ItemProperty -Path $RegistryPath -Name $Name -ErrorAction SilentlyContinue) { Remove-ItemProperty -Path $RegistryPath -Name $Name -Force Write-Host "[+] Nettoyage terminé. Clé de registre supprimée." } else { Write-Host "[-] Échec du nettoyage : Clé de registre non trouvée." }