@kevinrabun/judges 3.48.0 → 3.50.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 (70) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +112 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/api-audit.d.ts +9 -0
  6. package/dist/commands/api-audit.d.ts.map +1 -0
  7. package/dist/commands/api-audit.js +360 -0
  8. package/dist/commands/api-audit.js.map +1 -0
  9. package/dist/commands/compliance-map.d.ts +9 -0
  10. package/dist/commands/compliance-map.d.ts.map +1 -0
  11. package/dist/commands/compliance-map.js +375 -0
  12. package/dist/commands/compliance-map.js.map +1 -0
  13. package/dist/commands/exec-report.d.ts +9 -0
  14. package/dist/commands/exec-report.d.ts.map +1 -0
  15. package/dist/commands/exec-report.js +272 -0
  16. package/dist/commands/exec-report.js.map +1 -0
  17. package/dist/commands/guided-tour.d.ts +9 -0
  18. package/dist/commands/guided-tour.d.ts.map +1 -0
  19. package/dist/commands/guided-tour.js +288 -0
  20. package/dist/commands/guided-tour.js.map +1 -0
  21. package/dist/commands/iac-lint.d.ts +8 -0
  22. package/dist/commands/iac-lint.d.ts.map +1 -0
  23. package/dist/commands/iac-lint.js +313 -0
  24. package/dist/commands/iac-lint.js.map +1 -0
  25. package/dist/commands/incident-response.d.ts +8 -0
  26. package/dist/commands/incident-response.d.ts.map +1 -0
  27. package/dist/commands/incident-response.js +255 -0
  28. package/dist/commands/incident-response.js.map +1 -0
  29. package/dist/commands/learning-path.d.ts +9 -0
  30. package/dist/commands/learning-path.d.ts.map +1 -0
  31. package/dist/commands/learning-path.js +326 -0
  32. package/dist/commands/learning-path.js.map +1 -0
  33. package/dist/commands/license-scan.d.ts +9 -0
  34. package/dist/commands/license-scan.d.ts.map +1 -0
  35. package/dist/commands/license-scan.js +180 -0
  36. package/dist/commands/license-scan.js.map +1 -0
  37. package/dist/commands/org-policy.d.ts +8 -0
  38. package/dist/commands/org-policy.d.ts.map +1 -0
  39. package/dist/commands/org-policy.js +208 -0
  40. package/dist/commands/org-policy.js.map +1 -0
  41. package/dist/commands/perf-compare.d.ts +9 -0
  42. package/dist/commands/perf-compare.d.ts.map +1 -0
  43. package/dist/commands/perf-compare.js +246 -0
  44. package/dist/commands/perf-compare.js.map +1 -0
  45. package/dist/commands/pii-scan.d.ts +8 -0
  46. package/dist/commands/pii-scan.d.ts.map +1 -0
  47. package/dist/commands/pii-scan.js +300 -0
  48. package/dist/commands/pii-scan.js.map +1 -0
  49. package/dist/commands/predict.d.ts +8 -0
  50. package/dist/commands/predict.d.ts.map +1 -0
  51. package/dist/commands/predict.js +219 -0
  52. package/dist/commands/predict.js.map +1 -0
  53. package/dist/commands/risk-heatmap.d.ts +8 -0
  54. package/dist/commands/risk-heatmap.d.ts.map +1 -0
  55. package/dist/commands/risk-heatmap.js +224 -0
  56. package/dist/commands/risk-heatmap.js.map +1 -0
  57. package/dist/commands/sbom-export.d.ts +8 -0
  58. package/dist/commands/sbom-export.d.ts.map +1 -0
  59. package/dist/commands/sbom-export.js +162 -0
  60. package/dist/commands/sbom-export.js.map +1 -0
  61. package/dist/commands/secret-scan.d.ts +8 -0
  62. package/dist/commands/secret-scan.d.ts.map +1 -0
  63. package/dist/commands/secret-scan.js +245 -0
  64. package/dist/commands/secret-scan.js.map +1 -0
  65. package/dist/commands/test-correlate.d.ts +8 -0
  66. package/dist/commands/test-correlate.d.ts.map +1 -0
  67. package/dist/commands/test-correlate.js +222 -0
  68. package/dist/commands/test-correlate.js.map +1 -0
  69. package/package.json +1 -1
  70. package/server.json +2 -2
@@ -0,0 +1,360 @@
1
+ /**
2
+ * API audit — security audit for REST/GraphQL API endpoints.
3
+ * Detects missing rate limiting, CORS misconfig, unauthenticated routes,
4
+ * input validation gaps, and overly permissive responses.
5
+ *
6
+ * All analysis local.
7
+ */
8
+ import { existsSync, readFileSync, readdirSync } from "fs";
9
+ import { join, extname } from "path";
10
+ // ─── Framework detectors ────────────────────────────────────────────────────
11
+ const FRAMEWORK_DETECTORS = [
12
+ {
13
+ name: "express",
14
+ routePattern: /(?:app|router)\.(get|post|put|patch|delete|all|use)\s*\(\s*["'`]([^"'`]+)["'`]/gi,
15
+ extractEndpoint: (m) => ({ method: m[1].toUpperCase(), path: m[2] }),
16
+ },
17
+ {
18
+ name: "fastify",
19
+ routePattern: /(?:fastify|server|app)\.(get|post|put|patch|delete)\s*\(\s*["'`]([^"'`]+)["'`]/gi,
20
+ extractEndpoint: (m) => ({ method: m[1].toUpperCase(), path: m[2] }),
21
+ },
22
+ {
23
+ name: "flask",
24
+ routePattern: /@(?:app|blueprint)\.route\s*\(\s*["']([^"']+)["'](?:.*methods\s*=\s*\[([^\]]+)\])?/gi,
25
+ extractEndpoint: (m) => ({ method: m[2] ? m[2].replace(/['"]/g, "") : "GET", path: m[1] }),
26
+ },
27
+ {
28
+ name: "spring",
29
+ routePattern: /@(?:Get|Post|Put|Patch|Delete|Request)Mapping\s*\(\s*(?:value\s*=\s*)?["']([^"']+)["']/gi,
30
+ extractEndpoint: (m) => {
31
+ const methodMatch = m[0].match(/@(Get|Post|Put|Patch|Delete|Request)Mapping/i);
32
+ return { method: methodMatch ? methodMatch[1].toUpperCase() : "ANY", path: m[1] };
33
+ },
34
+ },
35
+ {
36
+ name: "django",
37
+ routePattern: /path\s*\(\s*["']([^"']+)["']/gi,
38
+ extractEndpoint: (m) => ({ method: "ANY", path: m[1] }),
39
+ },
40
+ ];
41
+ const API_RULES = [
42
+ {
43
+ id: "no-rate-limiting",
44
+ severity: "high",
45
+ check: (content, _lines, endpoints) => {
46
+ if (endpoints.length === 0)
47
+ return [];
48
+ const hasRateLimit = /(?:rate[-_]?limit|rateLimit|throttle|express-rate-limit|@nestjs\/throttler|slowDown)/i.test(content);
49
+ if (!hasRateLimit) {
50
+ return [
51
+ {
52
+ file: "",
53
+ line: 1,
54
+ ruleId: "no-rate-limiting",
55
+ severity: "high",
56
+ message: "No rate limiting detected — API vulnerable to abuse",
57
+ recommendation: "Add rate limiting middleware (e.g., express-rate-limit)",
58
+ },
59
+ ];
60
+ }
61
+ return [];
62
+ },
63
+ },
64
+ {
65
+ id: "cors-wildcard",
66
+ severity: "high",
67
+ check: (_content, lines) => {
68
+ const issues = [];
69
+ for (let i = 0; i < lines.length; i++) {
70
+ if (/cors\s*\(\s*\)|origin:\s*['"]?\*['"]?|Access-Control-Allow-Origin.*\*/i.test(lines[i])) {
71
+ issues.push({
72
+ file: "",
73
+ line: i + 1,
74
+ ruleId: "cors-wildcard",
75
+ severity: "high",
76
+ message: "CORS allows all origins (wildcard *)",
77
+ recommendation: "Restrict CORS to specific trusted domains",
78
+ });
79
+ }
80
+ }
81
+ return issues;
82
+ },
83
+ },
84
+ {
85
+ id: "unauthenticated-endpoint",
86
+ severity: "medium",
87
+ check: (content, lines, endpoints) => {
88
+ if (endpoints.length === 0)
89
+ return [];
90
+ const hasAuthMiddleware = /(?:passport|jwt|auth(?:enticate|orize)|bearer|keycloak|oauth|session)/i.test(content);
91
+ if (!hasAuthMiddleware) {
92
+ return [
93
+ {
94
+ file: "",
95
+ line: 1,
96
+ ruleId: "unauthenticated-endpoint",
97
+ severity: "medium",
98
+ message: `${endpoints.length} endpoints found with no authentication middleware detected`,
99
+ recommendation: "Add authentication middleware (JWT, session, OAuth)",
100
+ },
101
+ ];
102
+ }
103
+ // Check individual routes missing auth
104
+ const issues = [];
105
+ for (const ep of endpoints) {
106
+ const lineContent = lines[ep.line - 1] || "";
107
+ const nextContent = lines[ep.line] || "";
108
+ if (!/auth|protect|guard|session/i.test(lineContent) && !/auth|protect|guard|session/i.test(nextContent)) {
109
+ if (!/health|ping|status|public|login|register|signup|webhook|callback/i.test(ep.path)) {
110
+ issues.push({
111
+ file: ep.file,
112
+ line: ep.line,
113
+ ruleId: "unauthenticated-endpoint",
114
+ severity: "medium",
115
+ message: `Endpoint ${ep.method} ${ep.path} may lack authentication`,
116
+ recommendation: "Add authentication middleware to this route",
117
+ endpoint: `${ep.method} ${ep.path}`,
118
+ });
119
+ }
120
+ }
121
+ }
122
+ return issues;
123
+ },
124
+ },
125
+ {
126
+ id: "no-input-validation",
127
+ severity: "high",
128
+ check: (content, _lines, endpoints) => {
129
+ if (endpoints.length === 0)
130
+ return [];
131
+ const hasValidation = /(?:joi|yup|zod|celebrate|express-validator|class-validator|@IsString|@IsNumber|validation)/i.test(content);
132
+ if (!hasValidation) {
133
+ return [
134
+ {
135
+ file: "",
136
+ line: 1,
137
+ ruleId: "no-input-validation",
138
+ severity: "high",
139
+ message: "No input validation library detected — vulnerable to injection",
140
+ recommendation: "Use a validation library (Zod, Joi, express-validator)",
141
+ },
142
+ ];
143
+ }
144
+ return [];
145
+ },
146
+ },
147
+ {
148
+ id: "sensitive-data-response",
149
+ severity: "high",
150
+ check: (_content, lines) => {
151
+ const issues = [];
152
+ for (let i = 0; i < lines.length; i++) {
153
+ if (/(?:res\.json|res\.send|response\.json|jsonify)\s*\(.*(?:password|secret|token|ssn|credit_?card)/i.test(lines[i])) {
154
+ issues.push({
155
+ file: "",
156
+ line: i + 1,
157
+ ruleId: "sensitive-data-response",
158
+ severity: "high",
159
+ message: "Potentially sensitive data in API response",
160
+ recommendation: "Sanitize response objects — remove sensitive fields before sending",
161
+ });
162
+ }
163
+ }
164
+ return issues;
165
+ },
166
+ },
167
+ {
168
+ id: "helmet-missing",
169
+ severity: "medium",
170
+ check: (content, _lines, endpoints) => {
171
+ if (endpoints.length === 0)
172
+ return [];
173
+ const isExpress = /require\s*\(\s*["']express["']\)|from\s+["']express["']/i.test(content);
174
+ if (isExpress && !/helmet/i.test(content)) {
175
+ return [
176
+ {
177
+ file: "",
178
+ line: 1,
179
+ ruleId: "helmet-missing",
180
+ severity: "medium",
181
+ message: "Express app without Helmet — missing security headers",
182
+ recommendation: "Add helmet middleware for security headers",
183
+ },
184
+ ];
185
+ }
186
+ return [];
187
+ },
188
+ },
189
+ {
190
+ id: "sql-in-route",
191
+ severity: "critical",
192
+ check: (_content, lines) => {
193
+ const issues = [];
194
+ for (let i = 0; i < lines.length; i++) {
195
+ if (/(?:query|execute)\s*\(\s*[`"']?\s*(?:SELECT|INSERT|UPDATE|DELETE).*\$\{|(?:req\.(?:body|params|query))/i.test(lines[i])) {
196
+ issues.push({
197
+ file: "",
198
+ line: i + 1,
199
+ ruleId: "sql-in-route",
200
+ severity: "critical",
201
+ message: "Potential SQL injection — user input in query string",
202
+ recommendation: "Use parameterized queries or an ORM",
203
+ });
204
+ }
205
+ }
206
+ return issues;
207
+ },
208
+ },
209
+ ];
210
+ // ─── Scanner ────────────────────────────────────────────────────────────────
211
+ const SKIP_DIRS = new Set(["node_modules", ".git", "dist", "build", "coverage"]);
212
+ const CODE_EXTS = new Set([".ts", ".js", ".py", ".java", ".cs", ".go", ".rb", ".php"]);
213
+ function collectFiles(dir) {
214
+ const result = [];
215
+ function walk(d) {
216
+ let entries;
217
+ try {
218
+ entries = readdirSync(d);
219
+ }
220
+ catch {
221
+ return;
222
+ }
223
+ for (const name of entries) {
224
+ if (SKIP_DIRS.has(name) || name.startsWith("."))
225
+ continue;
226
+ const full = join(d, name);
227
+ try {
228
+ const sub = readdirSync(full);
229
+ void sub;
230
+ walk(full);
231
+ }
232
+ catch {
233
+ if (CODE_EXTS.has(extname(name).toLowerCase()))
234
+ result.push(full);
235
+ }
236
+ }
237
+ }
238
+ walk(dir);
239
+ return result;
240
+ }
241
+ function extractEndpoints(filePath, content) {
242
+ const endpoints = [];
243
+ const lines = content.split("\n");
244
+ for (const detector of FRAMEWORK_DETECTORS) {
245
+ detector.routePattern.lastIndex = 0;
246
+ let m;
247
+ while ((m = detector.routePattern.exec(content)) !== null) {
248
+ const ep = detector.extractEndpoint(m);
249
+ const offset = content.substring(0, m.index).split("\n").length;
250
+ endpoints.push({ file: filePath, line: offset, method: ep.method, path: ep.path, framework: detector.name });
251
+ }
252
+ void lines;
253
+ }
254
+ return endpoints;
255
+ }
256
+ // ─── CLI ────────────────────────────────────────────────────────────────────
257
+ export function runApiAudit(argv) {
258
+ if (argv.includes("--help") || argv.includes("-h")) {
259
+ console.log(`
260
+ judges api-audit — Security audit for REST/GraphQL API endpoints
261
+
262
+ Usage:
263
+ judges api-audit [dir]
264
+ judges api-audit src/ --severity critical,high
265
+
266
+ Options:
267
+ --severity <levels> Filter by severity (comma-separated)
268
+ --endpoints List discovered API endpoints only
269
+ --rules List all API audit rules
270
+ --format json JSON output
271
+ --help, -h Show this help
272
+
273
+ Frameworks: Express, Fastify, Flask, Spring, Django
274
+ `);
275
+ return;
276
+ }
277
+ const format = argv.find((_a, i) => argv[i - 1] === "--format") || "text";
278
+ if (argv.includes("--rules")) {
279
+ const rules = API_RULES.map(({ check: _c, ...rest }) => rest);
280
+ if (format === "json") {
281
+ console.log(JSON.stringify(rules, null, 2));
282
+ }
283
+ else {
284
+ console.log(`\n API Audit Rules (${rules.length})\n ──────────────────────────`);
285
+ for (const r of rules)
286
+ console.log(` [${r.severity.toUpperCase().padEnd(8)}] ${r.id}`);
287
+ console.log("");
288
+ }
289
+ return;
290
+ }
291
+ const target = argv.find((a) => !a.startsWith("--") && !argv[argv.indexOf(a) - 1]?.startsWith("--")) || ".";
292
+ const sevFilter = argv.find((_a, i) => argv[i - 1] === "--severity");
293
+ if (!existsSync(target)) {
294
+ console.error(` Path not found: ${target}`);
295
+ return;
296
+ }
297
+ const files = collectFiles(target);
298
+ const allEndpoints = [];
299
+ let allIssues = [];
300
+ for (const file of files) {
301
+ let content;
302
+ try {
303
+ content = readFileSync(file, "utf-8");
304
+ }
305
+ catch {
306
+ continue;
307
+ }
308
+ const endpoints = extractEndpoints(file, content);
309
+ allEndpoints.push(...endpoints);
310
+ const lines = content.split("\n");
311
+ for (const rule of API_RULES) {
312
+ const issues = rule.check(content, lines, endpoints);
313
+ for (const issue of issues) {
314
+ issue.file = issue.file || file;
315
+ allIssues.push(issue);
316
+ }
317
+ }
318
+ }
319
+ if (argv.includes("--endpoints")) {
320
+ if (format === "json") {
321
+ console.log(JSON.stringify(allEndpoints, null, 2));
322
+ }
323
+ else {
324
+ console.log(`\n Discovered API Endpoints (${allEndpoints.length})\n ──────────────────────────`);
325
+ for (const ep of allEndpoints) {
326
+ console.log(` ${ep.method.padEnd(7)} ${ep.path.padEnd(30)} [${ep.framework}] ${ep.file}:${ep.line}`);
327
+ }
328
+ console.log("");
329
+ }
330
+ return;
331
+ }
332
+ if (sevFilter) {
333
+ const allowed = sevFilter.split(",");
334
+ allIssues = allIssues.filter((i) => allowed.includes(i.severity));
335
+ }
336
+ if (format === "json") {
337
+ console.log(JSON.stringify({ endpoints: allEndpoints, issues: allIssues, scannedFiles: files.length, timestamp: new Date().toISOString() }, null, 2));
338
+ }
339
+ else {
340
+ console.log(`\n API Security Audit — ${files.length} files scanned`);
341
+ console.log(` Endpoints: ${allEndpoints.length} | Issues: ${allIssues.length}\n ──────────────────────────`);
342
+ if (allIssues.length === 0) {
343
+ console.log(` ✅ No API security issues detected\n`);
344
+ return;
345
+ }
346
+ for (const sev of ["critical", "high", "medium", "low"]) {
347
+ const items = allIssues.filter((i) => i.severity === sev);
348
+ if (items.length === 0)
349
+ continue;
350
+ console.log(`\n ${sev.toUpperCase()} (${items.length})`);
351
+ for (const issue of items) {
352
+ console.log(` ${issue.file}:${issue.line} — ${issue.ruleId}`);
353
+ console.log(` ${issue.message}`);
354
+ console.log(` → ${issue.recommendation}`);
355
+ }
356
+ }
357
+ console.log("");
358
+ }
359
+ }
360
+ //# sourceMappingURL=api-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-audit.js","sourceRoot":"","sources":["../../src/commands/api-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Compliance map — map findings to multiple compliance frameworks
3
+ * (HIPAA, SOC2, PCI-DSS, ISO 27001, NIST 800-53).
4
+ *
5
+ * Produces a unified cross-walk matrix with gap analysis.
6
+ * All analysis local — no data leaves the machine.
7
+ */
8
+ export declare function runComplianceMap(argv: string[]): void;
9
+ //# sourceMappingURL=compliance-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-map.d.ts","sourceRoot":"","sources":["../../src/commands/compliance-map.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+RH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0IrD"}