Contexte
En avril 2026, des chercheurs en sécurité ont identifié 36 packages npm malveillants publiés sur le registre public. Ces packages se faisaient passer pour des utilitaires légitimes liés à Redis, PostgreSQL et des outils de développement courants. Une fois installés, leurs scripts postinstall déclenchaient silencieusement le déploiement d'un RAT (Remote Access Trojan) multi-plateformes ciblant Windows, Linux et macOS.
Mécanisme d'attaque
L'attaque se déroule en plusieurs étapes :
- Installation silencieuse — le script
postinstalls'exécute automatiquement lors denpm install, sans interaction de l'utilisateur - Téléchargement du payload — un binaire RAT est récupéré depuis un serveur distant en fonction de la plateforme détectée (Windows/Linux/macOS)
- Exploitation de Redis — le RAT utilise une instance Redis locale ou accessible en réseau pour stocker sa configuration de persistance et ses données de commande
- Exploitation de PostgreSQL — des procédures stockées ou des connexions à des bases PostgreSQL exposées servent de canal secondaire pour exfiltrer des données ou recevoir des commandes
- Persistance — le RAT s'enregistre comme service système (Windows) ou via crontab/systemd (Linux/macOS)
Packages concernés
Les packages malveillants se présentaient sous des noms évocateurs de bibliothèques légitimes :
- Faux utilitaires Redis (
redis-helper,redis-utils-client, variations) - Faux connecteurs PostgreSQL (
pg-connect-utils,postgres-driver-helper, variations) - Faux outils de développement généralistes imitant des packages populaires par typosquatting
La majorité des packages avaient moins de 500 téléchargements, suggérant un ciblage précis plutôt qu'une diffusion de masse.
Impact
Un environnement compromis permet à l'attaquant de :
- Exécuter des commandes arbitraires sur la machine de développement ou le serveur CI/CD
- Exfiltrer des secrets — variables d'environnement, clés SSH, tokens cloud, credentials de bases de données
- Pivoter sur le réseau interne via les connexions Redis/PostgreSQL existantes
- Maintenir un accès persistant même après redémarrage de la machine
Détection
Vérifiez si votre environnement est affecté :
# Lister tous les packages installés avec leurs scripts postinstall
npm ls --json | jq '.. | .scripts?.postinstall? | select(.)'
# Rechercher des connexions sortantes suspectes établies après npm install
# (Linux/macOS)
ss -tnp | grep node
# Vérifier la présence de crontabs suspects
crontab -l
cat /etc/cron.d/*
# Auditer les packages récemment installés
npm audit
Signes d'infection :
- Processus
nodeactifs sans raison apparente après installation - Nouvelles entrées dans crontab ou services système créés après
npm install - Connexions sortantes vers des IPs inconnues depuis des processus liés à Node.js
- Requêtes Redis ou PostgreSQL inhabituelles dans les logs
Remédiation
- Supprimez les packages suspects identifiés dans votre
node_modules - Effectuez une rotation immédiate de tous les secrets accessibles sur la machine concernée
- Isolez la machine du réseau si une infection active est suspectée
- Réinstallez depuis un environnement propre — ne réutilisez pas un
node_modulespotentiellement compromis - Auditez vos instances Redis et PostgreSQL — vérifiez la présence de clés ou procédures inattendues :
# Redis : lister toutes les clés redis-cli KEYS "*" # PostgreSQL : lister les procédures stockées récentes SELECT proname, prosrc FROM pg_proc WHERE prolang != 12 ORDER BY oid DESC LIMIT 20; - Activez l'authentification sur Redis si ce n'est pas déjà le cas — Redis sans auth exposé localement est un vecteur courant
Recommandations
- Vérifiez les scripts postinstall avant d'installer un package inconnu :
npm pack <package>puis inspectez le contenu - Utilisez
--ignore-scriptspour les environnements de production où les scripts postinstall ne sont pas nécessaires :npm install --ignore-scripts - Activez l'authentification et le binding local sur Redis — ne jamais exposer Redis sur
0.0.0.0sans authentification - Restreignez les privilèges PostgreSQL — les connexions applicatives ne devraient pas avoir les droits
SUPERUSER - Intégrez un scanner de supply chain (Socket.dev, Snyk, Dependabot) dans votre pipeline CI/CD pour détecter les comportements suspects dans les scripts d'installation