muaddib-scanner 2.2.26 → 2.2.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,347 +1,388 @@
1
- const PLAYBOOKS = {
2
- lifecycle_script:
3
- 'Verifier le contenu du script. Desactiver avec "npm config set ignore-scripts true" si suspect.',
4
-
5
- curl_pipe_sh:
6
- 'CRITIQUE: Ne jamais executer. Inspecter l\'URL telechargee. Verifier si deja execute.',
7
-
8
- wget_pipe_sh:
9
- 'CRITIQUE: Ne jamais executer. Inspecter l\'URL telechargee. Verifier si deja execute.',
10
-
11
- eval_usage:
12
- 'Code dynamique detecte. Verifier la source des donnees evaluees. Risque d\'injection.',
13
-
14
- child_process:
15
- 'Execution de commandes systeme. Verifier quelles commandes sont lancees.',
16
-
17
- child_process_import:
18
- 'Module child_process importe. Verifier son utilisation dans le code.',
19
-
20
- npmrc_access:
21
- 'Acces au fichier .npmrc detecte. Risque de vol de token npm. Regenerer le token.',
22
-
23
- github_token_access:
24
- 'Acces au GITHUB_TOKEN. Verifier les permissions. Regenerer si compromis.',
25
-
26
- aws_credential_access:
27
- 'Acces aux credentials AWS. Rotation immediate recommandee via AWS IAM.',
28
-
29
- sensitive_env_access:
30
- 'Acces a des variables sensibles. Verifier l\'usage. Rotation des secrets recommandee.',
31
-
32
- base64_encoding:
33
- 'Encodage base64 detecte. Souvent utilise pour obfusquer du code malveillant.',
34
-
35
- base64_decode:
36
- 'Decodage base64 detecte. Verifier ce qui est decode et execute.',
37
-
38
- reverse_shell:
39
- 'CRITIQUE: Reverse shell detecte. Machine potentiellement compromise. Isoler immediatement.',
40
-
41
- home_deletion:
42
- 'CRITIQUE: Tentative de suppression du repertoire home. Dead man\'s switch probable.',
43
-
44
- curl_exfiltration:
45
- 'Exfiltration de donnees via curl. Verifier les donnees envoyees et la destination.',
46
-
47
- ssh_access:
48
- 'Acces aux cles SSH. Regenerer les cles si compromis: ssh-keygen -t ed25519',
49
-
50
- github_api_call:
51
- 'Appel a l\'API GitHub. Verifier le contexte. Peut etre legitime ou exfiltration.',
52
-
53
- exec_curl:
54
- 'Execution de curl via child_process. Verifier l\'URL et les donnees.',
55
-
56
- exec_wget:
57
- 'Execution de wget via child_process. Verifier l\'URL et les donnees.',
58
-
59
- dynamic_require:
60
- 'require() avec concatenation detecte. Technique d\'obfuscation pour masquer le module charge. Analyser les variables concatenees.',
61
-
62
- dangerous_exec:
63
- 'CRITIQUE: Execution de commande shell dangereuse detectee. Isoler la machine. Verifier si la commande a ete executee.',
64
-
65
- staged_payload:
66
- 'CRITIQUE: Code telecharge depuis le reseau et execute via eval(). Payload distant probable. Isoler et analyser le trafic reseau.',
67
-
68
- network_require:
69
- 'require(https/http) dans un script lifecycle. Le package telecharge du code lors de l\'installation. Verifier l\'URL de destination.',
70
-
71
- node_inline_exec:
72
- 'node -e dans un script lifecycle. Code inline execute a l\'installation. Analyser le code inline.',
73
-
74
- dynamic_import:
75
- 'import() dynamique detecte. Technique d\'evasion pour eviter la detection de require(). Verifier quel module est charge et son usage.',
76
-
77
- env_proxy_intercept:
78
- 'CRITIQUE: new Proxy(process.env) intercepte tous les acces aux variables d\'environnement. Technique d\'exfiltration silencieuse. Isoler la machine, regenerer tous les secrets.',
79
-
80
- dynamic_require_exec:
81
- 'CRITIQUE: exec/execSync appele sur un module charge via require() obfusque. Le module child_process est dissimule par concatenation/encodage. Isoler la machine, auditer les commandes executees.',
82
-
83
- sandbox_evasion:
84
- 'Code detecte la presence d\'un sandbox/container (/.dockerenv, /proc/cgroup). Technique anti-analyse: le malware adapte son comportement selon l\'environnement. Analyser les deux branches (sandbox vs production).',
85
-
86
- detached_process:
87
- 'spawn/fork avec {detached: true} detecte. Le processus enfant survit a la fin de npm install et execute le payload en arriere-plan. Verifier les processus en cours: ps aux | grep node. Tuer le processus suspect.',
88
-
89
- known_malicious_package:
90
- 'CRITIQUE: Supprimer immediatement. rm -rf node_modules && npm cache clean --force && npm install',
91
-
92
- pypi_malicious_package:
93
- 'CRITIQUE: Supprimer immediatement. pip uninstall <package> && pip install -r requirements.txt',
94
-
95
- pypi_typosquat_detected:
96
- 'Verifier que le nom du package PyPI est correct. Comparer avec le package populaire identifie.',
97
-
98
- lifecycle_script_dependency:
99
- 'Verifier le contenu du script dans le package. Reinstaller avec --ignore-scripts si suspect.',
100
-
101
- suspicious_file:
102
- 'Fichier typique de Shai-Hulud. Ne pas executer. Verifier le hash contre les IOCs connus.',
103
-
104
- obfuscation_detected:
105
- 'Code volontairement obscurci. Analyser dans un environnement isole. Probable malware.',
106
-
107
- dangerous_call_eval:
108
- 'Appel eval() detecte. Verifier la source des donnees. Risque d\'execution de code arbitraire.',
109
-
110
- dangerous_call_exec:
111
- 'Execution de commande systeme. Verifier les arguments passes.',
112
-
113
- dangerous_call_spawn:
114
- 'Spawn de processus detecte. Verifier la commande executee.',
115
-
116
- sensitive_string:
117
- 'Reference a un chemin ou identifiant sensible. Verifier le contexte d\'utilisation.',
118
-
119
- env_access:
120
- 'Acces a une variable d\'environnement sensible. Verifier si les donnees sont exfiltrees.',
121
-
122
- shai_hulud_marker:
123
- 'CRITIQUE: Marqueur Shai-Hulud detecte. Package compromis. Supprimer immediatement et regenerer tous les tokens.',
124
-
125
- known_malicious_hash:
126
- 'CRITIQUE: Fichier malveillant confirme par hash. Supprimer immediatement. Considerer la machine compromise.',
127
-
128
- suspicious_dataflow:
129
- 'CRITIQUE: Code lit des credentials et les envoie sur le reseau. Exfiltration probable. Isoler la machine, regenerer tous les secrets.',
130
-
131
- typosquat_detected:
132
- 'ATTENTION: Ce package a un nom tres similaire a un package populaire. Verifier que c\'est bien le bon package. Si erreur de frappe, corriger immediatement.',
133
-
134
- dangerous_call_function:
135
- 'Appel new Function() detecte. Equivalent a eval(). Verifier la source des donnees.',
136
-
137
- possible_obfuscation:
138
- 'Fichier potentiellement obfusque (parse echoue, code dense). Analyser manuellement.',
139
-
140
- curl_pipe_shell:
141
- 'CRITIQUE: Telechargement et execution via curl | sh. Ne jamais executer. Inspecter l\'URL.',
142
-
143
- wget_chmod_exec:
144
- 'CRITIQUE: Telechargement et execution via wget + chmod. Ne jamais executer. Inspecter le binaire.',
145
-
146
- netcat_shell:
147
- 'CRITIQUE: Shell netcat detecte. Machine potentiellement compromise. Isoler immediatement.',
148
-
149
- shred_home:
150
- 'CRITIQUE: Destruction de donnees detectee. Dead man\'s switch de Shai-Hulud. Isoler la machine.',
151
-
152
- npmrc_read:
153
- 'Lecture du .npmrc. Regenerer immediatement: npm token revoke && npm login',
154
-
155
- ssh_key_read:
156
- 'Lecture des cles SSH. Regenerer immediatement toutes les cles: ssh-keygen -t ed25519',
157
-
158
- python_reverse_shell:
159
- 'CRITIQUE: Reverse shell Python detecte. Machine potentiellement compromise. Isoler immediatement.',
160
- perl_reverse_shell:
161
- 'CRITIQUE: Reverse shell Perl detecte. Machine potentiellement compromise. Isoler immediatement.',
162
- fifo_reverse_shell:
163
- 'CRITIQUE: Reverse shell FIFO/named pipe detecte. Machine potentiellement compromise. Isoler immediatement.',
164
-
165
- shai_hulud_backdoor:
166
- 'CRITIQUE: Backdoor Shai-Hulud dans GitHub Actions. Supprimer le workflow et auditer les runs precedents.',
167
-
168
- workflow_injection:
169
- 'Injection potentielle dans GitHub Actions via input non sanitise sur self-hosted runner. Supprimer ou corriger le workflow.',
170
-
171
- sandbox_sensitive_file_read:
172
- 'CRITIQUE: Package lit des fichiers sensibles (credentials) lors de l\'installation. Ne pas installer. Supprimer immediatement.',
173
- sandbox_sensitive_file_write:
174
- 'CRITIQUE: Package ecrit dans des fichiers sensibles lors de l\'installation. Considerer la machine compromise.',
175
- sandbox_suspicious_filesystem:
176
- 'Package modifie des fichiers systeme lors de l\'installation. Analyser les chemins cibles.',
177
- sandbox_suspicious_dns:
178
- 'Package resout des domaines non-registry lors de l\'installation. Verifier les domaines contactes.',
179
- sandbox_suspicious_connection:
180
- 'Package etablit des connexions reseau suspectes lors de l\'installation. Analyser les destinations.',
181
- sandbox_suspicious_process:
182
- 'CRITIQUE: Package execute des commandes dangereuses (curl, wget, nc) lors de l\'installation. Ne pas installer.',
183
- sandbox_unknown_process:
184
- 'Package lance des processus inconnus lors de l\'installation. Verifier les commandes executees.',
185
- sandbox_timeout:
186
- 'CRITIQUE: Le container sandbox a depasse le timeout. Possible boucle infinie ou consommation de ressources.',
187
-
188
- high_entropy_string:
189
- 'Chaine a haute entropie detectee. Verifier si c\'est du base64, hex, ou un payload chiffre. Analyser le contexte d\'utilisation.',
190
- js_obfuscation_pattern:
191
- 'Pattern d\'obfuscation JS detecte (variables _0x*, string arrays encodes, eval+payload, long base64). Analyser dans un sandbox. Comparer avec les signatures Shai-Hulud/chalk/debug.',
192
-
193
- lifecycle_added_critical:
194
- 'CRITIQUE: Un script d\'installation (preinstall/install/postinstall) a ete ajoute dans la derniere version. ' +
195
- 'C\'est le vecteur d\'attaque #1 des supply chain attacks (Shai-Hulud, ua-parser-js, coa). ' +
196
- 'Actions: 1. NE PAS installer cette version. ' +
197
- '2. Verifier le changelog officiel du package. ' +
198
- '3. Comparer avec la version precedente: npm diff package@old package@new. ' +
199
- '4. Si pas de justification legitime, signaler sur GitHub/npm.',
200
-
201
- lifecycle_added_high:
202
- 'Un script lifecycle (prepare, prepack, etc.) a ete ajoute dans la derniere version. ' +
203
- 'Verifier le changelog officiel. Comparer: npm diff package@old package@new. ' +
204
- 'Si pas de justification, investiguer le mainteneur.',
205
-
206
- lifecycle_modified:
207
- 'Un script lifecycle a ete modifie entre les deux dernieres versions. ' +
208
- 'Verifier le contenu du nouveau script. Comparer: npm diff package@old package@new.',
209
-
210
- dangerous_api_added_critical:
211
- 'CRITIQUE: Une API dangereuse (child_process, eval, Function, net.connect) est apparue dans la derniere version. ' +
212
- 'Cette API etait absente de la version precedente. ' +
213
- 'Actions: 1. NE PAS mettre a jour. ' +
214
- '2. Comparer les sources: npm diff package@old package@new. ' +
215
- '3. Verifier le changelog et les commits recents. ' +
216
- '4. Si pas de justification, signaler sur GitHub/npm.',
217
-
218
- dangerous_api_added_high:
219
- 'Une API suspecte (process.env, fetch, http/https) est apparue dans la derniere version. ' +
220
- 'Verifier si le changement est justifie dans le changelog. ' +
221
- 'Comparer: npm diff package@old package@new.',
222
-
223
- dangerous_api_added_medium:
224
- 'Une API potentiellement suspecte (dns.lookup, fs.readFile sur chemin sensible) est apparue. ' +
225
- 'Verifier le contexte d\'utilisation. Comparer: npm diff package@old package@new.',
226
-
227
- publish_burst:
228
- 'Multiple versions published rapidly. Possible account compromise. ' +
229
- 'Verify maintainer activity on npm/GitHub. Check changelogs for each version.',
230
-
231
- dormant_spike:
232
- 'Package dormant for 6+ months suddenly updated. ' +
233
- 'Check if maintainer changed or account was compromised. ' +
234
- 'Compare: npm diff package@old package@new.',
235
-
236
- rapid_succession:
237
- 'Versions published in rapid succession. ' +
238
- 'Could indicate automated attack or compromised CI/CD. ' +
239
- 'Verify each version for malicious changes.',
240
-
241
- new_maintainer:
242
- 'A new maintainer was added. Verify this is legitimate by checking the package\'s GitHub/npm page. ' +
243
- 'Compare: npm diff package@old package@new.',
244
-
245
- suspicious_maintainer:
246
- 'Maintainer has suspicious name pattern (generic/auto-generated). High risk of account takeover. ' +
247
- 'Verify maintainer identity on npm and GitHub. Do NOT install until verified.',
248
-
249
- sole_maintainer_change:
250
- 'The sole maintainer has changed. This is a strong indicator of account compromise (event-stream pattern). ' +
251
- 'Verify on npm and GitHub. Compare: npm diff package@old package@new.',
252
-
253
- new_publisher:
254
- 'New publisher detected. Package published by a different user than before. Verify legitimacy by checking the package\'s npm page and changelog.',
255
-
256
- credential_command_exec:
257
- 'CRITIQUE: Le code utilise un outil CLI legitime (gh, gcloud, aws, az) pour voler des tokens. ' +
258
- 'Verifier: gh auth status, gcloud auth list, aws sts get-caller-identity. ' +
259
- 'Regenerer tous les tokens des outils concernes. Revoquer les sessions actives.',
260
-
261
- workflow_write:
262
- 'Le code cree un fichier dans .github/workflows/ — injection de workflow GitHub Actions. ' +
263
- 'Supprimer le fichier cree. Auditer les workflows existants. ' +
264
- 'Verifier les GitHub Actions runs recents pour des executions non autorisees.',
265
-
266
- binary_dropper:
267
- 'CRITIQUE: Pattern dropper detecte — fichier telecharge, rendu executable (chmod), et execute. ' +
268
- 'Verifier /tmp pour des binaires suspects. Tuer les processus inconnus. ' +
269
- 'Considerer la machine compromise si le binaire a ete execute.',
270
-
271
- prototype_hook:
272
- 'Prototype de fonction native modifie (fetch, XMLHttpRequest, http.request). ' +
273
- 'Technique d\'interception de trafic pour voler des donnees en transit. ' +
274
- 'Supprimer le package. Auditer le trafic reseau recent.',
275
-
276
- ai_config_injection:
277
- 'Fichier de config d\'agent IA contient des instructions malveillantes. ' +
278
- 'NE PAS ouvrir le projet avec un agent IA sans verifier les fichiers .cursorrules, CLAUDE.md, copilot-instructions.md. ' +
279
- 'Supprimer ou nettoyer ces fichiers avant toute utilisation. Technique ToxicSkills/Clinejection.',
280
-
281
- ai_config_injection_critical:
282
- 'CRITIQUE: Fichier de config d\'agent IA contient des commandes d\'exfiltration ou un combo shell + credential access. ' +
283
- 'NE PAS ouvrir ce projet avec un agent IA. Supprimer les fichiers de config compromis. ' +
284
- 'Si deja ouvert avec un agent IA, considerer la machine compromise. Regenerer tous les secrets.',
285
-
286
- ai_agent_abuse:
287
- 'CRITIQUE: Un agent IA (Claude, Gemini, Q) est invoque avec des flags de bypass de securite ' +
288
- '(--dangerously-skip-permissions, --yolo, --trust-all-tools). Technique s1ngularity/Nx. ' +
289
- 'NE PAS installer. Verifier si l\'agent a ete execute. Si oui, considerer la machine compromise. ' +
290
- 'Auditer les fichiers sensibles (.ssh, .aws, .env) pour des acces non autorises.',
291
-
292
- canary_exfiltration:
293
- 'CRITIQUE: Le package a tente de voler des credentials (honey tokens). Comportement malveillant confirme. ' +
294
- 'NE PAS installer. Signaler immediatement sur npm/PyPI. ' +
295
- 'Si deja installe: considerer la machine compromise, regenerer TOUS les secrets.',
296
-
297
- env_charcode_reconstruction:
298
- 'Obfuscation detectee: le nom de la variable d\'environnement est reconstruit dynamiquement via fromCharCode ' +
299
- 'pour eviter la detection statique. Technique de vol de GITHUB_TOKEN, NPM_TOKEN, etc. ' +
300
- 'Verifier quelles variables sont accedees et si elles sont exfiltrees.',
301
-
302
- lifecycle_shell_pipe:
303
- 'CRITIQUE: Le script lifecycle (preinstall/postinstall) pipe du code distant vers un shell (curl | sh). ' +
304
- 'NE PAS installer. Ceci execute du code arbitraire a l\'installation. ' +
305
- 'Si deja installe: considerer la machine compromise. Auditer les modifications systeme.',
306
-
307
- cross_file_dataflow:
308
- 'CRITIQUE: Un module lit des credentials et les exporte vers un autre module qui les envoie sur le reseau. ' +
309
- 'Exfiltration inter-fichiers confirmee. Isoler la machine, supprimer le package, regenerer TOUS les secrets. ' +
310
- 'Auditer les connexions reseau recentes pour identifier les donnees exfiltrees.',
311
-
312
- credential_tampering:
313
- 'CRITIQUE: Ecriture detectee dans un cache sensible (npm _cacache, yarn, pip). ' +
314
- 'Possible cache poisoning: injection de code malveillant dans des packages caches. ' +
315
- 'Nettoyer le cache: npm cache clean --force. Reinstaller les dependances depuis zero.',
316
-
317
- require_cache_poison:
318
- 'CRITIQUE: require.cache modifie pour hijacker des modules Node.js. ' +
319
- 'Le code remplace les exports de modules charges (https, http, fs) pour intercepter toutes les requetes. ' +
320
- 'Supprimer le package. Redemarrer le processus Node.js. Auditer le trafic reseau recent.',
321
-
322
- staged_binary_payload:
323
- 'Fichier binaire (.png/.jpg/.wasm) reference avec eval() dans le meme fichier. ' +
324
- 'Technique de steganographie: le payload malveillant est cache dans les pixels d\'une image ou les sections d\'un WASM. ' +
325
- 'Analyser le fichier binaire dans un sandbox. Verifier les donnees extraites avant execution.',
326
-
327
- staged_eval_decode:
328
- 'CRITIQUE: eval() ou Function() recoit un argument decode en base64 (atob/Buffer.from). ' +
329
- 'Technique de staged payload: le code malveillant est encode puis decode et execute dynamiquement. ' +
330
- 'Isoler la machine. Decoder le payload manuellement pour analyser le code execute. Supprimer le package.',
331
-
332
- crypto_decipher:
333
- 'crypto.createDecipher/createDecipheriv detecte. Dechiffrement de payload embarque a runtime. ' +
334
- 'Pattern canonique de l\'attaque event-stream/flatmap-stream. Extraire et decoder le payload manuellement ' +
335
- 'pour analyser le code execute. Verifier la source des donnees chiffrees.',
336
-
337
- module_compile:
338
- 'CRITIQUE: module._compile() detecte. Cette API Node.js interne execute du code arbitraire ' +
339
- 'a partir d\'une chaine dans le contexte d\'un module. Utilisee dans flatmap-stream pour executer ' +
340
- 'un payload dechiffre sans ecrire sur disque. Isoler immediatement. Analyser la source de la chaine compilee.',
341
- };
342
-
343
- function getPlaybook(threatType) {
344
- return PLAYBOOKS[threatType] || 'Analyser manuellement cette menace.';
345
- }
346
-
1
+ const PLAYBOOKS = {
2
+ lifecycle_script:
3
+ 'Verifier le contenu du script. Desactiver avec "npm config set ignore-scripts true" si suspect.',
4
+
5
+ curl_pipe_sh:
6
+ 'CRITIQUE: Ne jamais executer. Inspecter l\'URL telechargee. Verifier si deja execute.',
7
+
8
+ wget_pipe_sh:
9
+ 'CRITIQUE: Ne jamais executer. Inspecter l\'URL telechargee. Verifier si deja execute.',
10
+
11
+ eval_usage:
12
+ 'Code dynamique detecte. Verifier la source des donnees evaluees. Risque d\'injection.',
13
+
14
+ child_process:
15
+ 'Execution de commandes systeme. Verifier quelles commandes sont lancees.',
16
+
17
+ child_process_import:
18
+ 'Module child_process importe. Verifier son utilisation dans le code.',
19
+
20
+ npmrc_access:
21
+ 'Acces au fichier .npmrc detecte. Risque de vol de token npm. Regenerer le token.',
22
+
23
+ github_token_access:
24
+ 'Acces au GITHUB_TOKEN. Verifier les permissions. Regenerer si compromis.',
25
+
26
+ aws_credential_access:
27
+ 'Acces aux credentials AWS. Rotation immediate recommandee via AWS IAM.',
28
+
29
+ sensitive_env_access:
30
+ 'Acces a des variables sensibles. Verifier l\'usage. Rotation des secrets recommandee.',
31
+
32
+ base64_encoding:
33
+ 'Encodage base64 detecte. Souvent utilise pour obfusquer du code malveillant.',
34
+
35
+ base64_decode:
36
+ 'Decodage base64 detecte. Verifier ce qui est decode et execute.',
37
+
38
+ reverse_shell:
39
+ 'CRITIQUE: Reverse shell detecte. Machine potentiellement compromise. Isoler immediatement.',
40
+
41
+ home_deletion:
42
+ 'CRITIQUE: Tentative de suppression du repertoire home. Dead man\'s switch probable.',
43
+
44
+ curl_exfiltration:
45
+ 'Exfiltration de donnees via curl. Verifier les donnees envoyees et la destination.',
46
+
47
+ ssh_access:
48
+ 'Acces aux cles SSH. Regenerer les cles si compromis: ssh-keygen -t ed25519',
49
+
50
+ github_api_call:
51
+ 'Appel a l\'API GitHub. Verifier le contexte. Peut etre legitime ou exfiltration.',
52
+
53
+ exec_curl:
54
+ 'Execution de curl via child_process. Verifier l\'URL et les donnees.',
55
+
56
+ exec_wget:
57
+ 'Execution de wget via child_process. Verifier l\'URL et les donnees.',
58
+
59
+ dynamic_require:
60
+ 'require() avec concatenation detecte. Technique d\'obfuscation pour masquer le module charge. Analyser les variables concatenees.',
61
+
62
+ dangerous_exec:
63
+ 'CRITIQUE: Execution de commande shell dangereuse detectee. Isoler la machine. Verifier si la commande a ete executee.',
64
+
65
+ staged_payload:
66
+ 'CRITIQUE: Code telecharge depuis le reseau et execute via eval(). Payload distant probable. Isoler et analyser le trafic reseau.',
67
+
68
+ network_require:
69
+ 'require(https/http) dans un script lifecycle. Le package telecharge du code lors de l\'installation. Verifier l\'URL de destination.',
70
+
71
+ node_inline_exec:
72
+ 'node -e dans un script lifecycle. Code inline execute a l\'installation. Analyser le code inline.',
73
+
74
+ dynamic_import:
75
+ 'import() dynamique detecte. Technique d\'evasion pour eviter la detection de require(). Verifier quel module est charge et son usage.',
76
+
77
+ env_proxy_intercept:
78
+ 'CRITIQUE: new Proxy(process.env) intercepte tous les acces aux variables d\'environnement. Technique d\'exfiltration silencieuse. Isoler la machine, regenerer tous les secrets.',
79
+
80
+ dynamic_require_exec:
81
+ 'CRITIQUE: exec/execSync appele sur un module charge via require() obfusque. Le module child_process est dissimule par concatenation/encodage. Isoler la machine, auditer les commandes executees.',
82
+
83
+ sandbox_evasion:
84
+ 'Code detecte la presence d\'un sandbox/container (/.dockerenv, /proc/cgroup). Technique anti-analyse: le malware adapte son comportement selon l\'environnement. Analyser les deux branches (sandbox vs production).',
85
+
86
+ detached_process:
87
+ 'spawn/fork avec {detached: true} detecte. Le processus enfant survit a la fin de npm install et execute le payload en arriere-plan. Verifier les processus en cours: ps aux | grep node. Tuer le processus suspect.',
88
+
89
+ known_malicious_package:
90
+ 'CRITIQUE: Supprimer immediatement. rm -rf node_modules && npm cache clean --force && npm install',
91
+
92
+ pypi_malicious_package:
93
+ 'CRITIQUE: Supprimer immediatement. pip uninstall <package> && pip install -r requirements.txt',
94
+
95
+ pypi_typosquat_detected:
96
+ 'Verifier que le nom du package PyPI est correct. Comparer avec le package populaire identifie.',
97
+
98
+ lifecycle_script_dependency:
99
+ 'Verifier le contenu du script dans le package. Reinstaller avec --ignore-scripts si suspect.',
100
+
101
+ suspicious_file:
102
+ 'Fichier typique de Shai-Hulud. Ne pas executer. Verifier le hash contre les IOCs connus.',
103
+
104
+ obfuscation_detected:
105
+ 'Code volontairement obscurci. Analyser dans un environnement isole. Probable malware.',
106
+
107
+ dangerous_call_eval:
108
+ 'Appel eval() detecte. Verifier la source des donnees. Risque d\'execution de code arbitraire.',
109
+
110
+ dangerous_call_exec:
111
+ 'Execution de commande systeme. Verifier les arguments passes.',
112
+
113
+ dangerous_call_spawn:
114
+ 'Spawn de processus detecte. Verifier la commande executee.',
115
+
116
+ sensitive_string:
117
+ 'Reference a un chemin ou identifiant sensible. Verifier le contexte d\'utilisation.',
118
+
119
+ env_access:
120
+ 'Acces a une variable d\'environnement sensible. Verifier si les donnees sont exfiltrees.',
121
+
122
+ shai_hulud_marker:
123
+ 'CRITIQUE: Marqueur Shai-Hulud detecte. Package compromis. Supprimer immediatement et regenerer tous les tokens.',
124
+
125
+ known_malicious_hash:
126
+ 'CRITIQUE: Fichier malveillant confirme par hash. Supprimer immediatement. Considerer la machine compromise.',
127
+
128
+ suspicious_dataflow:
129
+ 'CRITIQUE: Code lit des credentials et les envoie sur le reseau. Exfiltration probable. Isoler la machine, regenerer tous les secrets.',
130
+
131
+ typosquat_detected:
132
+ 'ATTENTION: Ce package a un nom tres similaire a un package populaire. Verifier que c\'est bien le bon package. Si erreur de frappe, corriger immediatement.',
133
+
134
+ dangerous_call_function:
135
+ 'Appel new Function() detecte. Equivalent a eval(). Verifier la source des donnees.',
136
+
137
+ possible_obfuscation:
138
+ 'Fichier potentiellement obfusque (parse echoue, code dense). Analyser manuellement.',
139
+
140
+ curl_pipe_shell:
141
+ 'CRITIQUE: Telechargement et execution via curl | sh. Ne jamais executer. Inspecter l\'URL.',
142
+
143
+ wget_chmod_exec:
144
+ 'CRITIQUE: Telechargement et execution via wget + chmod. Ne jamais executer. Inspecter le binaire.',
145
+
146
+ netcat_shell:
147
+ 'CRITIQUE: Shell netcat detecte. Machine potentiellement compromise. Isoler immediatement.',
148
+
149
+ shred_home:
150
+ 'CRITIQUE: Destruction de donnees detectee. Dead man\'s switch de Shai-Hulud. Isoler la machine.',
151
+
152
+ npmrc_read:
153
+ 'Lecture du .npmrc. Regenerer immediatement: npm token revoke && npm login',
154
+
155
+ ssh_key_read:
156
+ 'Lecture des cles SSH. Regenerer immediatement toutes les cles: ssh-keygen -t ed25519',
157
+
158
+ python_reverse_shell:
159
+ 'CRITIQUE: Reverse shell Python detecte. Machine potentiellement compromise. Isoler immediatement.',
160
+ perl_reverse_shell:
161
+ 'CRITIQUE: Reverse shell Perl detecte. Machine potentiellement compromise. Isoler immediatement.',
162
+ fifo_reverse_shell:
163
+ 'CRITIQUE: Reverse shell FIFO/named pipe detecte. Machine potentiellement compromise. Isoler immediatement.',
164
+
165
+ shai_hulud_backdoor:
166
+ 'CRITIQUE: Backdoor Shai-Hulud dans GitHub Actions. Supprimer le workflow et auditer les runs precedents.',
167
+
168
+ workflow_injection:
169
+ 'Injection potentielle dans GitHub Actions via input non sanitise sur self-hosted runner. Supprimer ou corriger le workflow.',
170
+
171
+ sandbox_sensitive_file_read:
172
+ 'CRITIQUE: Package lit des fichiers sensibles (credentials) lors de l\'installation. Ne pas installer. Supprimer immediatement.',
173
+ sandbox_sensitive_file_write:
174
+ 'CRITIQUE: Package ecrit dans des fichiers sensibles lors de l\'installation. Considerer la machine compromise.',
175
+ sandbox_suspicious_filesystem:
176
+ 'Package modifie des fichiers systeme lors de l\'installation. Analyser les chemins cibles.',
177
+ sandbox_suspicious_dns:
178
+ 'Package resout des domaines non-registry lors de l\'installation. Verifier les domaines contactes.',
179
+ sandbox_suspicious_connection:
180
+ 'Package etablit des connexions reseau suspectes lors de l\'installation. Analyser les destinations.',
181
+ sandbox_suspicious_process:
182
+ 'CRITIQUE: Package execute des commandes dangereuses (curl, wget, nc) lors de l\'installation. Ne pas installer.',
183
+ sandbox_unknown_process:
184
+ 'Package lance des processus inconnus lors de l\'installation. Verifier les commandes executees.',
185
+ sandbox_timeout:
186
+ 'CRITIQUE: Le container sandbox a depasse le timeout. Possible boucle infinie ou consommation de ressources.',
187
+
188
+ high_entropy_string:
189
+ 'Chaine a haute entropie detectee. Verifier si c\'est du base64, hex, ou un payload chiffre. Analyser le contexte d\'utilisation.',
190
+ js_obfuscation_pattern:
191
+ 'Pattern d\'obfuscation JS detecte (variables _0x*, string arrays encodes, eval+payload, long base64). Analyser dans un sandbox. Comparer avec les signatures Shai-Hulud/chalk/debug.',
192
+
193
+ lifecycle_added_critical:
194
+ 'CRITIQUE: Un script d\'installation (preinstall/install/postinstall) a ete ajoute dans la derniere version. ' +
195
+ 'C\'est le vecteur d\'attaque #1 des supply chain attacks (Shai-Hulud, ua-parser-js, coa). ' +
196
+ 'Actions: 1. NE PAS installer cette version. ' +
197
+ '2. Verifier le changelog officiel du package. ' +
198
+ '3. Comparer avec la version precedente: npm diff package@old package@new. ' +
199
+ '4. Si pas de justification legitime, signaler sur GitHub/npm.',
200
+
201
+ lifecycle_added_high:
202
+ 'Un script lifecycle (prepare, prepack, etc.) a ete ajoute dans la derniere version. ' +
203
+ 'Verifier le changelog officiel. Comparer: npm diff package@old package@new. ' +
204
+ 'Si pas de justification, investiguer le mainteneur.',
205
+
206
+ lifecycle_modified:
207
+ 'Un script lifecycle a ete modifie entre les deux dernieres versions. ' +
208
+ 'Verifier le contenu du nouveau script. Comparer: npm diff package@old package@new.',
209
+
210
+ dangerous_api_added_critical:
211
+ 'CRITIQUE: Une API dangereuse (child_process, eval, Function, net.connect) est apparue dans la derniere version. ' +
212
+ 'Cette API etait absente de la version precedente. ' +
213
+ 'Actions: 1. NE PAS mettre a jour. ' +
214
+ '2. Comparer les sources: npm diff package@old package@new. ' +
215
+ '3. Verifier le changelog et les commits recents. ' +
216
+ '4. Si pas de justification, signaler sur GitHub/npm.',
217
+
218
+ dangerous_api_added_high:
219
+ 'Une API suspecte (process.env, fetch, http/https) est apparue dans la derniere version. ' +
220
+ 'Verifier si le changement est justifie dans le changelog. ' +
221
+ 'Comparer: npm diff package@old package@new.',
222
+
223
+ dangerous_api_added_medium:
224
+ 'Une API potentiellement suspecte (dns.lookup, fs.readFile sur chemin sensible) est apparue. ' +
225
+ 'Verifier le contexte d\'utilisation. Comparer: npm diff package@old package@new.',
226
+
227
+ publish_burst:
228
+ 'Multiple versions published rapidly. Possible account compromise. ' +
229
+ 'Verify maintainer activity on npm/GitHub. Check changelogs for each version.',
230
+
231
+ dormant_spike:
232
+ 'Package dormant for 6+ months suddenly updated. ' +
233
+ 'Check if maintainer changed or account was compromised. ' +
234
+ 'Compare: npm diff package@old package@new.',
235
+
236
+ rapid_succession:
237
+ 'Versions published in rapid succession. ' +
238
+ 'Could indicate automated attack or compromised CI/CD. ' +
239
+ 'Verify each version for malicious changes.',
240
+
241
+ new_maintainer:
242
+ 'A new maintainer was added. Verify this is legitimate by checking the package\'s GitHub/npm page. ' +
243
+ 'Compare: npm diff package@old package@new.',
244
+
245
+ suspicious_maintainer:
246
+ 'Maintainer has suspicious name pattern (generic/auto-generated). High risk of account takeover. ' +
247
+ 'Verify maintainer identity on npm and GitHub. Do NOT install until verified.',
248
+
249
+ sole_maintainer_change:
250
+ 'The sole maintainer has changed. This is a strong indicator of account compromise (event-stream pattern). ' +
251
+ 'Verify on npm and GitHub. Compare: npm diff package@old package@new.',
252
+
253
+ new_publisher:
254
+ 'New publisher detected. Package published by a different user than before. Verify legitimacy by checking the package\'s npm page and changelog.',
255
+
256
+ credential_command_exec:
257
+ 'CRITIQUE: Le code utilise un outil CLI legitime (gh, gcloud, aws, az) pour voler des tokens. ' +
258
+ 'Verifier: gh auth status, gcloud auth list, aws sts get-caller-identity. ' +
259
+ 'Regenerer tous les tokens des outils concernes. Revoquer les sessions actives.',
260
+
261
+ workflow_write:
262
+ 'Le code cree un fichier dans .github/workflows/ — injection de workflow GitHub Actions. ' +
263
+ 'Supprimer le fichier cree. Auditer les workflows existants. ' +
264
+ 'Verifier les GitHub Actions runs recents pour des executions non autorisees.',
265
+
266
+ binary_dropper:
267
+ 'CRITIQUE: Pattern dropper detecte — fichier telecharge, rendu executable (chmod), et execute. ' +
268
+ 'Verifier /tmp pour des binaires suspects. Tuer les processus inconnus. ' +
269
+ 'Considerer la machine compromise si le binaire a ete execute.',
270
+
271
+ prototype_hook:
272
+ 'Prototype de fonction native modifie (fetch, XMLHttpRequest, http.request). ' +
273
+ 'Technique d\'interception de trafic pour voler des donnees en transit. ' +
274
+ 'Supprimer le package. Auditer le trafic reseau recent.',
275
+
276
+ ai_config_injection:
277
+ 'Fichier de config d\'agent IA contient des instructions malveillantes. ' +
278
+ 'NE PAS ouvrir le projet avec un agent IA sans verifier les fichiers .cursorrules, CLAUDE.md, copilot-instructions.md. ' +
279
+ 'Supprimer ou nettoyer ces fichiers avant toute utilisation. Technique ToxicSkills/Clinejection.',
280
+
281
+ ai_config_injection_critical:
282
+ 'CRITIQUE: Fichier de config d\'agent IA contient des commandes d\'exfiltration ou un combo shell + credential access. ' +
283
+ 'NE PAS ouvrir ce projet avec un agent IA. Supprimer les fichiers de config compromis. ' +
284
+ 'Si deja ouvert avec un agent IA, considerer la machine compromise. Regenerer tous les secrets.',
285
+
286
+ ai_agent_abuse:
287
+ 'CRITIQUE: Un agent IA (Claude, Gemini, Q) est invoque avec des flags de bypass de securite ' +
288
+ '(--dangerously-skip-permissions, --yolo, --trust-all-tools). Technique s1ngularity/Nx. ' +
289
+ 'NE PAS installer. Verifier si l\'agent a ete execute. Si oui, considerer la machine compromise. ' +
290
+ 'Auditer les fichiers sensibles (.ssh, .aws, .env) pour des acces non autorises.',
291
+
292
+ canary_exfiltration:
293
+ 'CRITIQUE: Le package a tente de voler des credentials (honey tokens). Comportement malveillant confirme. ' +
294
+ 'NE PAS installer. Signaler immediatement sur npm/PyPI. ' +
295
+ 'Si deja installe: considerer la machine compromise, regenerer TOUS les secrets.',
296
+
297
+ env_charcode_reconstruction:
298
+ 'Obfuscation detectee: le nom de la variable d\'environnement est reconstruit dynamiquement via fromCharCode ' +
299
+ 'pour eviter la detection statique. Technique de vol de GITHUB_TOKEN, NPM_TOKEN, etc. ' +
300
+ 'Verifier quelles variables sont accedees et si elles sont exfiltrees.',
301
+
302
+ lifecycle_shell_pipe:
303
+ 'CRITIQUE: Le script lifecycle (preinstall/postinstall) pipe du code distant vers un shell (curl | sh). ' +
304
+ 'NE PAS installer. Ceci execute du code arbitraire a l\'installation. ' +
305
+ 'Si deja installe: considerer la machine compromise. Auditer les modifications systeme.',
306
+
307
+ cross_file_dataflow:
308
+ 'CRITIQUE: Un module lit des credentials et les exporte vers un autre module qui les envoie sur le reseau. ' +
309
+ 'Exfiltration inter-fichiers confirmee. Isoler la machine, supprimer le package, regenerer TOUS les secrets. ' +
310
+ 'Auditer les connexions reseau recentes pour identifier les donnees exfiltrees.',
311
+
312
+ credential_tampering:
313
+ 'CRITIQUE: Ecriture detectee dans un cache sensible (npm _cacache, yarn, pip). ' +
314
+ 'Possible cache poisoning: injection de code malveillant dans des packages caches. ' +
315
+ 'Nettoyer le cache: npm cache clean --force. Reinstaller les dependances depuis zero.',
316
+
317
+ require_cache_poison:
318
+ 'CRITIQUE: require.cache modifie pour hijacker des modules Node.js. ' +
319
+ 'Le code remplace les exports de modules charges (https, http, fs) pour intercepter toutes les requetes. ' +
320
+ 'Supprimer le package. Redemarrer le processus Node.js. Auditer le trafic reseau recent.',
321
+
322
+ staged_binary_payload:
323
+ 'Fichier binaire (.png/.jpg/.wasm) reference avec eval() dans le meme fichier. ' +
324
+ 'Technique de steganographie: le payload malveillant est cache dans les pixels d\'une image ou les sections d\'un WASM. ' +
325
+ 'Analyser le fichier binaire dans un sandbox. Verifier les donnees extraites avant execution.',
326
+
327
+ staged_eval_decode:
328
+ 'CRITIQUE: eval() ou Function() recoit un argument decode en base64 (atob/Buffer.from). ' +
329
+ 'Technique de staged payload: le code malveillant est encode puis decode et execute dynamiquement. ' +
330
+ 'Isoler la machine. Decoder le payload manuellement pour analyser le code execute. Supprimer le package.',
331
+
332
+ crypto_decipher:
333
+ 'crypto.createDecipher/createDecipheriv detecte. Dechiffrement de payload embarque a runtime. ' +
334
+ 'Pattern canonique de l\'attaque event-stream/flatmap-stream. Extraire et decoder le payload manuellement ' +
335
+ 'pour analyser le code execute. Verifier la source des donnees chiffrees.',
336
+
337
+ module_compile:
338
+ 'CRITIQUE: module._compile() detecte. Cette API Node.js interne execute du code arbitraire ' +
339
+ 'a partir d\'une chaine dans le contexte d\'un module. Utilisee dans flatmap-stream pour executer ' +
340
+ 'un payload dechiffre sans ecrire sur disque. Isoler immediatement. Analyser la source de la chaine compilee.',
341
+
342
+ zlib_inflate_eval:
343
+ 'CRITIQUE: Payload obfusque detecte — zlib inflate + decodage base64 + execution dynamique dans le meme fichier. ' +
344
+ 'Ce pattern est la signature de la campagne SANDWORM_MODE (fev. 2026). Aucun package legitime ne combine ces 3 elements. ' +
345
+ 'Isoler immediatement la machine. Decoder manuellement: zlib.inflateSync(Buffer.from(data, "base64")).toString(). Supprimer le package.',
346
+
347
+ module_compile_dynamic:
348
+ 'CRITIQUE: Module._compile() avec argument dynamique (variable, expression). Execution de code en memoire ' +
349
+ 'sans ecriture sur disque. Technique d\'evasion utilisee dans flatmap-stream et SANDWORM_MODE. ' +
350
+ 'Isoler immediatement. Tracer la source de la chaine compilee pour extraire le payload.',
351
+
352
+ write_execute_delete:
353
+ 'Pattern anti-forensique detecte: ecriture dans un repertoire temporaire (/tmp, /dev/shm, os.tmpdir()), ' +
354
+ 'execution via require() ou Module._compile(), puis suppression via unlinkSync/rmSync. ' +
355
+ 'Ce pattern de staging est typique des malwares cherchant a eviter la detection post-mortem. ' +
356
+ 'Isoler la machine et inspecter les artefacts temporaires avant nettoyage.',
357
+
358
+ mcp_config_injection:
359
+ 'CRITIQUE: Ecriture dans les fichiers de configuration MCP d\'assistants IA (.claude/, .cursor/, .continue/, .vscode/). ' +
360
+ 'Technique SANDWORM_MODE: le malware empoisonne la configuration MCP pour ajouter des serveurs malveillants. ' +
361
+ 'Verifier immediatement les fichiers de config IA. Supprimer les entrees MCP non reconnues. Supprimer le package.',
362
+
363
+ git_hooks_injection:
364
+ 'Injection de hooks Git detectee. Le package ecrit dans .git/hooks/ (pre-commit, pre-push, etc.) ' +
365
+ 'ou modifie git config init.templateDir pour la persistence globale. ' +
366
+ 'Verifier .git/hooks/ et git config --global --list. Supprimer les hooks non reconnus.',
367
+
368
+ env_harvesting_dynamic:
369
+ 'Collecte dynamique de variables d\'environnement via Object.entries/keys/values(process.env) ' +
370
+ 'avec filtrage par patterns sensibles. Technique de vol de credentials a grande echelle. ' +
371
+ 'Verifier les tokens/secrets exposes. Revoquer immediatement les credentials compromis.',
372
+
373
+ dns_chunk_exfiltration:
374
+ 'Exfiltration via requetes DNS detectee. Les donnees sont encodees en base64 et envoyees comme sous-domaines DNS. ' +
375
+ 'Cette technique contourne les firewalls et proxies car le DNS est rarement filtre. ' +
376
+ 'Bloquer les requetes DNS sortantes du package. Verifier les donnees exfiltrees.',
377
+
378
+ llm_api_key_harvesting:
379
+ 'Acces a 3+ cles API de providers LLM (OpenAI, Anthropic, Google, etc.). Usage unique = legitime, ' +
380
+ 'acces multiples = collecte pour revente ou abus. Verifier si le package a une raison ' +
381
+ 'legitime d\'acceder a plusieurs providers. Revoquer les cles exposees si necessaire.',
382
+ };
383
+
384
+ function getPlaybook(threatType) {
385
+ return PLAYBOOKS[threatType] || 'Analyser manuellement cette menace.';
386
+ }
387
+
347
388
  module.exports = { getPlaybook, PLAYBOOKS };