muaddib-scanner 2.2.0 → 2.2.2

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.
Files changed (49) hide show
  1. package/datasets/holdout-v2/conditional-os-payload/index.js +36 -0
  2. package/datasets/holdout-v2/conditional-os-payload/package.json +6 -0
  3. package/datasets/holdout-v2/env-var-reconstruction/index.js +21 -0
  4. package/datasets/holdout-v2/env-var-reconstruction/package.json +6 -0
  5. package/datasets/holdout-v2/github-workflow-inject/index.js +36 -0
  6. package/datasets/holdout-v2/github-workflow-inject/package.json +6 -0
  7. package/datasets/holdout-v2/homedir-ssh-key-steal/index.js +29 -0
  8. package/datasets/holdout-v2/homedir-ssh-key-steal/package.json +6 -0
  9. package/datasets/holdout-v2/npm-cache-poison/index.js +38 -0
  10. package/datasets/holdout-v2/npm-cache-poison/package.json +6 -0
  11. package/datasets/holdout-v2/npm-lifecycle-preinstall-curl/package.json +8 -0
  12. package/datasets/holdout-v2/process-env-proxy-getter/index.js +35 -0
  13. package/datasets/holdout-v2/process-env-proxy-getter/package.json +6 -0
  14. package/datasets/holdout-v2/readable-stream-hijack/index.js +44 -0
  15. package/datasets/holdout-v2/readable-stream-hijack/package.json +6 -0
  16. package/datasets/holdout-v2/setTimeout-chain/index.js +50 -0
  17. package/datasets/holdout-v2/setTimeout-chain/package.json +6 -0
  18. package/datasets/holdout-v2/wasm-loader/index.js +46 -0
  19. package/datasets/holdout-v2/wasm-loader/package.json +6 -0
  20. package/datasets/holdout-v3/dns-txt-payload/index.js +11 -0
  21. package/datasets/holdout-v3/dns-txt-payload/package.json +6 -0
  22. package/datasets/holdout-v3/electron-rce/index.js +32 -0
  23. package/datasets/holdout-v3/electron-rce/package.json +6 -0
  24. package/datasets/holdout-v3/env-file-parse-exfil/index.js +39 -0
  25. package/datasets/holdout-v3/env-file-parse-exfil/package.json +6 -0
  26. package/datasets/holdout-v3/git-credential-steal/index.js +41 -0
  27. package/datasets/holdout-v3/git-credential-steal/package.json +6 -0
  28. package/datasets/holdout-v3/npm-hook-hijack/index.js +20 -0
  29. package/datasets/holdout-v3/npm-hook-hijack/package.json +9 -0
  30. package/datasets/holdout-v3/postinstall-reverse-shell/index.js +24 -0
  31. package/datasets/holdout-v3/postinstall-reverse-shell/package.json +9 -0
  32. package/datasets/holdout-v3/require-cache-poison/index.js +26 -0
  33. package/datasets/holdout-v3/require-cache-poison/package.json +6 -0
  34. package/datasets/holdout-v3/steganography-payload/index.js +31 -0
  35. package/datasets/holdout-v3/steganography-payload/package.json +6 -0
  36. package/datasets/holdout-v3/symlink-escape/index.js +30 -0
  37. package/datasets/holdout-v3/symlink-escape/package.json +6 -0
  38. package/datasets/holdout-v3/timezone-trigger/index.js +38 -0
  39. package/datasets/holdout-v3/timezone-trigger/package.json +6 -0
  40. package/metrics/v2.1.5.json +752 -752
  41. package/metrics/v2.2.0.json +752 -752
  42. package/metrics/v2.2.1.json +753 -0
  43. package/package.json +3 -3
  44. package/src/response/playbooks.js +25 -0
  45. package/src/rules/index.js +62 -1
  46. package/src/scanner/ast.js +164 -3
  47. package/src/scanner/dataflow.js +62 -5
  48. package/src/scanner/package.js +13 -0
  49. package/iocs.json.gz +0 -0
@@ -0,0 +1,753 @@
1
+ {
2
+ "version": "2.2.1",
3
+ "date": "2026-02-20T16:18:59.596Z",
4
+ "groundTruth": {
5
+ "detected": 4,
6
+ "total": 4,
7
+ "tpr": 1,
8
+ "details": [
9
+ {
10
+ "name": "event-stream",
11
+ "id": "GT-001",
12
+ "score": 25,
13
+ "detected": true,
14
+ "threshold": 3
15
+ },
16
+ {
17
+ "name": "ua-parser-js",
18
+ "id": "GT-002",
19
+ "score": 6,
20
+ "detected": true,
21
+ "threshold": 3
22
+ },
23
+ {
24
+ "name": "coa",
25
+ "id": "GT-003",
26
+ "score": 23,
27
+ "detected": true,
28
+ "threshold": 3
29
+ },
30
+ {
31
+ "name": "node-ipc",
32
+ "id": "GT-004",
33
+ "score": 25,
34
+ "detected": true,
35
+ "threshold": 3
36
+ }
37
+ ]
38
+ },
39
+ "benign": {
40
+ "flagged": 0,
41
+ "total": 98,
42
+ "fpr": 0,
43
+ "details": [
44
+ {
45
+ "name": "express",
46
+ "score": 0,
47
+ "flagged": false
48
+ },
49
+ {
50
+ "name": "lodash",
51
+ "score": 0,
52
+ "flagged": false
53
+ },
54
+ {
55
+ "name": "react",
56
+ "score": 0,
57
+ "flagged": false
58
+ },
59
+ {
60
+ "name": "axios",
61
+ "score": 0,
62
+ "flagged": false
63
+ },
64
+ {
65
+ "name": "webpack",
66
+ "score": 0,
67
+ "flagged": false
68
+ },
69
+ {
70
+ "name": "typescript",
71
+ "score": 0,
72
+ "flagged": false
73
+ },
74
+ {
75
+ "name": "eslint",
76
+ "score": 0,
77
+ "flagged": false
78
+ },
79
+ {
80
+ "name": "prettier",
81
+ "score": 0,
82
+ "flagged": false
83
+ },
84
+ {
85
+ "name": "jest",
86
+ "score": 0,
87
+ "flagged": false
88
+ },
89
+ {
90
+ "name": "mocha",
91
+ "score": 0,
92
+ "flagged": false
93
+ },
94
+ {
95
+ "name": "next",
96
+ "score": 0,
97
+ "flagged": false
98
+ },
99
+ {
100
+ "name": "vue",
101
+ "score": 0,
102
+ "flagged": false
103
+ },
104
+ {
105
+ "name": "moment",
106
+ "score": 0,
107
+ "flagged": false
108
+ },
109
+ {
110
+ "name": "dayjs",
111
+ "score": 0,
112
+ "flagged": false
113
+ },
114
+ {
115
+ "name": "uuid",
116
+ "score": 0,
117
+ "flagged": false
118
+ },
119
+ {
120
+ "name": "chalk",
121
+ "score": 0,
122
+ "flagged": false
123
+ },
124
+ {
125
+ "name": "commander",
126
+ "score": 0,
127
+ "flagged": false
128
+ },
129
+ {
130
+ "name": "inquirer",
131
+ "score": 0,
132
+ "flagged": false
133
+ },
134
+ {
135
+ "name": "yargs",
136
+ "score": 0,
137
+ "flagged": false
138
+ },
139
+ {
140
+ "name": "dotenv",
141
+ "score": 0,
142
+ "flagged": false
143
+ },
144
+ {
145
+ "name": "cors",
146
+ "score": 10,
147
+ "flagged": false
148
+ },
149
+ {
150
+ "name": "body-parser",
151
+ "score": 0,
152
+ "flagged": false
153
+ },
154
+ {
155
+ "name": "mongoose",
156
+ "score": 0,
157
+ "flagged": false
158
+ },
159
+ {
160
+ "name": "sequelize",
161
+ "score": 0,
162
+ "flagged": false
163
+ },
164
+ {
165
+ "name": "passport",
166
+ "score": 0,
167
+ "flagged": false
168
+ },
169
+ {
170
+ "name": "jsonwebtoken",
171
+ "score": 0,
172
+ "flagged": false
173
+ },
174
+ {
175
+ "name": "bcrypt",
176
+ "score": 0,
177
+ "flagged": false
178
+ },
179
+ {
180
+ "name": "nodemailer",
181
+ "score": 0,
182
+ "flagged": false
183
+ },
184
+ {
185
+ "name": "socket.io",
186
+ "score": 0,
187
+ "flagged": false
188
+ },
189
+ {
190
+ "name": "redis",
191
+ "score": 10,
192
+ "flagged": false
193
+ },
194
+ {
195
+ "name": "pg",
196
+ "score": 0,
197
+ "flagged": false
198
+ },
199
+ {
200
+ "name": "mysql2",
201
+ "score": 0,
202
+ "flagged": false
203
+ },
204
+ {
205
+ "name": "sqlite3",
206
+ "score": 0,
207
+ "flagged": false
208
+ },
209
+ {
210
+ "name": "sharp",
211
+ "score": 0,
212
+ "flagged": false
213
+ },
214
+ {
215
+ "name": "multer",
216
+ "score": 0,
217
+ "flagged": false
218
+ },
219
+ {
220
+ "name": "formidable",
221
+ "score": 0,
222
+ "flagged": false
223
+ },
224
+ {
225
+ "name": "cheerio",
226
+ "score": 0,
227
+ "flagged": false
228
+ },
229
+ {
230
+ "name": "puppeteer",
231
+ "score": 0,
232
+ "flagged": false
233
+ },
234
+ {
235
+ "name": "playwright",
236
+ "score": 0,
237
+ "flagged": false
238
+ },
239
+ {
240
+ "name": "cypress",
241
+ "score": 10,
242
+ "flagged": false
243
+ },
244
+ {
245
+ "name": "electron",
246
+ "score": 0,
247
+ "flagged": false
248
+ },
249
+ {
250
+ "name": "react-dom",
251
+ "score": 0,
252
+ "flagged": false
253
+ },
254
+ {
255
+ "name": "react-router",
256
+ "score": 0,
257
+ "flagged": false
258
+ },
259
+ {
260
+ "name": "redux",
261
+ "score": 10,
262
+ "flagged": false
263
+ },
264
+ {
265
+ "name": "mobx",
266
+ "score": 0,
267
+ "flagged": false
268
+ },
269
+ {
270
+ "name": "rxjs",
271
+ "score": 0,
272
+ "flagged": false
273
+ },
274
+ {
275
+ "name": "ramda",
276
+ "score": 0,
277
+ "flagged": false
278
+ },
279
+ {
280
+ "name": "underscore",
281
+ "score": 0,
282
+ "flagged": false
283
+ },
284
+ {
285
+ "name": "async",
286
+ "score": 0,
287
+ "flagged": false
288
+ },
289
+ {
290
+ "name": "debug",
291
+ "score": 0,
292
+ "flagged": false
293
+ },
294
+ {
295
+ "name": "minimist",
296
+ "score": 0,
297
+ "flagged": false
298
+ },
299
+ {
300
+ "name": "glob",
301
+ "score": 0,
302
+ "flagged": false
303
+ },
304
+ {
305
+ "name": "rimraf",
306
+ "score": 0,
307
+ "flagged": false
308
+ },
309
+ {
310
+ "name": "mkdirp",
311
+ "score": 0,
312
+ "flagged": false
313
+ },
314
+ {
315
+ "name": "semver",
316
+ "score": 0,
317
+ "flagged": false
318
+ },
319
+ {
320
+ "name": "yup",
321
+ "score": 0,
322
+ "flagged": false
323
+ },
324
+ {
325
+ "name": "zod",
326
+ "score": 0,
327
+ "flagged": false
328
+ },
329
+ {
330
+ "name": "ajv",
331
+ "score": 0,
332
+ "flagged": false
333
+ },
334
+ {
335
+ "name": "joi",
336
+ "score": 0,
337
+ "flagged": false
338
+ },
339
+ {
340
+ "name": "express-validator",
341
+ "score": 0,
342
+ "flagged": false
343
+ },
344
+ {
345
+ "name": "helmet",
346
+ "score": 0,
347
+ "flagged": false
348
+ },
349
+ {
350
+ "name": "compression",
351
+ "score": 0,
352
+ "flagged": false
353
+ },
354
+ {
355
+ "name": "morgan",
356
+ "score": 0,
357
+ "flagged": false
358
+ },
359
+ {
360
+ "name": "winston",
361
+ "score": 0,
362
+ "flagged": false
363
+ },
364
+ {
365
+ "name": "pino",
366
+ "score": 10,
367
+ "flagged": false
368
+ },
369
+ {
370
+ "name": "bunyan",
371
+ "score": 0,
372
+ "flagged": false
373
+ },
374
+ {
375
+ "name": "dotenv-expand",
376
+ "score": 0,
377
+ "flagged": false
378
+ },
379
+ {
380
+ "name": "cross-env",
381
+ "score": 0,
382
+ "flagged": false
383
+ },
384
+ {
385
+ "name": "concurrently",
386
+ "score": 0,
387
+ "flagged": false
388
+ },
389
+ {
390
+ "name": "nodemon",
391
+ "score": 0,
392
+ "flagged": false
393
+ },
394
+ {
395
+ "name": "ts-node",
396
+ "score": 0,
397
+ "flagged": false
398
+ },
399
+ {
400
+ "name": "esbuild",
401
+ "score": 0,
402
+ "flagged": false
403
+ },
404
+ {
405
+ "name": "rollup",
406
+ "score": 0,
407
+ "flagged": false
408
+ },
409
+ {
410
+ "name": "vite",
411
+ "score": 0,
412
+ "flagged": false
413
+ },
414
+ {
415
+ "name": "parcel",
416
+ "score": 0,
417
+ "flagged": false
418
+ },
419
+ {
420
+ "name": "core-js",
421
+ "score": 0,
422
+ "flagged": false
423
+ },
424
+ {
425
+ "name": "regenerator-runtime",
426
+ "score": 0,
427
+ "flagged": false
428
+ },
429
+ {
430
+ "name": "whatwg-fetch",
431
+ "score": 0,
432
+ "flagged": false
433
+ },
434
+ {
435
+ "name": "isomorphic-fetch",
436
+ "score": 0,
437
+ "flagged": false
438
+ },
439
+ {
440
+ "name": "node-fetch",
441
+ "score": 0,
442
+ "flagged": false
443
+ },
444
+ {
445
+ "name": "got",
446
+ "score": 0,
447
+ "flagged": false
448
+ },
449
+ {
450
+ "name": "superagent",
451
+ "score": 0,
452
+ "flagged": false
453
+ },
454
+ {
455
+ "name": "form-data",
456
+ "score": 0,
457
+ "flagged": false
458
+ },
459
+ {
460
+ "name": "busboy",
461
+ "score": 0,
462
+ "flagged": false
463
+ },
464
+ {
465
+ "name": "cookie-parser",
466
+ "score": 0,
467
+ "flagged": false
468
+ },
469
+ {
470
+ "name": "express-session",
471
+ "score": 0,
472
+ "flagged": false
473
+ },
474
+ {
475
+ "name": "connect-redis",
476
+ "score": 0,
477
+ "flagged": false
478
+ },
479
+ {
480
+ "name": "ioredis",
481
+ "score": 10,
482
+ "flagged": false
483
+ },
484
+ {
485
+ "name": "bull",
486
+ "score": 0,
487
+ "flagged": false
488
+ },
489
+ {
490
+ "name": "agenda",
491
+ "score": 0,
492
+ "flagged": false
493
+ },
494
+ {
495
+ "name": "node-cron",
496
+ "score": 0,
497
+ "flagged": false
498
+ },
499
+ {
500
+ "name": "date-fns",
501
+ "score": 0,
502
+ "flagged": false
503
+ },
504
+ {
505
+ "name": "luxon",
506
+ "score": 0,
507
+ "flagged": false
508
+ },
509
+ {
510
+ "name": "numeral",
511
+ "score": 0,
512
+ "flagged": false
513
+ },
514
+ {
515
+ "name": "decimal.js",
516
+ "score": 0,
517
+ "flagged": false
518
+ },
519
+ {
520
+ "name": "bignumber.js",
521
+ "score": 0,
522
+ "flagged": false
523
+ },
524
+ {
525
+ "name": "mathjs",
526
+ "score": 0,
527
+ "flagged": false
528
+ },
529
+ {
530
+ "name": "lodash-es",
531
+ "score": 0,
532
+ "flagged": false
533
+ }
534
+ ]
535
+ },
536
+ "adversarial": {
537
+ "detected": 35,
538
+ "total": 35,
539
+ "adr": 1,
540
+ "details": [
541
+ {
542
+ "name": "ci-trigger-exfil",
543
+ "score": 38,
544
+ "threshold": 35,
545
+ "detected": true
546
+ },
547
+ {
548
+ "name": "delayed-exfil",
549
+ "score": 35,
550
+ "threshold": 30,
551
+ "detected": true
552
+ },
553
+ {
554
+ "name": "docker-aware",
555
+ "score": 35,
556
+ "threshold": 35,
557
+ "detected": true
558
+ },
559
+ {
560
+ "name": "staged-fetch",
561
+ "score": 35,
562
+ "threshold": 35,
563
+ "detected": true
564
+ },
565
+ {
566
+ "name": "dns-chunk-exfil",
567
+ "score": 35,
568
+ "threshold": 35,
569
+ "detected": true
570
+ },
571
+ {
572
+ "name": "string-concat-obfuscation",
573
+ "score": 35,
574
+ "threshold": 30,
575
+ "detected": true
576
+ },
577
+ {
578
+ "name": "postinstall-download",
579
+ "score": 33,
580
+ "threshold": 30,
581
+ "detected": true
582
+ },
583
+ {
584
+ "name": "dynamic-require",
585
+ "score": 78,
586
+ "threshold": 40,
587
+ "detected": true
588
+ },
589
+ {
590
+ "name": "iife-exfil",
591
+ "score": 58,
592
+ "threshold": 40,
593
+ "detected": true
594
+ },
595
+ {
596
+ "name": "conditional-chain",
597
+ "score": 38,
598
+ "threshold": 30,
599
+ "detected": true
600
+ },
601
+ {
602
+ "name": "template-literal-obfuscation",
603
+ "score": 63,
604
+ "threshold": 30,
605
+ "detected": true
606
+ },
607
+ {
608
+ "name": "proxy-env-intercept",
609
+ "score": 53,
610
+ "threshold": 40,
611
+ "detected": true
612
+ },
613
+ {
614
+ "name": "nested-payload",
615
+ "score": 38,
616
+ "threshold": 30,
617
+ "detected": true
618
+ },
619
+ {
620
+ "name": "dynamic-import",
621
+ "score": 58,
622
+ "threshold": 30,
623
+ "detected": true
624
+ },
625
+ {
626
+ "name": "websocket-exfil",
627
+ "score": 38,
628
+ "threshold": 30,
629
+ "detected": true
630
+ },
631
+ {
632
+ "name": "bun-runtime-evasion",
633
+ "score": 48,
634
+ "threshold": 30,
635
+ "detected": true
636
+ },
637
+ {
638
+ "name": "preinstall-exec",
639
+ "score": 38,
640
+ "threshold": 35,
641
+ "detected": true
642
+ },
643
+ {
644
+ "name": "remote-dynamic-dependency",
645
+ "score": 35,
646
+ "threshold": 35,
647
+ "detected": true
648
+ },
649
+ {
650
+ "name": "github-exfil",
651
+ "score": 68,
652
+ "threshold": 30,
653
+ "detected": true
654
+ },
655
+ {
656
+ "name": "detached-background",
657
+ "score": 48,
658
+ "threshold": 35,
659
+ "detected": true
660
+ },
661
+ {
662
+ "name": "ai-agent-weaponization",
663
+ "score": 100,
664
+ "threshold": 35,
665
+ "detected": true
666
+ },
667
+ {
668
+ "name": "ai-config-injection",
669
+ "score": 100,
670
+ "threshold": 30,
671
+ "detected": true
672
+ },
673
+ {
674
+ "name": "rdd-zero-deps",
675
+ "score": 41,
676
+ "threshold": 35,
677
+ "detected": true
678
+ },
679
+ {
680
+ "name": "discord-webhook-exfil",
681
+ "score": 44,
682
+ "threshold": 30,
683
+ "detected": true
684
+ },
685
+ {
686
+ "name": "preinstall-background-fork",
687
+ "score": 58,
688
+ "threshold": 35,
689
+ "detected": true
690
+ },
691
+ {
692
+ "name": "silent-error-swallow",
693
+ "score": 35,
694
+ "threshold": 25,
695
+ "detected": true
696
+ },
697
+ {
698
+ "name": "double-base64-exfil",
699
+ "score": 38,
700
+ "threshold": 30,
701
+ "detected": true
702
+ },
703
+ {
704
+ "name": "crypto-wallet-harvest",
705
+ "score": 25,
706
+ "threshold": 25,
707
+ "detected": true
708
+ },
709
+ {
710
+ "name": "self-hosted-runner-backdoor",
711
+ "score": 53,
712
+ "threshold": 20,
713
+ "detected": true
714
+ },
715
+ {
716
+ "name": "dead-mans-switch",
717
+ "score": 68,
718
+ "threshold": 30,
719
+ "detected": true
720
+ },
721
+ {
722
+ "name": "fake-captcha-fingerprint",
723
+ "score": 28,
724
+ "threshold": 20,
725
+ "detected": true
726
+ },
727
+ {
728
+ "name": "pyinstaller-dropper",
729
+ "score": 53,
730
+ "threshold": 35,
731
+ "detected": true
732
+ },
733
+ {
734
+ "name": "gh-cli-token-steal",
735
+ "score": 50,
736
+ "threshold": 30,
737
+ "detected": true
738
+ },
739
+ {
740
+ "name": "triple-base64-github-push",
741
+ "score": 38,
742
+ "threshold": 30,
743
+ "detected": true
744
+ },
745
+ {
746
+ "name": "browser-api-hook",
747
+ "score": 20,
748
+ "threshold": 20,
749
+ "detected": true
750
+ }
751
+ ]
752
+ }
753
+ }