supply-chain-guard 2.0.0 → 3.1.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.
- package/README.md +91 -1
- package/dist/cli.js +111 -11
- package/dist/cli.js.map +1 -1
- package/dist/dependency-confusion.d.ts +1 -1
- package/dist/dependency-confusion.d.ts.map +1 -1
- package/dist/github-actions-scanner.d.ts +14 -0
- package/dist/github-actions-scanner.d.ts.map +1 -0
- package/dist/github-actions-scanner.js +420 -0
- package/dist/github-actions-scanner.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/patterns.d.ts +2 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +56 -1
- package/dist/patterns.js.map +1 -1
- package/dist/pypi-scanner.d.ts +13 -1
- package/dist/pypi-scanner.d.ts.map +1 -1
- package/dist/pypi-scanner.js +99 -0
- package/dist/pypi-scanner.js.map +1 -1
- package/dist/reporter.d.ts +2 -2
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +129 -1
- package/dist/reporter.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +31 -0
- package/dist/scanner.js.map +1 -1
- package/dist/solana-monitor.d.ts +28 -2
- package/dist/solana-monitor.d.ts.map +1 -1
- package/dist/solana-monitor.js +171 -0
- package/dist/solana-monitor.js.map +1 -1
- package/dist/types.d.ts +19 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vscode-scanner.d.ts +1 -1
- package/dist/vscode-scanner.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Actions Workflow Scanner
|
|
4
|
+
*
|
|
5
|
+
* Scans .github/workflows/*.yml files for CI/CD pipeline attack indicators
|
|
6
|
+
* including remote code execution, secrets exfiltration, compromised action
|
|
7
|
+
* references, unpinned versions, and encoded payloads.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.scanGitHubActionsWorkflows = scanGitHubActionsWorkflows;
|
|
44
|
+
const fs = __importStar(require("node:fs"));
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
/**
|
|
47
|
+
* Patterns for detecting dangerous content in GitHub Actions workflow files.
|
|
48
|
+
*/
|
|
49
|
+
const WORKFLOW_PATTERNS = [
|
|
50
|
+
// Remote content piped to shell execution
|
|
51
|
+
{
|
|
52
|
+
pattern: "curl\\s+[^|]*\\|\\s*(?:bash|sh|zsh|node|python|perl|ruby)",
|
|
53
|
+
description: "Remote content fetched with curl and piped to shell execution",
|
|
54
|
+
severity: "high",
|
|
55
|
+
rule: "GHA_CURL_PIPE_EXEC",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
pattern: "wget\\s+[^|]*\\|\\s*(?:bash|sh|zsh|node|python|perl|ruby)",
|
|
59
|
+
description: "Remote content fetched with wget and piped to shell execution",
|
|
60
|
+
severity: "high",
|
|
61
|
+
rule: "GHA_WGET_PIPE_EXEC",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
pattern: "curl\\s+.*-o\\s+\\S+.*&&.*(?:bash|sh|chmod\\s+\\+x)",
|
|
65
|
+
description: "Remote script downloaded and executed in workflow",
|
|
66
|
+
severity: "high",
|
|
67
|
+
rule: "GHA_CURL_DOWNLOAD_EXEC",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
pattern: "wget\\s+.*-O\\s+\\S+.*&&.*(?:bash|sh|chmod\\s+\\+x)",
|
|
71
|
+
description: "Remote script downloaded with wget and executed in workflow",
|
|
72
|
+
severity: "high",
|
|
73
|
+
rule: "GHA_WGET_DOWNLOAD_EXEC",
|
|
74
|
+
},
|
|
75
|
+
// Secrets exfiltration via network
|
|
76
|
+
{
|
|
77
|
+
pattern: "\\$\\{\\{\\s*secrets\\.[^}]+\\}\\}.*curl",
|
|
78
|
+
description: "Secret value passed to curl command (potential exfiltration)",
|
|
79
|
+
severity: "high",
|
|
80
|
+
rule: "GHA_SECRET_CURL",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
pattern: "curl.*\\$\\{\\{\\s*secrets\\.[^}]+\\}\\}",
|
|
84
|
+
description: "Secret value sent via curl request (potential exfiltration)",
|
|
85
|
+
severity: "high",
|
|
86
|
+
rule: "GHA_SECRET_CURL",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
pattern: "\\$\\{\\{\\s*secrets\\.[^}]+\\}\\}.*wget",
|
|
90
|
+
description: "Secret value passed to wget command (potential exfiltration)",
|
|
91
|
+
severity: "high",
|
|
92
|
+
rule: "GHA_SECRET_WGET",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
pattern: "wget.*\\$\\{\\{\\s*secrets\\.[^}]+\\}\\}",
|
|
96
|
+
description: "Secret value sent via wget request (potential exfiltration)",
|
|
97
|
+
severity: "high",
|
|
98
|
+
rule: "GHA_SECRET_WGET",
|
|
99
|
+
},
|
|
100
|
+
// Base64 encoded payloads
|
|
101
|
+
{
|
|
102
|
+
pattern: "echo\\s+[A-Za-z0-9+/=]{20,}\\s*\\|\\s*base64\\s+(?:-d|--decode)",
|
|
103
|
+
description: "Base64 encoded payload decoded and potentially executed in workflow",
|
|
104
|
+
severity: "high",
|
|
105
|
+
rule: "GHA_BASE64_PAYLOAD",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
pattern: "base64\\s+(?:-d|--decode)\\s*.*\\|\\s*(?:bash|sh|node|python)",
|
|
109
|
+
description: "Base64 decoded content piped to shell execution",
|
|
110
|
+
severity: "high",
|
|
111
|
+
rule: "GHA_BASE64_EXEC",
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
pattern: "\\batob\\s*\\(",
|
|
115
|
+
description: "JavaScript base64 decoding (atob) in workflow run block",
|
|
116
|
+
severity: "medium",
|
|
117
|
+
rule: "GHA_ATOB_USAGE",
|
|
118
|
+
},
|
|
119
|
+
// Environment variable exfiltration
|
|
120
|
+
{
|
|
121
|
+
pattern: "\\benv\\b.*\\bcurl\\b|\\bcurl\\b.*\\benv\\b",
|
|
122
|
+
description: "Environment variables referenced alongside curl (potential exfiltration)",
|
|
123
|
+
severity: "medium",
|
|
124
|
+
rule: "GHA_ENV_EXFIL",
|
|
125
|
+
},
|
|
126
|
+
// Suspicious shell patterns
|
|
127
|
+
{
|
|
128
|
+
pattern: "\\beval\\s*\\$\\(",
|
|
129
|
+
description: "eval with command substitution in workflow (dynamic code execution)",
|
|
130
|
+
severity: "high",
|
|
131
|
+
rule: "GHA_EVAL_SUBSHELL",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
pattern: "\\beval\\s+[\"']",
|
|
135
|
+
description: "eval of string content in workflow run block",
|
|
136
|
+
severity: "medium",
|
|
137
|
+
rule: "GHA_EVAL_STRING",
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
/** Well-known official or trusted GitHub Action owners. */
|
|
141
|
+
const TRUSTED_ACTION_OWNERS = new Set([
|
|
142
|
+
"actions",
|
|
143
|
+
"github",
|
|
144
|
+
"docker",
|
|
145
|
+
"azure",
|
|
146
|
+
"aws-actions",
|
|
147
|
+
"google-github-actions",
|
|
148
|
+
"hashicorp",
|
|
149
|
+
"gradle",
|
|
150
|
+
"ruby",
|
|
151
|
+
"peaceiris",
|
|
152
|
+
"codecov",
|
|
153
|
+
"softprops",
|
|
154
|
+
"peter-evans",
|
|
155
|
+
"JamesIves",
|
|
156
|
+
]);
|
|
157
|
+
/** Branch-like refs that indicate an unpinned action version. */
|
|
158
|
+
const UNPINNED_REF_PATTERN = /^(main|master|dev|develop|latest|HEAD|trunk)$/;
|
|
159
|
+
/** Pattern matching a full SHA commit hash (40 hex chars). */
|
|
160
|
+
const SHA_PATTERN = /^[0-9a-fA-F]{40}$/;
|
|
161
|
+
/**
|
|
162
|
+
* Scan a directory for GitHub Actions workflow files and return findings.
|
|
163
|
+
* Called from the main scanner during directory scans.
|
|
164
|
+
*/
|
|
165
|
+
function scanGitHubActionsWorkflows(dir) {
|
|
166
|
+
const findings = [];
|
|
167
|
+
const workflowDir = path.join(dir, ".github", "workflows");
|
|
168
|
+
if (!fs.existsSync(workflowDir)) {
|
|
169
|
+
return findings;
|
|
170
|
+
}
|
|
171
|
+
let entries;
|
|
172
|
+
try {
|
|
173
|
+
entries = fs.readdirSync(workflowDir, { withFileTypes: true });
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return findings;
|
|
177
|
+
}
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
if (!entry.isFile())
|
|
180
|
+
continue;
|
|
181
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
182
|
+
if (ext !== ".yml" && ext !== ".yaml")
|
|
183
|
+
continue;
|
|
184
|
+
const filePath = path.join(workflowDir, entry.name);
|
|
185
|
+
const relativePath = path.join(".github", "workflows", entry.name);
|
|
186
|
+
try {
|
|
187
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
188
|
+
scanWorkflowContent(content, relativePath, findings);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Skip unreadable files
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return findings;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Scan workflow file content for suspicious patterns.
|
|
198
|
+
*/
|
|
199
|
+
function scanWorkflowContent(content, relativePath, findings) {
|
|
200
|
+
const lines = content.split("\n");
|
|
201
|
+
// Check line-by-line patterns in run: blocks and general content
|
|
202
|
+
checkWorkflowPatterns(lines, relativePath, findings);
|
|
203
|
+
// Check action references (uses: directives)
|
|
204
|
+
checkActionReferences(lines, relativePath, findings);
|
|
205
|
+
// Check for secrets sent to external URLs across multi-line run blocks
|
|
206
|
+
checkSecretsExfiltration(lines, relativePath, findings);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check workflow content against known dangerous patterns.
|
|
210
|
+
*/
|
|
211
|
+
function checkWorkflowPatterns(lines, relativePath, findings) {
|
|
212
|
+
for (const pattern of WORKFLOW_PATTERNS) {
|
|
213
|
+
const regex = new RegExp(pattern.pattern, pattern.flags ?? "i");
|
|
214
|
+
for (let i = 0; i < lines.length; i++) {
|
|
215
|
+
const line = lines[i] ?? "";
|
|
216
|
+
const match = regex.exec(line);
|
|
217
|
+
if (match) {
|
|
218
|
+
findings.push({
|
|
219
|
+
rule: pattern.rule,
|
|
220
|
+
description: pattern.description,
|
|
221
|
+
severity: pattern.severity,
|
|
222
|
+
file: relativePath,
|
|
223
|
+
line: i + 1,
|
|
224
|
+
match: truncateMatch(match[0]),
|
|
225
|
+
recommendation: getWorkflowRecommendation(pattern.rule),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Check action references for compromised or unpinned actions.
|
|
233
|
+
*/
|
|
234
|
+
function checkActionReferences(lines, relativePath, findings) {
|
|
235
|
+
const usesRegex = /^\s*-?\s*uses:\s*([^\s#]+)/;
|
|
236
|
+
for (let i = 0; i < lines.length; i++) {
|
|
237
|
+
const line = lines[i] ?? "";
|
|
238
|
+
const match = usesRegex.exec(line);
|
|
239
|
+
if (!match)
|
|
240
|
+
continue;
|
|
241
|
+
const actionRef = match[1] ?? "";
|
|
242
|
+
// Skip docker:// and local ./ references
|
|
243
|
+
if (actionRef.startsWith("docker://") || actionRef.startsWith("./")) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
// Parse owner/repo@ref
|
|
247
|
+
const atIndex = actionRef.indexOf("@");
|
|
248
|
+
if (atIndex === -1)
|
|
249
|
+
continue;
|
|
250
|
+
const actionPath = actionRef.substring(0, atIndex);
|
|
251
|
+
const ref = actionRef.substring(atIndex + 1);
|
|
252
|
+
const owner = actionPath.split("/")[0] ?? "";
|
|
253
|
+
// Check for unpinned versions (branch names instead of SHAs or semver tags)
|
|
254
|
+
if (UNPINNED_REF_PATTERN.test(ref)) {
|
|
255
|
+
findings.push({
|
|
256
|
+
rule: "GHA_UNPINNED_ACTION",
|
|
257
|
+
description: `Action "${actionRef}" uses a branch reference (@${ref}) instead of a pinned commit SHA or version tag. Branch references can be changed at any time.`,
|
|
258
|
+
severity: "medium",
|
|
259
|
+
file: relativePath,
|
|
260
|
+
line: i + 1,
|
|
261
|
+
match: truncateMatch(actionRef),
|
|
262
|
+
recommendation: "Pin actions to a specific commit SHA (e.g., @abc123def...) or a version tag (e.g., @v2.1.0) to prevent supply-chain attacks via mutable references.",
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
// Check for non-SHA refs (semver tags are acceptable but less secure than SHAs)
|
|
266
|
+
if (!SHA_PATTERN.test(ref) && !UNPINNED_REF_PATTERN.test(ref)) {
|
|
267
|
+
// Only flag non-semver patterns or very short tags as info
|
|
268
|
+
const isSemver = /^v?\d+(\.\d+){0,2}$/.test(ref);
|
|
269
|
+
if (isSemver && !TRUSTED_ACTION_OWNERS.has(owner)) {
|
|
270
|
+
findings.push({
|
|
271
|
+
rule: "GHA_TAG_NOT_SHA",
|
|
272
|
+
description: `Action "${actionRef}" uses a version tag instead of a commit SHA. Tags can be force-pushed to point to different commits.`,
|
|
273
|
+
severity: "low",
|
|
274
|
+
file: relativePath,
|
|
275
|
+
line: i + 1,
|
|
276
|
+
match: truncateMatch(actionRef),
|
|
277
|
+
recommendation: "Consider pinning this action to a full commit SHA for maximum security. Tags can be moved to point to malicious code.",
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Check for non-official/untrusted action owners
|
|
282
|
+
if (!TRUSTED_ACTION_OWNERS.has(owner)) {
|
|
283
|
+
// Only flag as info if it has a SHA pin, medium otherwise
|
|
284
|
+
const isPinnedToSha = SHA_PATTERN.test(ref);
|
|
285
|
+
findings.push({
|
|
286
|
+
rule: "GHA_THIRD_PARTY_ACTION",
|
|
287
|
+
description: `Action "${actionRef}" is from third-party owner "${owner}". Third-party actions can be compromised.`,
|
|
288
|
+
severity: isPinnedToSha ? "info" : "low",
|
|
289
|
+
file: relativePath,
|
|
290
|
+
line: i + 1,
|
|
291
|
+
match: truncateMatch(actionRef),
|
|
292
|
+
recommendation: isPinnedToSha
|
|
293
|
+
? `Third-party action pinned to SHA. Periodically verify the SHA matches trusted code for "${actionPath}".`
|
|
294
|
+
: `Pin "${actionRef}" to a specific commit SHA and audit the action source code before use.`,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Check for secrets being sent to external URLs in run blocks.
|
|
301
|
+
* Looks for multi-line run: blocks that contain both secret references
|
|
302
|
+
* and outbound network calls.
|
|
303
|
+
*/
|
|
304
|
+
function checkSecretsExfiltration(lines, relativePath, findings) {
|
|
305
|
+
const secretPattern = /\$\{\{\s*secrets\.\w+\s*\}\}/;
|
|
306
|
+
const networkPattern = /\b(?:curl|wget|fetch|nc|ncat|netcat)\b/;
|
|
307
|
+
const envExportPattern = /^\s*\w+:\s*\$\{\{\s*secrets\.\w+/;
|
|
308
|
+
// Track env: blocks that export secrets and subsequent run: blocks
|
|
309
|
+
let inRunBlock = false;
|
|
310
|
+
let runBlockStart = -1;
|
|
311
|
+
let runBlockHasSecrets = false;
|
|
312
|
+
let runBlockHasNetwork = false;
|
|
313
|
+
let runBlockIndent = 0;
|
|
314
|
+
// Also track env-exported secrets at step/job level
|
|
315
|
+
let envSecretsExported = false;
|
|
316
|
+
for (let i = 0; i < lines.length; i++) {
|
|
317
|
+
const line = lines[i] ?? "";
|
|
318
|
+
// Check env: blocks for secret exports
|
|
319
|
+
if (envExportPattern.test(line)) {
|
|
320
|
+
envSecretsExported = true;
|
|
321
|
+
}
|
|
322
|
+
// Detect start of run: block
|
|
323
|
+
const runMatch = /^(\s*)(?:-\s+)?run:\s*[|>]?\s*$/.exec(line);
|
|
324
|
+
const inlineRunMatch = /^(\s*)(?:-\s+)?run:\s+(.+)$/.exec(line);
|
|
325
|
+
if (runMatch) {
|
|
326
|
+
inRunBlock = true;
|
|
327
|
+
runBlockStart = i;
|
|
328
|
+
runBlockIndent = (runMatch[1] ?? "").length;
|
|
329
|
+
runBlockHasSecrets = false;
|
|
330
|
+
runBlockHasNetwork = false;
|
|
331
|
+
continue;
|
|
332
|
+
}
|
|
333
|
+
if (inlineRunMatch) {
|
|
334
|
+
// Single-line run: - already caught by WORKFLOW_PATTERNS
|
|
335
|
+
inRunBlock = false;
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
if (inRunBlock) {
|
|
339
|
+
// Check if we've left the block (dedented or empty non-continuation)
|
|
340
|
+
const lineIndent = line.length - line.trimStart().length;
|
|
341
|
+
if (line.trim().length > 0 && lineIndent <= runBlockIndent && !/^\s+/.test(line)) {
|
|
342
|
+
// Exited run block
|
|
343
|
+
if (runBlockHasSecrets && runBlockHasNetwork) {
|
|
344
|
+
// Already caught by line-level patterns if on same line;
|
|
345
|
+
// this catches split across lines
|
|
346
|
+
const alreadyFound = findings.some((f) => (f.rule === "GHA_SECRET_CURL" || f.rule === "GHA_SECRET_WGET") &&
|
|
347
|
+
f.file === relativePath &&
|
|
348
|
+
f.line !== undefined &&
|
|
349
|
+
f.line >= runBlockStart + 1 &&
|
|
350
|
+
f.line <= i);
|
|
351
|
+
if (!alreadyFound) {
|
|
352
|
+
findings.push({
|
|
353
|
+
rule: "GHA_SECRET_EXFIL_MULTILINE",
|
|
354
|
+
description: "Secrets and network commands found in the same run block (potential exfiltration across multiple lines)",
|
|
355
|
+
severity: "high",
|
|
356
|
+
file: relativePath,
|
|
357
|
+
line: runBlockStart + 1,
|
|
358
|
+
recommendation: "Review this run block. Secrets combined with network commands in the same step can indicate credential exfiltration.",
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
inRunBlock = false;
|
|
363
|
+
}
|
|
364
|
+
if (inRunBlock) {
|
|
365
|
+
if (secretPattern.test(line))
|
|
366
|
+
runBlockHasSecrets = true;
|
|
367
|
+
if (networkPattern.test(line))
|
|
368
|
+
runBlockHasNetwork = true;
|
|
369
|
+
// Also check if env-exported secrets are used with network
|
|
370
|
+
if (envSecretsExported && networkPattern.test(line)) {
|
|
371
|
+
runBlockHasSecrets = true;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Handle case where run block extends to end of file
|
|
377
|
+
if (inRunBlock && runBlockHasSecrets && runBlockHasNetwork) {
|
|
378
|
+
const alreadyFound = findings.some((f) => (f.rule === "GHA_SECRET_CURL" || f.rule === "GHA_SECRET_WGET") &&
|
|
379
|
+
f.file === relativePath);
|
|
380
|
+
if (!alreadyFound) {
|
|
381
|
+
findings.push({
|
|
382
|
+
rule: "GHA_SECRET_EXFIL_MULTILINE",
|
|
383
|
+
description: "Secrets and network commands found in the same run block (potential exfiltration across multiple lines)",
|
|
384
|
+
severity: "high",
|
|
385
|
+
file: relativePath,
|
|
386
|
+
line: runBlockStart + 1,
|
|
387
|
+
recommendation: "Review this run block. Secrets combined with network commands in the same step can indicate credential exfiltration.",
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get recommendation text for a workflow-specific rule.
|
|
394
|
+
*/
|
|
395
|
+
function getWorkflowRecommendation(rule) {
|
|
396
|
+
const map = {
|
|
397
|
+
GHA_CURL_PIPE_EXEC: "Do not pipe remote content directly to a shell. Download the script, verify its checksum, then execute.",
|
|
398
|
+
GHA_WGET_PIPE_EXEC: "Do not pipe remote content directly to a shell. Download the script, verify its checksum, then execute.",
|
|
399
|
+
GHA_CURL_DOWNLOAD_EXEC: "Verify downloaded scripts with checksums before execution. Prefer using pinned GitHub Actions instead.",
|
|
400
|
+
GHA_WGET_DOWNLOAD_EXEC: "Verify downloaded scripts with checksums before execution. Prefer using pinned GitHub Actions instead.",
|
|
401
|
+
GHA_SECRET_CURL: "Secrets should never be sent to external URLs. Review this workflow step for credential exfiltration.",
|
|
402
|
+
GHA_SECRET_WGET: "Secrets should never be sent to external URLs via wget. Review this workflow step for credential exfiltration.",
|
|
403
|
+
GHA_BASE64_PAYLOAD: "Base64 encoded payloads in CI workflows are suspicious. Decode and inspect the content before running.",
|
|
404
|
+
GHA_BASE64_EXEC: "Decoding base64 content and piping to a shell is a common attack vector. Inspect the encoded content.",
|
|
405
|
+
GHA_ATOB_USAGE: "Base64 decoding in workflow run blocks may indicate obfuscated payloads. Review the decoded content.",
|
|
406
|
+
GHA_ENV_EXFIL: "Environment variables combined with network tools may indicate data exfiltration. Review the workflow step.",
|
|
407
|
+
GHA_EVAL_SUBSHELL: "eval with command substitution enables dynamic code execution. This is rarely needed in CI workflows.",
|
|
408
|
+
GHA_EVAL_STRING: "eval of string content in workflows can execute injected code. Prefer direct commands.",
|
|
409
|
+
};
|
|
410
|
+
return map[rule] ?? "Review this finding and assess whether it represents legitimate CI/CD functionality.";
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Truncate a match string for display.
|
|
414
|
+
*/
|
|
415
|
+
function truncateMatch(match, maxLen = 120) {
|
|
416
|
+
if (match.length <= maxLen)
|
|
417
|
+
return match;
|
|
418
|
+
return match.substring(0, maxLen) + "...";
|
|
419
|
+
}
|
|
420
|
+
//# sourceMappingURL=github-actions-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-actions-scanner.js","sourceRoot":"","sources":["../src/github-actions-scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,9 @@ export { scanNpmPackage } from "./npm-scanner.js";
|
|
|
9
9
|
export { scanPypiPackage } from "./pypi-scanner.js";
|
|
10
10
|
export { scanVscodeExtension } from "./vscode-scanner.js";
|
|
11
11
|
export { scanDependencyConfusion } from "./dependency-confusion.js";
|
|
12
|
-
export { monitorWallet, checkWallet, formatAlert } from "./solana-monitor.js";
|
|
12
|
+
export { monitorWallet, checkWallet, formatAlert, loadWatchlist, saveWatchlist, addToWatchlist, removeFromWatchlist, listWatchlist, monitorWatchlist, } from "./solana-monitor.js";
|
|
13
13
|
export { formatReport } from "./reporter.js";
|
|
14
14
|
export { checkLockfile } from "./lockfile-checker.js";
|
|
15
|
-
export
|
|
15
|
+
export { scanGitHubActionsWorkflows } from "./github-actions-scanner.js";
|
|
16
|
+
export type { Finding, ScanReport, ScanOptions, ScanSummary, Severity, NpmPackageInfo, SolanaMonitorOptions, SolanaTransaction, PatternEntry, WatchlistEntry, WatchlistConfig, WatchlistAlert, } from "./types.js";
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Detects GlassWorm and similar malware campaigns.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.checkLockfile = exports.formatReport = exports.formatAlert = exports.checkWallet = exports.monitorWallet = exports.scanDependencyConfusion = exports.scanVscodeExtension = exports.scanPypiPackage = exports.scanNpmPackage = exports.scan = void 0;
|
|
9
|
+
exports.scanGitHubActionsWorkflows = exports.checkLockfile = exports.formatReport = exports.monitorWatchlist = exports.listWatchlist = exports.removeFromWatchlist = exports.addToWatchlist = exports.saveWatchlist = exports.loadWatchlist = exports.formatAlert = exports.checkWallet = exports.monitorWallet = exports.scanDependencyConfusion = exports.scanVscodeExtension = exports.scanPypiPackage = exports.scanNpmPackage = exports.scan = void 0;
|
|
10
10
|
var scanner_js_1 = require("./scanner.js");
|
|
11
11
|
Object.defineProperty(exports, "scan", { enumerable: true, get: function () { return scanner_js_1.scan; } });
|
|
12
12
|
var npm_scanner_js_1 = require("./npm-scanner.js");
|
|
@@ -21,8 +21,16 @@ var solana_monitor_js_1 = require("./solana-monitor.js");
|
|
|
21
21
|
Object.defineProperty(exports, "monitorWallet", { enumerable: true, get: function () { return solana_monitor_js_1.monitorWallet; } });
|
|
22
22
|
Object.defineProperty(exports, "checkWallet", { enumerable: true, get: function () { return solana_monitor_js_1.checkWallet; } });
|
|
23
23
|
Object.defineProperty(exports, "formatAlert", { enumerable: true, get: function () { return solana_monitor_js_1.formatAlert; } });
|
|
24
|
+
Object.defineProperty(exports, "loadWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.loadWatchlist; } });
|
|
25
|
+
Object.defineProperty(exports, "saveWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.saveWatchlist; } });
|
|
26
|
+
Object.defineProperty(exports, "addToWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.addToWatchlist; } });
|
|
27
|
+
Object.defineProperty(exports, "removeFromWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.removeFromWatchlist; } });
|
|
28
|
+
Object.defineProperty(exports, "listWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.listWatchlist; } });
|
|
29
|
+
Object.defineProperty(exports, "monitorWatchlist", { enumerable: true, get: function () { return solana_monitor_js_1.monitorWatchlist; } });
|
|
24
30
|
var reporter_js_1 = require("./reporter.js");
|
|
25
31
|
Object.defineProperty(exports, "formatReport", { enumerable: true, get: function () { return reporter_js_1.formatReport; } });
|
|
26
32
|
var lockfile_checker_js_1 = require("./lockfile-checker.js");
|
|
27
33
|
Object.defineProperty(exports, "checkLockfile", { enumerable: true, get: function () { return lockfile_checker_js_1.checkLockfile; } });
|
|
34
|
+
var github_actions_scanner_js_1 = require("./github-actions-scanner.js");
|
|
35
|
+
Object.defineProperty(exports, "scanGitHubActionsWorkflows", { enumerable: true, get: function () { return github_actions_scanner_js_1.scanGitHubActionsWorkflows; } });
|
|
28
36
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAAoC;AAA3B,kGAAA,IAAI,OAAA;AACb,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAA0D;AAAjD,wHAAA,mBAAmB,OAAA;AAC5B,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAAoC;AAA3B,kGAAA,IAAI,OAAA;AACb,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAA0D;AAAjD,wHAAA,mBAAmB,OAAA;AAC5B,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,yDAU6B;AAT3B,kHAAA,aAAa,OAAA;AACb,gHAAA,WAAW,OAAA;AACX,gHAAA,WAAW,OAAA;AACX,kHAAA,aAAa,OAAA;AACb,kHAAA,aAAa,OAAA;AACb,mHAAA,cAAc,OAAA;AACd,wHAAA,mBAAmB,OAAA;AACnB,kHAAA,aAAa,OAAA;AACb,qHAAA,gBAAgB,OAAA;AAElB,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6DAAsD;AAA7C,oHAAA,aAAa,OAAA;AACtB,yEAAyE;AAAhE,uIAAA,0BAA0B,OAAA"}
|
package/dist/patterns.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export declare const PYPI_SETUP_FILES: Set<string>;
|
|
|
32
32
|
export declare const PYPI_INSTALL_HOOK_PATTERNS: PatternEntry[];
|
|
33
33
|
/** Python file extensions to scan */
|
|
34
34
|
export declare const PYTHON_EXTENSIONS: Set<string>;
|
|
35
|
+
/** Known typosquatted PyPI package name patterns */
|
|
36
|
+
export declare const PYPI_TYPOSQUAT_PATTERNS: string[];
|
|
35
37
|
/** File extensions that indicate binary/native addons */
|
|
36
38
|
export declare const BINARY_EXTENSIONS: Set<string>;
|
|
37
39
|
/** Patterns in install scripts that indicate prebuilt binary downloads */
|
package/dist/patterns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMzD,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,UAAsB,CAAC;AAErD,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAGpC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAItC,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,YAAY,EAkHvC,CAAC;AAMF,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAeA,CAAC;AAMF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAqC5C,CAAC;AAMF,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAY9C,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,YAAY,EA0H3C,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMzD,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,UAAsB,CAAC;AAErD,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAGpC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAItC,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,YAAY,EAkHvC,CAAC;AAMF,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAeA,CAAC;AAMF,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAqC5C,CAAC;AAMF,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAY9C,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,YAAY,EA0H3C,CAAC;AAMF,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAkJ5C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,aAI3B,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,0BAA0B,EAAE,YAAY,EAoCpD,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,aAI5B,CAAC;AAEH,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAc3C,CAAC;AAMF,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,aAO5B,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,EAAE,YAAY,EA8BlD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,qBAAqB,aA+BhC,CAAC;AAMH,eAAO,MAAM,qBAAqB,EAAE,YAAY,EAyF/C,CAAC;AAMF,eAAO,MAAM,oBAAoB,aAc/B,CAAC;AAEH,gFAAgF;AAChF,eAAO,MAAM,aAAa,QAAkB,CAAC"}
|
package/dist/patterns.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Add new patterns, wallet addresses, or domain patterns as they are discovered.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.MAX_FILE_SIZE = exports.SCANNABLE_EXTENSIONS = exports.BEACON_MINER_PATTERNS = exports.KNOWN_NATIVE_PACKAGES = exports.BINARY_DOWNLOAD_PATTERNS = exports.BINARY_EXTENSIONS = exports.PYTHON_EXTENSIONS = exports.PYPI_INSTALL_HOOK_PATTERNS = exports.PYPI_SETUP_FILES = exports.PYPI_FILE_PATTERNS = exports.CAMPAIGN_PATTERNS = exports.MALICIOUS_PACKAGE_PATTERNS = exports.SUSPICIOUS_SCRIPTS = exports.SUSPICIOUS_FILES = exports.FILE_PATTERNS = exports.C2_DOMAIN_PATTERNS = exports.KNOWN_C2_WALLETS = exports.GLASSWORM_MARKERS = void 0;
|
|
9
|
+
exports.MAX_FILE_SIZE = exports.SCANNABLE_EXTENSIONS = exports.BEACON_MINER_PATTERNS = exports.KNOWN_NATIVE_PACKAGES = exports.BINARY_DOWNLOAD_PATTERNS = exports.BINARY_EXTENSIONS = exports.PYPI_TYPOSQUAT_PATTERNS = exports.PYTHON_EXTENSIONS = exports.PYPI_INSTALL_HOOK_PATTERNS = exports.PYPI_SETUP_FILES = exports.PYPI_FILE_PATTERNS = exports.CAMPAIGN_PATTERNS = exports.MALICIOUS_PACKAGE_PATTERNS = exports.SUSPICIOUS_SCRIPTS = exports.SUSPICIOUS_FILES = exports.FILE_PATTERNS = exports.C2_DOMAIN_PATTERNS = exports.KNOWN_C2_WALLETS = exports.GLASSWORM_MARKERS = void 0;
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
11
|
// GlassWorm-specific IOCs
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
@@ -409,6 +409,38 @@ exports.PYPI_FILE_PATTERNS = [
|
|
|
409
409
|
severity: "high",
|
|
410
410
|
rule: "PYPI_HOSTNAME_EXFIL",
|
|
411
411
|
},
|
|
412
|
+
// Install command class override
|
|
413
|
+
{
|
|
414
|
+
name: "python-install-class-override",
|
|
415
|
+
pattern: "class\\s+\\w+\\s*\\(\\s*(?:install|develop|bdist_egg|egg_info|sdist)\\s*\\)",
|
|
416
|
+
description: "Custom command class inheriting from setuptools install/develop command",
|
|
417
|
+
severity: "medium",
|
|
418
|
+
rule: "PYPI_INSTALL_CLASS_OVERRIDE",
|
|
419
|
+
},
|
|
420
|
+
// marshal.loads (bytecode deserialization)
|
|
421
|
+
{
|
|
422
|
+
name: "python-marshal-loads",
|
|
423
|
+
pattern: "marshal\\.loads\\s*\\(",
|
|
424
|
+
description: "marshal.loads() detected (bytecode deserialization, common obfuscation)",
|
|
425
|
+
severity: "high",
|
|
426
|
+
rule: "PYPI_MARSHAL_LOADS",
|
|
427
|
+
},
|
|
428
|
+
// exec with marshal.loads
|
|
429
|
+
{
|
|
430
|
+
name: "python-exec-marshal",
|
|
431
|
+
pattern: "exec\\s*\\(\\s*marshal\\.loads\\s*\\(",
|
|
432
|
+
description: "exec(marshal.loads()) detected (executing deserialized bytecode payload)",
|
|
433
|
+
severity: "critical",
|
|
434
|
+
rule: "PYPI_EXEC_MARSHAL",
|
|
435
|
+
},
|
|
436
|
+
// base64.b64decode combined with exec (various arrangements on same line)
|
|
437
|
+
{
|
|
438
|
+
name: "python-b64decode-exec-combined",
|
|
439
|
+
pattern: "base64\\.b64decode\\s*\\([^)]*\\).*\\bexec\\b|\\bexec\\b.*base64\\.b64decode",
|
|
440
|
+
description: "base64.b64decode combined with exec on the same line (obfuscated execution)",
|
|
441
|
+
severity: "critical",
|
|
442
|
+
rule: "PYPI_B64_EXEC_COMBINED",
|
|
443
|
+
},
|
|
412
444
|
];
|
|
413
445
|
/** Setup file names to check for install hooks */
|
|
414
446
|
exports.PYPI_SETUP_FILES = new Set([
|
|
@@ -446,6 +478,13 @@ exports.PYPI_INSTALL_HOOK_PATTERNS = [
|
|
|
446
478
|
severity: "low",
|
|
447
479
|
rule: "PYPI_CUSTOM_SDIST",
|
|
448
480
|
},
|
|
481
|
+
{
|
|
482
|
+
name: "setup-cmdclass-build-ext",
|
|
483
|
+
pattern: "cmdclass\\s*=\\s*\\{[^}]*['\"]build_ext['\"]",
|
|
484
|
+
description: "Custom build_ext command class detected (code runs during native extension build)",
|
|
485
|
+
severity: "low",
|
|
486
|
+
rule: "PYPI_CUSTOM_BUILD_EXT",
|
|
487
|
+
},
|
|
449
488
|
];
|
|
450
489
|
/** Python file extensions to scan */
|
|
451
490
|
exports.PYTHON_EXTENSIONS = new Set([
|
|
@@ -453,6 +492,22 @@ exports.PYTHON_EXTENSIONS = new Set([
|
|
|
453
492
|
".pyw",
|
|
454
493
|
".pyi",
|
|
455
494
|
]);
|
|
495
|
+
/** Known typosquatted PyPI package name patterns */
|
|
496
|
+
exports.PYPI_TYPOSQUAT_PATTERNS = [
|
|
497
|
+
// Typosquats of popular PyPI packages
|
|
498
|
+
"^(reqeusts|requsets|r3quests|reequests|requets)$",
|
|
499
|
+
"^(crypt0graphy|crytography|cryptograhpy)$",
|
|
500
|
+
"^(python-dateutill|python3-dateutil|py-dateutil)$",
|
|
501
|
+
"^(numppy|numpi|numpie)$",
|
|
502
|
+
"^(pandsa|pands)$",
|
|
503
|
+
"^(djang0|dajngo|djnago)$",
|
|
504
|
+
"^(urlib3|urllib33)$",
|
|
505
|
+
"^(colourama|colrama|coloram)$",
|
|
506
|
+
"^(setuptool|setuptoolss)$",
|
|
507
|
+
"^(flaskk|flaask|fl4sk)$",
|
|
508
|
+
// Very long single-word lowercase names
|
|
509
|
+
"^[a-z]{20,}$",
|
|
510
|
+
];
|
|
456
511
|
// ---------------------------------------------------------------------------
|
|
457
512
|
// Binary / native addon detection (T-007)
|
|
458
513
|
// ---------------------------------------------------------------------------
|
package/dist/patterns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
|