muaddib-scanner 1.0.8 → 1.0.10
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.
- package/.muaddib-cache/iocs.json +355 -0
- package/README.fr.md +310 -0
- package/README.md +118 -93
- package/bin/muaddib.js +33 -26
- package/data/iocs.json +28 -0
- package/package.json +3 -3
- package/rapport.html +159 -0
- package/src/index.js +73 -15
- package/src/ioc/scraper.js +91 -50
- package/src/rules/index.js +40 -1
- package/src/scanner/typosquat.js +52 -118
- package/.github/workflows/scan.yml +0 -33
- package/docs/threat-model.md +0 -116
- package/test/samples/malicious.js +0 -20
- package/tests/run-tests.js +0 -389
- package/tests/samples/ast/malicious.js +0 -20
- package/tests/samples/clean/safe.js +0 -14
- package/tests/samples/dataflow/exfiltration.js +0 -20
- package/tests/samples/edge/empty/empty.js +0 -0
- package/tests/samples/edge/invalid-syntax/broken.js +0 -5
- package/tests/samples/edge/large-file/large.js +0 -6
- package/tests/samples/edge/non-js/readme.txt +0 -3
- package/tests/samples/markers/shai-hulud.js +0 -10
- package/tests/samples/obfuscation/obfuscated.js +0 -1
- package/tests/samples/package/package.json +0 -9
- package/tests/samples/shell/malicious.sh +0 -13
- package/tests/samples/typosquat/package.json +0 -11
- package/vscode-extension/.vscode/launch.json +0 -13
- package/vscode-extension/.vscodeignore +0 -0
- package/vscode-extension/LICENSE +0 -21
- package/vscode-extension/README.md +0 -0
- package/vscode-extension/extension.js +0 -271
- package/vscode-extension/icon.png +0 -0
- package/vscode-extension/muaddib-vscode-1.0.0.vsix +0 -0
- package/vscode-extension/package.json +0 -64
- package/vscode-extension/vscode-extension/README.md +0 -44
- package/vscode-extension/vscode-extension/package.json +0 -64
package/README.md
CHANGED
|
@@ -5,57 +5,63 @@
|
|
|
5
5
|
<h1 align="center">MUAD'DIB</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<strong>Supply-chain threat detection
|
|
8
|
+
<strong>Supply-chain threat detection and response for npm</strong>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
12
|
<img src="https://img.shields.io/npm/v/muaddib-scanner" alt="npm version">
|
|
13
|
-
<img src="https://img.shields.io/npm/dt/muaddib-scanner" alt="npm downloads">
|
|
14
13
|
<img src="https://img.shields.io/badge/license-MIT-green" alt="License">
|
|
15
14
|
<img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node">
|
|
15
|
+
<img src="https://img.shields.io/badge/IOCs-180%2B-red" alt="IOCs">
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
<p align="center">
|
|
19
19
|
<a href="#installation">Installation</a> |
|
|
20
|
-
<a href="#
|
|
20
|
+
<a href="#usage">Usage</a> |
|
|
21
21
|
<a href="#features">Features</a> |
|
|
22
22
|
<a href="#vs-code">VS Code</a> |
|
|
23
|
-
<a href="#
|
|
23
|
+
<a href="#ci-cd">CI/CD</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<a href="README.fr.md">Version francaise</a>
|
|
24
28
|
</p>
|
|
25
29
|
|
|
26
30
|
---
|
|
27
31
|
|
|
28
|
-
##
|
|
32
|
+
## Why MUAD'DIB?
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
npm supply-chain attacks are exploding. Shai-Hulud compromised 25K+ repos in 2025. Existing tools detect threats but don't help you respond.
|
|
31
35
|
|
|
32
|
-
MUAD'DIB
|
|
36
|
+
MUAD'DIB detects AND guides your response.
|
|
33
37
|
|
|
34
|
-
| Feature | MUAD'DIB | Socket | Snyk |
|
|
35
|
-
|
|
36
|
-
| Detection
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
| Detection
|
|
40
|
-
| Playbooks
|
|
41
|
-
| Score
|
|
42
|
-
| SARIF / GitHub Security |
|
|
43
|
-
| MITRE ATT&CK
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| Mode
|
|
47
|
-
| 100% Open Source |
|
|
38
|
+
| Feature | MUAD'DIB | Socket | Snyk | Opengrep |
|
|
39
|
+
|---------|----------|--------|------|----------|
|
|
40
|
+
| IOC Detection | Yes | Yes | Yes | No |
|
|
41
|
+
| AST Analysis | Yes | Yes | No | Yes |
|
|
42
|
+
| Dataflow Analysis | Yes | No | No | No |
|
|
43
|
+
| Typosquatting Detection | Yes | Yes | No | No |
|
|
44
|
+
| Response Playbooks | Yes | No | No | No |
|
|
45
|
+
| Risk Score | Yes | Yes | Yes | No |
|
|
46
|
+
| SARIF / GitHub Security | Yes | Yes | Yes | Yes |
|
|
47
|
+
| MITRE ATT&CK Mapping | Yes | No | No | No |
|
|
48
|
+
| Discord/Slack Webhooks | Yes | No | No | No |
|
|
49
|
+
| VS Code Extension | Yes | Yes | Yes | No |
|
|
50
|
+
| Daemon Mode | Yes | No | No | No |
|
|
51
|
+
| 100% Open Source | Yes | No | No | Yes |
|
|
48
52
|
|
|
49
53
|
---
|
|
50
54
|
|
|
51
55
|
## Installation
|
|
52
56
|
|
|
53
|
-
### npm (
|
|
57
|
+
### npm (recommended)
|
|
58
|
+
|
|
54
59
|
```bash
|
|
55
60
|
npm install -g muaddib-scanner
|
|
56
61
|
```
|
|
57
62
|
|
|
58
|
-
###
|
|
63
|
+
### From source
|
|
64
|
+
|
|
59
65
|
```bash
|
|
60
66
|
git clone https://github.com/DNSZLSK/muad-dib.git
|
|
61
67
|
cd muad-dib
|
|
@@ -64,111 +70,130 @@ npm install
|
|
|
64
70
|
|
|
65
71
|
---
|
|
66
72
|
|
|
67
|
-
##
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
### Basic scan
|
|
68
76
|
|
|
69
|
-
### Scan basique
|
|
70
77
|
```bash
|
|
71
78
|
muaddib scan .
|
|
72
|
-
muaddib scan /
|
|
79
|
+
muaddib scan /path/to/project
|
|
73
80
|
```
|
|
74
81
|
|
|
75
|
-
###
|
|
82
|
+
### Risk score
|
|
83
|
+
|
|
84
|
+
Each scan displays a 0-100 risk score:
|
|
76
85
|
|
|
77
|
-
Chaque scan affiche un score de risque 0-100 :
|
|
78
86
|
```
|
|
79
87
|
[SCORE] 58/100 [███████████░░░░░░░░░] HIGH
|
|
80
88
|
```
|
|
81
89
|
|
|
82
|
-
###
|
|
90
|
+
### Explain mode (full details)
|
|
91
|
+
|
|
83
92
|
```bash
|
|
84
93
|
muaddib scan . --explain
|
|
85
94
|
```
|
|
86
95
|
|
|
87
|
-
|
|
96
|
+
Shows for each detection:
|
|
88
97
|
- Rule ID
|
|
89
98
|
- MITRE ATT&CK technique
|
|
90
99
|
- References (articles, CVEs)
|
|
91
|
-
-
|
|
100
|
+
- Response playbook
|
|
92
101
|
|
|
93
102
|
### Export
|
|
103
|
+
|
|
94
104
|
```bash
|
|
95
105
|
muaddib scan . --json > results.json # JSON
|
|
96
|
-
muaddib scan . --html
|
|
106
|
+
muaddib scan . --html report.html # HTML
|
|
97
107
|
muaddib scan . --sarif results.sarif # SARIF (GitHub Security)
|
|
98
108
|
```
|
|
99
109
|
|
|
100
|
-
###
|
|
110
|
+
### Severity threshold
|
|
111
|
+
|
|
101
112
|
```bash
|
|
102
|
-
muaddib scan . --fail-on critical # Fail
|
|
103
|
-
muaddib scan . --fail-on high # Fail
|
|
104
|
-
muaddib scan . --fail-on medium # Fail
|
|
113
|
+
muaddib scan . --fail-on critical # Fail only on CRITICAL
|
|
114
|
+
muaddib scan . --fail-on high # Fail on HIGH and CRITICAL (default)
|
|
115
|
+
muaddib scan . --fail-on medium # Fail on MEDIUM, HIGH, CRITICAL
|
|
105
116
|
```
|
|
106
117
|
|
|
107
|
-
###
|
|
118
|
+
### Discord/Slack webhook
|
|
119
|
+
|
|
108
120
|
```bash
|
|
109
121
|
muaddib scan . --webhook "https://discord.com/api/webhooks/..."
|
|
110
122
|
```
|
|
111
123
|
|
|
112
|
-
|
|
124
|
+
Sends an alert with score and threats to Discord or Slack.
|
|
125
|
+
|
|
126
|
+
### Real-time monitoring
|
|
113
127
|
|
|
114
|
-
### Surveillance temps reel
|
|
115
128
|
```bash
|
|
116
129
|
muaddib watch .
|
|
117
130
|
```
|
|
118
131
|
|
|
119
|
-
###
|
|
132
|
+
### Daemon mode
|
|
133
|
+
|
|
120
134
|
```bash
|
|
121
135
|
muaddib daemon
|
|
122
136
|
muaddib daemon --webhook "https://discord.com/api/webhooks/..."
|
|
123
137
|
```
|
|
124
138
|
|
|
125
|
-
|
|
139
|
+
Automatically monitors all `npm install` commands and scans new packages.
|
|
140
|
+
|
|
141
|
+
### Update IOCs
|
|
126
142
|
|
|
127
|
-
### Mise a jour des IOCs
|
|
128
143
|
```bash
|
|
129
144
|
muaddib update
|
|
130
145
|
```
|
|
131
146
|
|
|
147
|
+
### Scrape new IOCs
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
muaddib scrape
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Fetches latest malicious packages from GitHub Advisories, OSV, and other sources.
|
|
154
|
+
|
|
132
155
|
---
|
|
133
156
|
|
|
134
157
|
## Features
|
|
135
158
|
|
|
136
|
-
###
|
|
159
|
+
### Typosquatting detection
|
|
160
|
+
|
|
161
|
+
MUAD'DIB detects packages with names similar to popular packages:
|
|
137
162
|
|
|
138
|
-
MUAD'DIB detecte les packages dont le nom ressemble a un package populaire :
|
|
139
163
|
```
|
|
140
|
-
[HIGH] Package "lodahs"
|
|
164
|
+
[HIGH] Package "lodahs" looks like "lodash" (swapped_chars). Possible typosquatting.
|
|
141
165
|
```
|
|
142
166
|
|
|
143
|
-
###
|
|
167
|
+
### Dataflow analysis
|
|
168
|
+
|
|
169
|
+
Detects when code reads credentials AND sends them over the network:
|
|
144
170
|
|
|
145
|
-
Detecte quand du code lit des credentials ET les envoie sur le reseau :
|
|
146
171
|
```
|
|
147
|
-
[CRITICAL]
|
|
172
|
+
[CRITICAL] Suspicious flow: credential read (readFileSync, GITHUB_TOKEN) + network send (fetch)
|
|
148
173
|
```
|
|
149
174
|
|
|
150
|
-
###
|
|
175
|
+
### Detected attacks
|
|
151
176
|
|
|
152
|
-
|
|
|
177
|
+
| Campaign | Packages | Status |
|
|
153
178
|
|----------|----------|--------|
|
|
154
|
-
| Shai-Hulud v1 | @ctrl/tinycolor, ng2-file-upload |
|
|
155
|
-
| Shai-Hulud v2 | @asyncapi/specs, posthog-node, kill-port |
|
|
156
|
-
| Shai-Hulud v3 | @vietmoney/react-big-calendar |
|
|
157
|
-
| event-stream (2018) | flatmap-stream, event-stream |
|
|
158
|
-
| eslint-scope (2018) | eslint-scope |
|
|
159
|
-
| Protestware | node-ipc, colors, faker |
|
|
160
|
-
| Typosquats | crossenv, mongose, babelcli |
|
|
179
|
+
| Shai-Hulud v1 | @ctrl/tinycolor, ng2-file-upload | Detected |
|
|
180
|
+
| Shai-Hulud v2 | @asyncapi/specs, posthog-node, kill-port | Detected |
|
|
181
|
+
| Shai-Hulud v3 | @vietmoney/react-big-calendar | Detected |
|
|
182
|
+
| event-stream (2018) | flatmap-stream, event-stream | Detected |
|
|
183
|
+
| eslint-scope (2018) | eslint-scope | Detected |
|
|
184
|
+
| Protestware | node-ipc, colors, faker | Detected |
|
|
185
|
+
| Typosquats | crossenv, mongose, babelcli | Detected |
|
|
161
186
|
|
|
162
|
-
###
|
|
187
|
+
### Detected techniques
|
|
163
188
|
|
|
164
189
|
| Technique | MITRE | Detection |
|
|
165
190
|
|-----------|-------|-----------|
|
|
166
|
-
|
|
|
167
|
-
|
|
|
168
|
-
|
|
|
191
|
+
| Credential theft (.npmrc, .ssh) | T1552.001 | AST |
|
|
192
|
+
| Env var exfiltration | T1552.001 | AST |
|
|
193
|
+
| Remote code execution | T1105 | Pattern |
|
|
169
194
|
| Reverse shell | T1059.004 | Pattern |
|
|
170
195
|
| Dead man's switch | T1485 | Pattern |
|
|
171
|
-
|
|
|
196
|
+
| Obfuscated code | T1027 | Heuristics |
|
|
172
197
|
| Typosquatting | T1195.002 | Levenshtein |
|
|
173
198
|
| Supply chain compromise | T1195.002 | IOC matching |
|
|
174
199
|
|
|
@@ -176,32 +201,33 @@ Detecte quand du code lit des credentials ET les envoie sur le reseau :
|
|
|
176
201
|
|
|
177
202
|
## VS Code
|
|
178
203
|
|
|
179
|
-
|
|
204
|
+
The VS Code extension automatically scans your npm projects.
|
|
180
205
|
|
|
181
206
|
### Installation
|
|
182
207
|
|
|
183
|
-
|
|
208
|
+
Search "MUAD'DIB" in VS Code Extensions, or:
|
|
184
209
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
210
|
+
```bash
|
|
211
|
+
code --install-extension dnszlsk.muaddib-vscode
|
|
212
|
+
```
|
|
188
213
|
|
|
189
|
-
###
|
|
214
|
+
### Commands
|
|
190
215
|
|
|
191
|
-
- `MUAD'DIB: Scan Project` -
|
|
192
|
-
- `MUAD'DIB: Scan Current File` -
|
|
216
|
+
- `MUAD'DIB: Scan Project` - Scan entire project
|
|
217
|
+
- `MUAD'DIB: Scan Current File` - Scan current file
|
|
193
218
|
|
|
194
|
-
###
|
|
219
|
+
### Settings
|
|
195
220
|
|
|
196
|
-
- `muaddib.autoScan` -
|
|
197
|
-
- `muaddib.webhookUrl` -
|
|
198
|
-
- `muaddib.failLevel` -
|
|
221
|
+
- `muaddib.autoScan` - Auto-scan on project open (default: true)
|
|
222
|
+
- `muaddib.webhookUrl` - Discord/Slack webhook URL
|
|
223
|
+
- `muaddib.failLevel` - Alert level (critical/high/medium/low)
|
|
199
224
|
|
|
200
225
|
---
|
|
201
226
|
|
|
202
|
-
##
|
|
227
|
+
## CI/CD
|
|
203
228
|
|
|
204
229
|
### GitHub Actions
|
|
230
|
+
|
|
205
231
|
```yaml
|
|
206
232
|
name: Security Scan
|
|
207
233
|
|
|
@@ -225,20 +251,12 @@ jobs:
|
|
|
225
251
|
sarif_file: results.sarif
|
|
226
252
|
```
|
|
227
253
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Discord
|
|
233
|
-
|
|
234
|
-
Rejoignez le serveur Discord pour :
|
|
235
|
-
- Recevoir les alertes de scan
|
|
236
|
-
- Partager des IOCs
|
|
237
|
-
- Contribuer au projet
|
|
254
|
+
Alerts appear in Security > Code scanning alerts.
|
|
238
255
|
|
|
239
256
|
---
|
|
240
257
|
|
|
241
258
|
## Architecture
|
|
259
|
+
|
|
242
260
|
```
|
|
243
261
|
MUAD'DIB Scanner
|
|
244
262
|
|
|
|
@@ -259,11 +277,12 @@ Output (CLI, JSON, HTML, SARIF, Webhook)
|
|
|
259
277
|
|
|
260
278
|
---
|
|
261
279
|
|
|
262
|
-
##
|
|
280
|
+
## Contributing
|
|
263
281
|
|
|
264
|
-
###
|
|
282
|
+
### Add IOCs
|
|
283
|
+
|
|
284
|
+
Edit YAML files in `iocs/`:
|
|
265
285
|
|
|
266
|
-
Editez les fichiers YAML dans `iocs/` :
|
|
267
286
|
```yaml
|
|
268
287
|
- id: NEW-MALWARE-001
|
|
269
288
|
name: "malicious-package"
|
|
@@ -271,13 +290,14 @@ Editez les fichiers YAML dans `iocs/` :
|
|
|
271
290
|
severity: critical
|
|
272
291
|
confidence: high
|
|
273
292
|
source: community
|
|
274
|
-
description: "
|
|
293
|
+
description: "Threat description"
|
|
275
294
|
references:
|
|
276
295
|
- https://example.com/article
|
|
277
296
|
mitre: T1195.002
|
|
278
297
|
```
|
|
279
298
|
|
|
280
|
-
###
|
|
299
|
+
### Development
|
|
300
|
+
|
|
281
301
|
```bash
|
|
282
302
|
git clone https://github.com/DNSZLSK/muad-dib.git
|
|
283
303
|
cd muad-dib
|
|
@@ -285,16 +305,21 @@ npm install
|
|
|
285
305
|
npm test
|
|
286
306
|
```
|
|
287
307
|
|
|
308
|
+
## Community
|
|
309
|
+
|
|
310
|
+
- Discord: https://discord.gg/y8zxSmue
|
|
311
|
+
- Issues: https://github.com/DNSZLSK/muad-dib/issues
|
|
312
|
+
|
|
288
313
|
---
|
|
289
314
|
|
|
290
315
|
## Documentation
|
|
291
316
|
|
|
292
|
-
- [Threat Model](docs/threat-model.md) -
|
|
293
|
-
- [IOCs YAML](iocs/) -
|
|
317
|
+
- [Threat Model](docs/threat-model.md) - What MUAD'DIB detects and doesn't detect
|
|
318
|
+
- [IOCs YAML](iocs/) - Threat database
|
|
294
319
|
|
|
295
320
|
---
|
|
296
321
|
|
|
297
|
-
##
|
|
322
|
+
## License
|
|
298
323
|
|
|
299
324
|
MIT
|
|
300
325
|
|
package/bin/muaddib.js
CHANGED
|
@@ -17,6 +17,7 @@ let sarifOutput = null;
|
|
|
17
17
|
let explainMode = false;
|
|
18
18
|
let failLevel = 'high';
|
|
19
19
|
let webhookUrl = null;
|
|
20
|
+
let paranoidMode = false;
|
|
20
21
|
|
|
21
22
|
for (let i = 0; i < options.length; i++) {
|
|
22
23
|
if (options[i] === '--json') {
|
|
@@ -35,6 +36,8 @@ for (let i = 0; i < options.length; i++) {
|
|
|
35
36
|
} else if (options[i] === '--webhook') {
|
|
36
37
|
webhookUrl = options[i + 1];
|
|
37
38
|
i++;
|
|
39
|
+
} else if (options[i] === '--paranoid') {
|
|
40
|
+
paranoidMode = true;
|
|
38
41
|
} else if (!options[i].startsWith('-')) {
|
|
39
42
|
target = options[i];
|
|
40
43
|
}
|
|
@@ -42,24 +45,25 @@ for (let i = 0; i < options.length; i++) {
|
|
|
42
45
|
|
|
43
46
|
if (!command) {
|
|
44
47
|
console.log(`
|
|
45
|
-
MUAD'DIB -
|
|
48
|
+
MUAD'DIB - npm Supply Chain Threat Hunter
|
|
46
49
|
|
|
47
50
|
Usage:
|
|
48
|
-
muaddib scan [path] [options]
|
|
49
|
-
muaddib watch [path]
|
|
50
|
-
muaddib
|
|
51
|
-
muaddib
|
|
51
|
+
muaddib scan [path] [options] Scan a project
|
|
52
|
+
muaddib watch [path] Watch a project in real-time
|
|
53
|
+
muaddib daemon [options] Start background daemon
|
|
54
|
+
muaddib update Update IOCs
|
|
55
|
+
muaddib scrape Scrape new IOCs from advisories
|
|
56
|
+
muaddib help Show help
|
|
52
57
|
|
|
53
58
|
Options:
|
|
54
|
-
--json
|
|
55
|
-
--html [file]
|
|
56
|
-
--sarif [file]
|
|
57
|
-
--explain
|
|
58
|
-
--fail-on [level]
|
|
59
|
-
|
|
60
|
-
--webhook [url]
|
|
61
|
-
|
|
62
|
-
muaddib scrape Scrape les advisories pour nouveaux IOCs
|
|
59
|
+
--json Output as JSON
|
|
60
|
+
--html [file] Generate HTML report
|
|
61
|
+
--sarif [file] Generate SARIF report (GitHub Security)
|
|
62
|
+
--explain Show detailed explanations
|
|
63
|
+
--fail-on [level] Severity level for exit code (critical|high|medium|low)
|
|
64
|
+
Default: high (fail on HIGH and CRITICAL)
|
|
65
|
+
--webhook [url] Send Discord/Slack alert
|
|
66
|
+
--paranoid Enable ultra-strict rules (more false positives)
|
|
63
67
|
`);
|
|
64
68
|
process.exit(0);
|
|
65
69
|
}
|
|
@@ -71,7 +75,8 @@ if (command === 'scan') {
|
|
|
71
75
|
sarif: sarifOutput,
|
|
72
76
|
explain: explainMode,
|
|
73
77
|
failLevel: failLevel,
|
|
74
|
-
webhook: webhookUrl
|
|
78
|
+
webhook: webhookUrl,
|
|
79
|
+
paranoid: paranoidMode
|
|
75
80
|
}).then(exitCode => {
|
|
76
81
|
process.exit(exitCode);
|
|
77
82
|
});
|
|
@@ -81,24 +86,26 @@ if (command === 'scan') {
|
|
|
81
86
|
updateIOCs().then(() => {
|
|
82
87
|
process.exit(0);
|
|
83
88
|
}).catch(err => {
|
|
84
|
-
console.error('[
|
|
89
|
+
console.error('[ERROR]', err.message);
|
|
85
90
|
process.exit(1);
|
|
86
91
|
});
|
|
87
|
-
} else if (command === 'help') {
|
|
88
|
-
console.log('muaddib scan [path] [--json] [--html file] [--sarif file] [--explain] [--fail-on level] [--webhook url]');
|
|
89
|
-
console.log('muaddib watch [path] - Surveille un projet en temps reel');
|
|
90
|
-
console.log('muaddib update - Met a jour les IOCs');
|
|
91
|
-
} else if (command === 'daemon') {
|
|
92
|
-
startDaemon({ webhook: webhookUrl });
|
|
93
92
|
} else if (command === 'scrape') {
|
|
94
93
|
runScraper().then(result => {
|
|
95
|
-
console.log(`[OK] ${result.added}
|
|
94
|
+
console.log(`[OK] ${result.added} new IOCs added (total: ${result.total})`);
|
|
96
95
|
process.exit(0);
|
|
97
96
|
}).catch(err => {
|
|
98
|
-
console.error('[
|
|
97
|
+
console.error('[ERROR]', err.message);
|
|
99
98
|
process.exit(1);
|
|
100
99
|
});
|
|
100
|
+
} else if (command === 'daemon') {
|
|
101
|
+
startDaemon({ webhook: webhookUrl });
|
|
102
|
+
} else if (command === 'help') {
|
|
103
|
+
console.log('muaddib scan [path] [--json] [--html file] [--sarif file] [--explain] [--fail-on level] [--webhook url] [--paranoid]');
|
|
104
|
+
console.log('muaddib watch [path] - Watch a project in real-time');
|
|
105
|
+
console.log('muaddib daemon [--webhook url] - Start background daemon');
|
|
106
|
+
console.log('muaddib update - Update IOCs');
|
|
107
|
+
console.log('muaddib scrape - Scrape new IOCs');
|
|
101
108
|
} else {
|
|
102
|
-
console.log(`
|
|
109
|
+
console.log(`Unknown command: ${command}`);
|
|
103
110
|
process.exit(1);
|
|
104
|
-
}
|
|
111
|
+
}
|
package/data/iocs.json
CHANGED
|
@@ -2142,6 +2142,34 @@
|
|
|
2142
2142
|
"description": "Potential typosquat of \"socket.io\"",
|
|
2143
2143
|
"references": [],
|
|
2144
2144
|
"mitre": "T1195.002"
|
|
2145
|
+
},
|
|
2146
|
+
{
|
|
2147
|
+
"id": "GHSA-gvq6-hvvp-h34h",
|
|
2148
|
+
"name": "@adonisjs/bodyparser",
|
|
2149
|
+
"version": "< 10.1.2",
|
|
2150
|
+
"severity": "critical",
|
|
2151
|
+
"confidence": "high",
|
|
2152
|
+
"source": "github-advisory",
|
|
2153
|
+
"description": "AdonisJS Path Traversal in Multipart File Handling",
|
|
2154
|
+
"references": [
|
|
2155
|
+
"https://github.com/advisories/GHSA-gvq6-hvvp-h34h"
|
|
2156
|
+
],
|
|
2157
|
+
"mitre": "T1195.002",
|
|
2158
|
+
"cve": "CVE-2026-21440"
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
"id": "GHSA-fq56-hvg6-wvm5",
|
|
2162
|
+
"name": "signalk-server",
|
|
2163
|
+
"version": "< 2.19.0",
|
|
2164
|
+
"severity": "critical",
|
|
2165
|
+
"confidence": "high",
|
|
2166
|
+
"source": "github-advisory",
|
|
2167
|
+
"description": "Signal K Server vulnerable to JWT Token Theft via WebSocket Enumeration and Unauthenticated Polling",
|
|
2168
|
+
"references": [
|
|
2169
|
+
"https://github.com/advisories/GHSA-fq56-hvg6-wvm5"
|
|
2170
|
+
],
|
|
2171
|
+
"mitre": "T1195.002",
|
|
2172
|
+
"cve": "CVE-2025-68620"
|
|
2145
2173
|
}
|
|
2146
2174
|
],
|
|
2147
2175
|
"hashes": [
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "muaddib-scanner",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Supply-chain threat detection & response for npm",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"muaddib": "
|
|
7
|
+
"muaddib": "bin/muaddib.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"test": "node tests/run-tests.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"license": "MIT",
|
|
27
27
|
"repository": {
|
|
28
28
|
"type": "git",
|
|
29
|
-
"url": "https://github.com/DNSZLSK/muad-dib.git"
|
|
29
|
+
"url": "git+https://github.com/DNSZLSK/muad-dib.git"
|
|
30
30
|
},
|
|
31
31
|
"homepage": "https://github.com/DNSZLSK/muad-dib",
|
|
32
32
|
"bugs": {
|