muaddib-scanner 1.2.9 → 1.3.0

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 (84) hide show
  1. package/bin/muaddib.js +15 -0
  2. package/package.json +2 -2
  3. package/src/ioc/data/iocs.json +1 -1
  4. package/.claude/settings.local.json +0 -11
  5. package/coverage/lcov-report/base.css +0 -224
  6. package/coverage/lcov-report/bin/muaddib.js.html +0 -1222
  7. package/coverage/lcov-report/block-navigation.js +0 -87
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/prettify.css +0 -1
  10. package/coverage/lcov-report/prettify.js +0 -2
  11. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  12. package/coverage/lcov-report/sorter.js +0 -210
  13. package/coverage/lcov-report/src/daemon.js.html +0 -502
  14. package/coverage/lcov-report/src/diff.js.html +0 -1324
  15. package/coverage/lcov-report/src/hooks-init.js.html +0 -787
  16. package/coverage/lcov-report/src/index.js.html +0 -934
  17. package/coverage/lcov-report/src/ioc/scraper.js.html +0 -2377
  18. package/coverage/lcov-report/src/ioc/updater.js.html +0 -781
  19. package/coverage/lcov-report/src/ioc/yaml-loader.js.html +0 -685
  20. package/coverage/lcov-report/src/report.js.html +0 -541
  21. package/coverage/lcov-report/src/response/playbooks.js.html +0 -436
  22. package/coverage/lcov-report/src/rules/index.js.html +0 -829
  23. package/coverage/lcov-report/src/safe-install.js.html +0 -862
  24. package/coverage/lcov-report/src/sandbox.js.html +0 -556
  25. package/coverage/lcov-report/src/sarif.js.html +0 -304
  26. package/coverage/lcov-report/src/scanner/ast.js.html +0 -556
  27. package/coverage/lcov-report/src/scanner/dataflow.js.html +0 -505
  28. package/coverage/lcov-report/src/scanner/dependencies.js.html +0 -748
  29. package/coverage/lcov-report/src/scanner/github-actions.js.html +0 -220
  30. package/coverage/lcov-report/src/scanner/hash.js.html +0 -634
  31. package/coverage/lcov-report/src/scanner/obfuscation.js.html +0 -292
  32. package/coverage/lcov-report/src/scanner/package.js.html +0 -352
  33. package/coverage/lcov-report/src/scanner/shell.js.html +0 -202
  34. package/coverage/lcov-report/src/scanner/typosquat.js.html +0 -775
  35. package/coverage/lcov-report/src/shared/constants.js.html +0 -376
  36. package/coverage/lcov-report/src/utils.js.html +0 -412
  37. package/coverage/lcov-report/src/watch.js.html +0 -193
  38. package/coverage/lcov-report/src/webhook.js.html +0 -853
  39. package/coverage/lcov.info +0 -6221
  40. package/coverage/tmp/coverage-10348-1770561248113-0.json +0 -1
  41. package/coverage/tmp/coverage-10504-1770561262610-0.json +0 -1
  42. package/coverage/tmp/coverage-10532-1770561266403-0.json +0 -1
  43. package/coverage/tmp/coverage-10892-1770561267264-0.json +0 -1
  44. package/coverage/tmp/coverage-10948-1770561263854-0.json +0 -1
  45. package/coverage/tmp/coverage-11052-1770561259950-0.json +0 -1
  46. package/coverage/tmp/coverage-11116-1770561257164-0.json +0 -1
  47. package/coverage/tmp/coverage-11204-1770561273715-0.json +0 -1
  48. package/coverage/tmp/coverage-11308-1770561258278-0.json +0 -1
  49. package/coverage/tmp/coverage-11376-1770561253569-0.json +0 -1
  50. package/coverage/tmp/coverage-11416-1770561250071-0.json +0 -1
  51. package/coverage/tmp/coverage-11476-1770561246244-0.json +0 -1
  52. package/coverage/tmp/coverage-11716-1770561246876-0.json +0 -1
  53. package/coverage/tmp/coverage-11764-1770561273668-0.json +0 -1
  54. package/coverage/tmp/coverage-11872-1770561268435-0.json +0 -1
  55. package/coverage/tmp/coverage-11956-1770561259448-0.json +0 -1
  56. package/coverage/tmp/coverage-12168-1770561265781-0.json +0 -1
  57. package/coverage/tmp/coverage-12172-1770561254167-0.json +0 -1
  58. package/coverage/tmp/coverage-12204-1770561256602-0.json +0 -1
  59. package/coverage/tmp/coverage-12208-1770561261352-0.json +0 -1
  60. package/coverage/tmp/coverage-12284-1770561258839-0.json +0 -1
  61. package/coverage/tmp/coverage-1444-1770561251236-0.json +0 -1
  62. package/coverage/tmp/coverage-1720-1770561255480-0.json +0 -1
  63. package/coverage/tmp/coverage-2596-1770561247514-0.json +0 -1
  64. package/coverage/tmp/coverage-2736-1770561260566-0.json +0 -1
  65. package/coverage/tmp/coverage-352-1770561248701-0.json +0 -1
  66. package/coverage/tmp/coverage-4008-1770561267827-0.json +0 -1
  67. package/coverage/tmp/coverage-4388-1770561244944-0.json +0 -1
  68. package/coverage/tmp/coverage-4532-1770561251810-0.json +0 -1
  69. package/coverage/tmp/coverage-4880-1770561270427-0.json +0 -1
  70. package/coverage/tmp/coverage-548-1770561261916-0.json +0 -1
  71. package/coverage/tmp/coverage-6172-1770561249291-0.json +0 -1
  72. package/coverage/tmp/coverage-6296-1770561265134-0.json +0 -1
  73. package/coverage/tmp/coverage-6396-1770561252376-0.json +0 -1
  74. package/coverage/tmp/coverage-6752-1770561271119-0.json +0 -1
  75. package/coverage/tmp/coverage-6760-1770561273239-0.json +0 -1
  76. package/coverage/tmp/coverage-6900-1770561250649-0.json +0 -1
  77. package/coverage/tmp/coverage-7104-1770561253004-0.json +0 -1
  78. package/coverage/tmp/coverage-736-1770561269781-0.json +0 -1
  79. package/coverage/tmp/coverage-7476-1770561269006-0.json +0 -1
  80. package/coverage/tmp/coverage-7604-1770561256015-0.json +0 -1
  81. package/coverage/tmp/coverage-7672-1770561257710-0.json +0 -1
  82. package/coverage/tmp/coverage-7876-1770561263281-0.json +0 -1
  83. package/coverage/tmp/coverage-8008-1770561245608-0.json +0 -1
  84. package/coverage/tmp/coverage-9240-1770561254922-0.json +0 -1
package/bin/muaddib.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ const { execSync } = require('child_process');
2
3
  const { run } = require('../src/index.js');
3
4
  const { updateIOCs } = require('../src/ioc/updater.js');
4
5
  const { watch } = require('../src/watch.js');
@@ -47,6 +48,20 @@ for (let i = 0; i < options.length; i++) {
47
48
  }
48
49
  }
49
50
 
51
+ // Version check (non-blocking, skip for machine-readable output)
52
+ if (!jsonOutput && !sarifOutput) {
53
+ try {
54
+ const currentVersion = require('../package.json').version;
55
+ const latest = execSync('npm view muaddib-scanner version', { timeout: 5000 }).toString().trim();
56
+ if (latest !== currentVersion) {
57
+ console.log(`\n[UPDATE] New version available: ${currentVersion} -> ${latest}`);
58
+ console.log(` Run: npm install -g muaddib-scanner@latest\n`);
59
+ }
60
+ } catch {
61
+ // No network or npm unavailable, skip silently
62
+ }
63
+ }
64
+
50
65
  // Interactive menu
51
66
  async function interactiveMenu() {
52
67
  const { select, input, confirm } = await import('@inquirer/prompts');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "muaddib-scanner",
3
- "version": "1.2.9",
3
+ "version": "1.3.0",
4
4
  "description": "Supply-chain threat detection & response for npm",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -47,6 +47,6 @@
47
47
  "devDependencies": {
48
48
  "@eslint/js": "9.39.2",
49
49
  "eslint": "9.39.2",
50
- "globals": "17.2.0"
50
+ "globals": "17.3.0"
51
51
  }
52
52
  }
@@ -16004,7 +16004,7 @@
16004
16004
  "pigS3cr3ts.json"
16005
16005
  ],
16006
16006
  "files": [],
16007
- "updated": "2026-01-28T23:07:32.752Z",
16007
+ "updated": "2026-02-09T17:30:17.500Z",
16008
16008
  "sources": [
16009
16009
  "shai-hulud-detector",
16010
16010
  "datadog-consolidated",
@@ -1,11 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(cd:*)",
5
- "Bash(find:*)",
6
- "Bash(wc:*)",
7
- "Bash(npm test)",
8
- "Bash(node:*)"
9
- ]
10
- }
11
- }
@@ -1,224 +0,0 @@
1
- body, html {
2
- margin:0; padding: 0;
3
- height: 100%;
4
- }
5
- body {
6
- font-family: Helvetica Neue, Helvetica, Arial;
7
- font-size: 14px;
8
- color:#333;
9
- }
10
- .small { font-size: 12px; }
11
- *, *:after, *:before {
12
- -webkit-box-sizing:border-box;
13
- -moz-box-sizing:border-box;
14
- box-sizing:border-box;
15
- }
16
- h1 { font-size: 20px; margin: 0;}
17
- h2 { font-size: 14px; }
18
- pre {
19
- font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
20
- margin: 0;
21
- padding: 0;
22
- -moz-tab-size: 2;
23
- -o-tab-size: 2;
24
- tab-size: 2;
25
- }
26
- a { color:#0074D9; text-decoration:none; }
27
- a:hover { text-decoration:underline; }
28
- .strong { font-weight: bold; }
29
- .space-top1 { padding: 10px 0 0 0; }
30
- .pad2y { padding: 20px 0; }
31
- .pad1y { padding: 10px 0; }
32
- .pad2x { padding: 0 20px; }
33
- .pad2 { padding: 20px; }
34
- .pad1 { padding: 10px; }
35
- .space-left2 { padding-left:55px; }
36
- .space-right2 { padding-right:20px; }
37
- .center { text-align:center; }
38
- .clearfix { display:block; }
39
- .clearfix:after {
40
- content:'';
41
- display:block;
42
- height:0;
43
- clear:both;
44
- visibility:hidden;
45
- }
46
- .fl { float: left; }
47
- @media only screen and (max-width:640px) {
48
- .col3 { width:100%; max-width:100%; }
49
- .hide-mobile { display:none!important; }
50
- }
51
-
52
- .quiet {
53
- color: #7f7f7f;
54
- color: rgba(0,0,0,0.5);
55
- }
56
- .quiet a { opacity: 0.7; }
57
-
58
- .fraction {
59
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
60
- font-size: 10px;
61
- color: #555;
62
- background: #E8E8E8;
63
- padding: 4px 5px;
64
- border-radius: 3px;
65
- vertical-align: middle;
66
- }
67
-
68
- div.path a:link, div.path a:visited { color: #333; }
69
- table.coverage {
70
- border-collapse: collapse;
71
- margin: 10px 0 0 0;
72
- padding: 0;
73
- }
74
-
75
- table.coverage td {
76
- margin: 0;
77
- padding: 0;
78
- vertical-align: top;
79
- }
80
- table.coverage td.line-count {
81
- text-align: right;
82
- padding: 0 5px 0 20px;
83
- }
84
- table.coverage td.line-coverage {
85
- text-align: right;
86
- padding-right: 10px;
87
- min-width:20px;
88
- }
89
-
90
- table.coverage td span.cline-any {
91
- display: inline-block;
92
- padding: 0 5px;
93
- width: 100%;
94
- }
95
- .missing-if-branch {
96
- display: inline-block;
97
- margin-right: 5px;
98
- border-radius: 3px;
99
- position: relative;
100
- padding: 0 4px;
101
- background: #333;
102
- color: yellow;
103
- }
104
-
105
- .skip-if-branch {
106
- display: none;
107
- margin-right: 10px;
108
- position: relative;
109
- padding: 0 4px;
110
- background: #ccc;
111
- color: white;
112
- }
113
- .missing-if-branch .typ, .skip-if-branch .typ {
114
- color: inherit !important;
115
- }
116
- .coverage-summary {
117
- border-collapse: collapse;
118
- width: 100%;
119
- }
120
- .coverage-summary tr { border-bottom: 1px solid #bbb; }
121
- .keyline-all { border: 1px solid #ddd; }
122
- .coverage-summary td, .coverage-summary th { padding: 10px; }
123
- .coverage-summary tbody { border: 1px solid #bbb; }
124
- .coverage-summary td { border-right: 1px solid #bbb; }
125
- .coverage-summary td:last-child { border-right: none; }
126
- .coverage-summary th {
127
- text-align: left;
128
- font-weight: normal;
129
- white-space: nowrap;
130
- }
131
- .coverage-summary th.file { border-right: none !important; }
132
- .coverage-summary th.pct { }
133
- .coverage-summary th.pic,
134
- .coverage-summary th.abs,
135
- .coverage-summary td.pct,
136
- .coverage-summary td.abs { text-align: right; }
137
- .coverage-summary td.file { white-space: nowrap; }
138
- .coverage-summary td.pic { min-width: 120px !important; }
139
- .coverage-summary tfoot td { }
140
-
141
- .coverage-summary .sorter {
142
- height: 10px;
143
- width: 7px;
144
- display: inline-block;
145
- margin-left: 0.5em;
146
- background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
- }
148
- .coverage-summary .sorted .sorter {
149
- background-position: 0 -20px;
150
- }
151
- .coverage-summary .sorted-desc .sorter {
152
- background-position: 0 -10px;
153
- }
154
- .status-line { height: 10px; }
155
- /* yellow */
156
- .cbranch-no { background: yellow !important; color: #111; }
157
- /* dark red */
158
- .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
159
- .low .chart { border:1px solid #C21F39 }
160
- .highlighted,
161
- .highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
162
- background: #C21F39 !important;
163
- }
164
- /* medium red */
165
- .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
166
- /* light red */
167
- .low, .cline-no { background:#FCE1E5 }
168
- /* light green */
169
- .high, .cline-yes { background:rgb(230,245,208) }
170
- /* medium green */
171
- .cstat-yes { background:rgb(161,215,106) }
172
- /* dark green */
173
- .status-line.high, .high .cover-fill { background:rgb(77,146,33) }
174
- .high .chart { border:1px solid rgb(77,146,33) }
175
- /* dark yellow (gold) */
176
- .status-line.medium, .medium .cover-fill { background: #f9cd0b; }
177
- .medium .chart { border:1px solid #f9cd0b; }
178
- /* light yellow */
179
- .medium { background: #fff4c2; }
180
-
181
- .cstat-skip { background: #ddd; color: #111; }
182
- .fstat-skip { background: #ddd; color: #111 !important; }
183
- .cbranch-skip { background: #ddd !important; color: #111; }
184
-
185
- span.cline-neutral { background: #eaeaea; }
186
-
187
- .coverage-summary td.empty {
188
- opacity: .5;
189
- padding-top: 4px;
190
- padding-bottom: 4px;
191
- line-height: 1;
192
- color: #888;
193
- }
194
-
195
- .cover-fill, .cover-empty {
196
- display:inline-block;
197
- height: 12px;
198
- }
199
- .chart {
200
- line-height: 0;
201
- }
202
- .cover-empty {
203
- background: white;
204
- }
205
- .cover-full {
206
- border-right: none !important;
207
- }
208
- pre.prettyprint {
209
- border: none !important;
210
- padding: 0 !important;
211
- margin: 0 !important;
212
- }
213
- .com { color: #999 !important; }
214
- .ignore-none { color: #999; font-weight: normal; }
215
-
216
- .wrapper {
217
- min-height: 100%;
218
- height: auto !important;
219
- height: 100%;
220
- margin: 0 auto -48px;
221
- }
222
- .footer, .push {
223
- height: 48px;
224
- }