vaspera 2.9.0 → 2.10.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/CHANGELOG.md +122 -7
- package/README.md +58 -1
- package/dist/__tests__/autofix/branch-manager.test.d.ts +2 -0
- package/dist/__tests__/autofix/branch-manager.test.d.ts.map +1 -0
- package/dist/__tests__/autofix/branch-manager.test.js +60 -0
- package/dist/__tests__/autofix/branch-manager.test.js.map +1 -0
- package/dist/__tests__/autofix/commit-generator.test.d.ts +2 -0
- package/dist/__tests__/autofix/commit-generator.test.d.ts.map +1 -0
- package/dist/__tests__/autofix/commit-generator.test.js +147 -0
- package/dist/__tests__/autofix/commit-generator.test.js.map +1 -0
- package/dist/__tests__/autofix/constitution.test.d.ts +9 -0
- package/dist/__tests__/autofix/constitution.test.d.ts.map +1 -0
- package/dist/__tests__/autofix/constitution.test.js +421 -0
- package/dist/__tests__/autofix/constitution.test.js.map +1 -0
- package/dist/__tests__/autofix/pr-generator.test.d.ts +2 -0
- package/dist/__tests__/autofix/pr-generator.test.d.ts.map +1 -0
- package/dist/__tests__/autofix/pr-generator.test.js +152 -0
- package/dist/__tests__/autofix/pr-generator.test.js.map +1 -0
- package/dist/__tests__/property-test-helpers.d.ts +87 -0
- package/dist/__tests__/property-test-helpers.d.ts.map +1 -0
- package/dist/__tests__/property-test-helpers.js +136 -0
- package/dist/__tests__/property-test-helpers.js.map +1 -0
- package/dist/__tests__/scanners/dast/index.test.d.ts +2 -0
- package/dist/__tests__/scanners/dast/index.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/dast/index.test.js +183 -0
- package/dist/__tests__/scanners/dast/index.test.js.map +1 -0
- package/dist/__tests__/scanners/dast/nuclei.test.d.ts +2 -0
- package/dist/__tests__/scanners/dast/nuclei.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/dast/nuclei.test.js +166 -0
- package/dist/__tests__/scanners/dast/nuclei.test.js.map +1 -0
- package/dist/__tests__/scanners/dast/zap.test.d.ts +2 -0
- package/dist/__tests__/scanners/dast/zap.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/dast/zap.test.js +158 -0
- package/dist/__tests__/scanners/dast/zap.test.js.map +1 -0
- package/dist/__tests__/scanners/fp-feedback.test.d.ts +2 -0
- package/dist/__tests__/scanners/fp-feedback.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/fp-feedback.test.js +202 -0
- package/dist/__tests__/scanners/fp-feedback.test.js.map +1 -0
- package/dist/__tests__/scanners/fp-filter.property.test.d.ts +9 -0
- package/dist/__tests__/scanners/fp-filter.property.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/fp-filter.property.test.js +253 -0
- package/dist/__tests__/scanners/fp-filter.property.test.js.map +1 -0
- package/dist/__tests__/scanners/fp-filter.test.d.ts +2 -0
- package/dist/__tests__/scanners/fp-filter.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/fp-filter.test.js +234 -0
- package/dist/__tests__/scanners/fp-filter.test.js.map +1 -0
- package/dist/__tests__/scanners/fp-tracker.test.d.ts +2 -0
- package/dist/__tests__/scanners/fp-tracker.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/fp-tracker.test.js +262 -0
- package/dist/__tests__/scanners/fp-tracker.test.js.map +1 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts +10 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js +238 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js.map +1 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts +2 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js +55 -0
- package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js.map +1 -0
- package/dist/__tests__/scanners/logic/index.test.d.ts +2 -0
- package/dist/__tests__/scanners/logic/index.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/logic/index.test.js +165 -0
- package/dist/__tests__/scanners/logic/index.test.js.map +1 -0
- package/dist/__tests__/scanners/logic/types.test.d.ts +2 -0
- package/dist/__tests__/scanners/logic/types.test.d.ts.map +1 -0
- package/dist/__tests__/scanners/logic/types.test.js +85 -0
- package/dist/__tests__/scanners/logic/types.test.js.map +1 -0
- package/dist/action/pr-comment.test.js +4 -0
- package/dist/action/pr-comment.test.js.map +1 -1
- package/dist/action/sarif-upload.test.js +4 -0
- package/dist/action/sarif-upload.test.js.map +1 -1
- package/dist/autofix/branch-manager.d.ts +115 -0
- package/dist/autofix/branch-manager.d.ts.map +1 -0
- package/dist/autofix/branch-manager.js +308 -0
- package/dist/autofix/branch-manager.js.map +1 -0
- package/dist/autofix/commit-generator.d.ts +55 -0
- package/dist/autofix/commit-generator.d.ts.map +1 -0
- package/dist/autofix/commit-generator.js +277 -0
- package/dist/autofix/commit-generator.js.map +1 -0
- package/dist/autofix/constitution.d.ts +77 -0
- package/dist/autofix/constitution.d.ts.map +1 -0
- package/dist/autofix/constitution.js +261 -0
- package/dist/autofix/constitution.js.map +1 -0
- package/dist/autofix/constitution.schema.d.ts +441 -0
- package/dist/autofix/constitution.schema.d.ts.map +1 -0
- package/dist/autofix/constitution.schema.js +144 -0
- package/dist/autofix/constitution.schema.js.map +1 -0
- package/dist/autofix/index.d.ts +13 -0
- package/dist/autofix/index.d.ts.map +1 -0
- package/dist/autofix/index.js +15 -0
- package/dist/autofix/index.js.map +1 -0
- package/dist/autofix/pr-generator.d.ts +57 -0
- package/dist/autofix/pr-generator.d.ts.map +1 -0
- package/dist/autofix/pr-generator.js +597 -0
- package/dist/autofix/pr-generator.js.map +1 -0
- package/dist/autofix/types.d.ts +151 -0
- package/dist/autofix/types.d.ts.map +1 -0
- package/dist/autofix/types.js +22 -0
- package/dist/autofix/types.js.map +1 -0
- package/dist/eval/fixtures.d.ts +20 -0
- package/dist/eval/fixtures.d.ts.map +1 -1
- package/dist/eval/fixtures.js +430 -0
- package/dist/eval/fixtures.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -1
- package/dist/index.js.map +1 -1
- package/dist/scanners/cache.d.ts.map +1 -1
- package/dist/scanners/cache.js +4 -0
- package/dist/scanners/cache.js.map +1 -1
- package/dist/scanners/dast/index.d.ts +39 -0
- package/dist/scanners/dast/index.d.ts.map +1 -0
- package/dist/scanners/dast/index.js +259 -0
- package/dist/scanners/dast/index.js.map +1 -0
- package/dist/scanners/dast/nuclei.d.ts +26 -0
- package/dist/scanners/dast/nuclei.d.ts.map +1 -0
- package/dist/scanners/dast/nuclei.js +354 -0
- package/dist/scanners/dast/nuclei.js.map +1 -0
- package/dist/scanners/dast/types.d.ts +306 -0
- package/dist/scanners/dast/types.d.ts.map +1 -0
- package/dist/scanners/dast/types.js +52 -0
- package/dist/scanners/dast/types.js.map +1 -0
- package/dist/scanners/dast/zap.d.ts +26 -0
- package/dist/scanners/dast/zap.d.ts.map +1 -0
- package/dist/scanners/dast/zap.js +453 -0
- package/dist/scanners/dast/zap.js.map +1 -0
- package/dist/scanners/fp-feedback.d.ts +140 -0
- package/dist/scanners/fp-feedback.d.ts.map +1 -0
- package/dist/scanners/fp-feedback.js +292 -0
- package/dist/scanners/fp-feedback.js.map +1 -0
- package/dist/scanners/fp-filter.d.ts +94 -0
- package/dist/scanners/fp-filter.d.ts.map +1 -0
- package/dist/scanners/fp-filter.js +397 -0
- package/dist/scanners/fp-filter.js.map +1 -0
- package/dist/scanners/fp-tracker.d.ts +125 -0
- package/dist/scanners/fp-tracker.d.ts.map +1 -0
- package/dist/scanners/fp-tracker.js +330 -0
- package/dist/scanners/fp-tracker.js.map +1 -0
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +56 -0
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/index.test.js +6 -6
- package/dist/scanners/index.test.js.map +1 -1
- package/dist/scanners/logic/auth-flow-analyzer.d.ts +18 -0
- package/dist/scanners/logic/auth-flow-analyzer.d.ts.map +1 -0
- package/dist/scanners/logic/auth-flow-analyzer.js +384 -0
- package/dist/scanners/logic/auth-flow-analyzer.js.map +1 -0
- package/dist/scanners/logic/endpoint-analyzer.d.ts +29 -0
- package/dist/scanners/logic/endpoint-analyzer.d.ts.map +1 -0
- package/dist/scanners/logic/endpoint-analyzer.js +528 -0
- package/dist/scanners/logic/endpoint-analyzer.js.map +1 -0
- package/dist/scanners/logic/index.d.ts +41 -0
- package/dist/scanners/logic/index.d.ts.map +1 -0
- package/dist/scanners/logic/index.js +268 -0
- package/dist/scanners/logic/index.js.map +1 -0
- package/dist/scanners/logic/types.d.ts +254 -0
- package/dist/scanners/logic/types.d.ts.map +1 -0
- package/dist/scanners/logic/types.js +142 -0
- package/dist/scanners/logic/types.js.map +1 -0
- package/dist/scanners/types.d.ts +1 -1
- package/dist/scanners/types.d.ts.map +1 -1
- package/dist/scanners/types.js +4 -0
- package/dist/scanners/types.js.map +1 -1
- package/dist/telemetry/usage.d.ts +1 -1
- package/dist/telemetry/usage.d.ts.map +1 -1
- package/dist/telemetry/usage.js +14 -6
- package/dist/telemetry/usage.js.map +1 -1
- package/package.json +6 -8
package/dist/eval/fixtures.js
CHANGED
|
@@ -523,6 +523,431 @@ export async function getFileSecure(filename: string) {
|
|
|
523
523
|
tags: ["owasp-top-10", "path-traversal"],
|
|
524
524
|
},
|
|
525
525
|
];
|
|
526
|
+
/**
|
|
527
|
+
* Command Injection Fixtures
|
|
528
|
+
*/
|
|
529
|
+
export const commandInjectionFixtures = [
|
|
530
|
+
{
|
|
531
|
+
id: "cmd-001",
|
|
532
|
+
name: "exec with user input",
|
|
533
|
+
description: "Command injection via child_process.exec with string concatenation",
|
|
534
|
+
category: "command-injection",
|
|
535
|
+
source: "OWASP",
|
|
536
|
+
files: [
|
|
537
|
+
{
|
|
538
|
+
path: "utils/git.ts",
|
|
539
|
+
language: "typescript",
|
|
540
|
+
content: `import { exec } from 'child_process';
|
|
541
|
+
|
|
542
|
+
// VULNERABLE: User input directly in exec
|
|
543
|
+
export function cloneRepo(repoUrl: string) {
|
|
544
|
+
exec(\`git clone \${repoUrl}\`);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// SAFE: Array-based spawn
|
|
548
|
+
import { spawn } from 'child_process';
|
|
549
|
+
export function cloneRepoSafe(repoUrl: string) {
|
|
550
|
+
spawn('git', ['clone', repoUrl]);
|
|
551
|
+
}
|
|
552
|
+
`,
|
|
553
|
+
},
|
|
554
|
+
],
|
|
555
|
+
expectedFindings: [
|
|
556
|
+
{
|
|
557
|
+
file: "utils/git.ts",
|
|
558
|
+
line: 5,
|
|
559
|
+
severity: "critical",
|
|
560
|
+
category: "command-injection",
|
|
561
|
+
cweId: "CWE-78",
|
|
562
|
+
description: "Command injection via template literal in exec",
|
|
563
|
+
isVulnerable: true,
|
|
564
|
+
},
|
|
565
|
+
],
|
|
566
|
+
tags: ["owasp-top-10", "injection", "child-process"],
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
id: "cmd-002",
|
|
570
|
+
name: "spawn with shell:true",
|
|
571
|
+
description: "Command injection via spawn with shell option enabled",
|
|
572
|
+
category: "command-injection",
|
|
573
|
+
source: "custom",
|
|
574
|
+
files: [
|
|
575
|
+
{
|
|
576
|
+
path: "services/deploy.ts",
|
|
577
|
+
language: "typescript",
|
|
578
|
+
content: `import { spawn } from 'child_process';
|
|
579
|
+
|
|
580
|
+
// VULNERABLE: shell: true with user input
|
|
581
|
+
export function runScript(scriptName: string) {
|
|
582
|
+
spawn(\`./scripts/\${scriptName}.sh\`, { shell: true });
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// SAFE: No shell option
|
|
586
|
+
export function runScriptSafe(scriptName: string) {
|
|
587
|
+
spawn('./scripts/run.sh', [scriptName]);
|
|
588
|
+
}
|
|
589
|
+
`,
|
|
590
|
+
},
|
|
591
|
+
],
|
|
592
|
+
expectedFindings: [
|
|
593
|
+
{
|
|
594
|
+
file: "services/deploy.ts",
|
|
595
|
+
line: 5,
|
|
596
|
+
severity: "critical",
|
|
597
|
+
category: "command-injection",
|
|
598
|
+
cweId: "CWE-78",
|
|
599
|
+
description: "shell: true enables command injection",
|
|
600
|
+
isVulnerable: true,
|
|
601
|
+
},
|
|
602
|
+
],
|
|
603
|
+
tags: ["injection", "shell"],
|
|
604
|
+
},
|
|
605
|
+
];
|
|
606
|
+
/**
|
|
607
|
+
* SSRF Fixtures
|
|
608
|
+
*/
|
|
609
|
+
export const ssrfFixtures = [
|
|
610
|
+
{
|
|
611
|
+
id: "ssrf-001",
|
|
612
|
+
name: "Fetch with user-controlled URL",
|
|
613
|
+
description: "SSRF via fetch with user-provided URL",
|
|
614
|
+
category: "ssrf",
|
|
615
|
+
source: "OWASP",
|
|
616
|
+
files: [
|
|
617
|
+
{
|
|
618
|
+
path: "api/proxy.ts",
|
|
619
|
+
language: "typescript",
|
|
620
|
+
content: `// VULNERABLE: Direct user URL in fetch
|
|
621
|
+
export async function proxyRequest(url: string) {
|
|
622
|
+
const response = await fetch(url);
|
|
623
|
+
return response.json();
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
// SAFE: URL allowlist
|
|
627
|
+
const ALLOWED_HOSTS = ['api.example.com', 'cdn.example.com'];
|
|
628
|
+
export async function proxyRequestSafe(url: string) {
|
|
629
|
+
const parsed = new URL(url);
|
|
630
|
+
if (!ALLOWED_HOSTS.includes(parsed.host)) {
|
|
631
|
+
throw new Error('Host not allowed');
|
|
632
|
+
}
|
|
633
|
+
return fetch(url);
|
|
634
|
+
}
|
|
635
|
+
`,
|
|
636
|
+
},
|
|
637
|
+
],
|
|
638
|
+
expectedFindings: [
|
|
639
|
+
{
|
|
640
|
+
file: "api/proxy.ts",
|
|
641
|
+
line: 3,
|
|
642
|
+
severity: "high",
|
|
643
|
+
category: "ssrf",
|
|
644
|
+
cweId: "CWE-918",
|
|
645
|
+
description: "SSRF via user-controlled URL in fetch",
|
|
646
|
+
isVulnerable: true,
|
|
647
|
+
},
|
|
648
|
+
],
|
|
649
|
+
tags: ["owasp-top-10", "ssrf", "network"],
|
|
650
|
+
},
|
|
651
|
+
{
|
|
652
|
+
id: "ssrf-002",
|
|
653
|
+
name: "HTTP client with redirect following",
|
|
654
|
+
description: "SSRF via axios with redirect following to internal networks",
|
|
655
|
+
category: "ssrf",
|
|
656
|
+
source: "custom",
|
|
657
|
+
files: [
|
|
658
|
+
{
|
|
659
|
+
path: "services/webhook.ts",
|
|
660
|
+
language: "typescript",
|
|
661
|
+
content: `import axios from 'axios';
|
|
662
|
+
|
|
663
|
+
// VULNERABLE: Following redirects to internal networks
|
|
664
|
+
export async function callWebhook(webhookUrl: string, payload: object) {
|
|
665
|
+
const response = await axios.post(webhookUrl, payload, {
|
|
666
|
+
maxRedirects: 5, // Can redirect to internal networks
|
|
667
|
+
});
|
|
668
|
+
return response.data;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// SAFE: Validate URL and disable redirects
|
|
672
|
+
export async function callWebhookSafe(webhookUrl: string, payload: object) {
|
|
673
|
+
const url = new URL(webhookUrl);
|
|
674
|
+
if (url.hostname === 'localhost' || url.hostname.startsWith('192.168.')) {
|
|
675
|
+
throw new Error('Internal URLs not allowed');
|
|
676
|
+
}
|
|
677
|
+
return axios.post(webhookUrl, payload, { maxRedirects: 0 });
|
|
678
|
+
}
|
|
679
|
+
`,
|
|
680
|
+
},
|
|
681
|
+
],
|
|
682
|
+
expectedFindings: [
|
|
683
|
+
{
|
|
684
|
+
file: "services/webhook.ts",
|
|
685
|
+
line: 5,
|
|
686
|
+
severity: "high",
|
|
687
|
+
category: "ssrf",
|
|
688
|
+
cweId: "CWE-918",
|
|
689
|
+
description: "SSRF via unvalidated webhook URL",
|
|
690
|
+
isVulnerable: true,
|
|
691
|
+
},
|
|
692
|
+
],
|
|
693
|
+
tags: ["ssrf", "redirect"],
|
|
694
|
+
},
|
|
695
|
+
];
|
|
696
|
+
/**
|
|
697
|
+
* XXE Fixtures
|
|
698
|
+
*/
|
|
699
|
+
export const xxeFixtures = [
|
|
700
|
+
{
|
|
701
|
+
id: "xxe-001",
|
|
702
|
+
name: "XML parsing without disabling external entities",
|
|
703
|
+
description: "XXE via insecure XML parser configuration",
|
|
704
|
+
category: "xxe",
|
|
705
|
+
source: "OWASP",
|
|
706
|
+
files: [
|
|
707
|
+
{
|
|
708
|
+
path: "utils/xml.ts",
|
|
709
|
+
language: "typescript",
|
|
710
|
+
content: `import { DOMParser } from 'xmldom';
|
|
711
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
712
|
+
|
|
713
|
+
// VULNERABLE: Default parser may allow XXE
|
|
714
|
+
export function parseXml(xmlString: string) {
|
|
715
|
+
const parser = new DOMParser();
|
|
716
|
+
return parser.parseFromString(xmlString, 'text/xml');
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
// SAFE: fast-xml-parser with external entities disabled
|
|
720
|
+
export function parseXmlSafe(xmlString: string) {
|
|
721
|
+
const parser = new XMLParser({
|
|
722
|
+
allowBooleanAttributes: true,
|
|
723
|
+
ignoreAttributes: false,
|
|
724
|
+
// External entities are disabled by default in fast-xml-parser
|
|
725
|
+
});
|
|
726
|
+
return parser.parse(xmlString);
|
|
727
|
+
}
|
|
728
|
+
`,
|
|
729
|
+
},
|
|
730
|
+
],
|
|
731
|
+
expectedFindings: [
|
|
732
|
+
{
|
|
733
|
+
file: "utils/xml.ts",
|
|
734
|
+
line: 6,
|
|
735
|
+
severity: "high",
|
|
736
|
+
category: "xxe",
|
|
737
|
+
cweId: "CWE-611",
|
|
738
|
+
description: "XML parser may be vulnerable to XXE",
|
|
739
|
+
isVulnerable: true,
|
|
740
|
+
},
|
|
741
|
+
],
|
|
742
|
+
tags: ["owasp-top-10", "xxe", "xml"],
|
|
743
|
+
},
|
|
744
|
+
];
|
|
745
|
+
/**
|
|
746
|
+
* Insecure Deserialization Fixtures
|
|
747
|
+
*/
|
|
748
|
+
export const insecureDeserializationFixtures = [
|
|
749
|
+
{
|
|
750
|
+
id: "deser-001",
|
|
751
|
+
name: "eval-based JSON parsing",
|
|
752
|
+
description: "Unsafe deserialization using eval",
|
|
753
|
+
category: "insecure-deserialization",
|
|
754
|
+
source: "custom",
|
|
755
|
+
files: [
|
|
756
|
+
{
|
|
757
|
+
path: "utils/parse.ts",
|
|
758
|
+
language: "typescript",
|
|
759
|
+
content: `// VULNERABLE: eval for JSON parsing
|
|
760
|
+
export function parseJson(str: string) {
|
|
761
|
+
return eval('(' + str + ')');
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
// VULNERABLE: Function constructor
|
|
765
|
+
export function parseJsonAlt(str: string) {
|
|
766
|
+
return new Function('return ' + str)();
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// SAFE: JSON.parse
|
|
770
|
+
export function parseJsonSafe(str: string) {
|
|
771
|
+
return JSON.parse(str);
|
|
772
|
+
}
|
|
773
|
+
`,
|
|
774
|
+
},
|
|
775
|
+
],
|
|
776
|
+
expectedFindings: [
|
|
777
|
+
{
|
|
778
|
+
file: "utils/parse.ts",
|
|
779
|
+
line: 3,
|
|
780
|
+
severity: "critical",
|
|
781
|
+
category: "insecure-deserialization",
|
|
782
|
+
cweId: "CWE-502",
|
|
783
|
+
description: "Unsafe deserialization via eval",
|
|
784
|
+
isVulnerable: true,
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
file: "utils/parse.ts",
|
|
788
|
+
line: 8,
|
|
789
|
+
severity: "critical",
|
|
790
|
+
category: "insecure-deserialization",
|
|
791
|
+
cweId: "CWE-502",
|
|
792
|
+
description: "Unsafe deserialization via Function constructor",
|
|
793
|
+
isVulnerable: true,
|
|
794
|
+
},
|
|
795
|
+
],
|
|
796
|
+
tags: ["deserialization", "eval"],
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
id: "deser-002",
|
|
800
|
+
name: "YAML unsafe load",
|
|
801
|
+
description: "Unsafe YAML parsing that allows arbitrary code execution",
|
|
802
|
+
category: "insecure-deserialization",
|
|
803
|
+
source: "custom",
|
|
804
|
+
files: [
|
|
805
|
+
{
|
|
806
|
+
path: "config/loader.ts",
|
|
807
|
+
language: "typescript",
|
|
808
|
+
content: `import * as yaml from 'js-yaml';
|
|
809
|
+
import { readFileSync } from 'fs';
|
|
810
|
+
|
|
811
|
+
// VULNERABLE: yaml.load can execute code in YAML 1.0
|
|
812
|
+
export function loadConfig(path: string) {
|
|
813
|
+
const content = readFileSync(path, 'utf-8');
|
|
814
|
+
return yaml.load(content); // Deprecated, use safeLoad
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
// SAFE: yaml.safeLoad or schema restriction
|
|
818
|
+
export function loadConfigSafe(path: string) {
|
|
819
|
+
const content = readFileSync(path, 'utf-8');
|
|
820
|
+
return yaml.load(content, { schema: yaml.JSON_SCHEMA });
|
|
821
|
+
}
|
|
822
|
+
`,
|
|
823
|
+
},
|
|
824
|
+
],
|
|
825
|
+
expectedFindings: [
|
|
826
|
+
{
|
|
827
|
+
file: "config/loader.ts",
|
|
828
|
+
line: 7,
|
|
829
|
+
severity: "high",
|
|
830
|
+
category: "insecure-deserialization",
|
|
831
|
+
cweId: "CWE-502",
|
|
832
|
+
description: "Unsafe YAML loading may allow code execution",
|
|
833
|
+
isVulnerable: true,
|
|
834
|
+
},
|
|
835
|
+
],
|
|
836
|
+
tags: ["deserialization", "yaml"],
|
|
837
|
+
},
|
|
838
|
+
];
|
|
839
|
+
/**
|
|
840
|
+
* RLS Bypass / IDOR Fixtures
|
|
841
|
+
*/
|
|
842
|
+
export const rlsBypassFixtures = [
|
|
843
|
+
{
|
|
844
|
+
id: "rls-001",
|
|
845
|
+
name: "Missing user filter on database query",
|
|
846
|
+
description: "Direct object reference without ownership check",
|
|
847
|
+
category: "rls-bypass",
|
|
848
|
+
source: "custom",
|
|
849
|
+
files: [
|
|
850
|
+
{
|
|
851
|
+
path: "api/documents.ts",
|
|
852
|
+
language: "typescript",
|
|
853
|
+
content: `import { db } from '../db';
|
|
854
|
+
|
|
855
|
+
// VULNERABLE: No userId filter - IDOR
|
|
856
|
+
export async function getDocument(id: string) {
|
|
857
|
+
return db.query('SELECT * FROM documents WHERE id = $1', [id]);
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
// VULNERABLE: No ownership check in update
|
|
861
|
+
export async function updateDocument(id: string, content: string) {
|
|
862
|
+
return db.query('UPDATE documents SET content = $2 WHERE id = $1', [id, content]);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
// SAFE: userId filter present
|
|
866
|
+
export async function getDocumentSafe(id: string, userId: string) {
|
|
867
|
+
return db.query(
|
|
868
|
+
'SELECT * FROM documents WHERE id = $1 AND user_id = $2',
|
|
869
|
+
[id, userId]
|
|
870
|
+
);
|
|
871
|
+
}
|
|
872
|
+
`,
|
|
873
|
+
},
|
|
874
|
+
],
|
|
875
|
+
expectedFindings: [
|
|
876
|
+
{
|
|
877
|
+
file: "api/documents.ts",
|
|
878
|
+
line: 5,
|
|
879
|
+
severity: "high",
|
|
880
|
+
category: "rls-bypass",
|
|
881
|
+
cweId: "CWE-639",
|
|
882
|
+
description: "Missing ownership filter allows unauthorized access",
|
|
883
|
+
isVulnerable: true,
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
file: "api/documents.ts",
|
|
887
|
+
line: 10,
|
|
888
|
+
severity: "high",
|
|
889
|
+
category: "rls-bypass",
|
|
890
|
+
cweId: "CWE-639",
|
|
891
|
+
description: "Missing ownership check on update operation",
|
|
892
|
+
isVulnerable: true,
|
|
893
|
+
},
|
|
894
|
+
],
|
|
895
|
+
tags: ["access-control", "idor", "authorization"],
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
id: "rls-002",
|
|
899
|
+
name: "Supabase RLS bypass via service role",
|
|
900
|
+
description: "Using service role key bypasses RLS policies",
|
|
901
|
+
category: "rls-bypass",
|
|
902
|
+
source: "custom",
|
|
903
|
+
files: [
|
|
904
|
+
{
|
|
905
|
+
path: "lib/supabase.ts",
|
|
906
|
+
language: "typescript",
|
|
907
|
+
content: `import { createClient } from '@supabase/supabase-js';
|
|
908
|
+
|
|
909
|
+
// VULNERABLE: Service role bypasses RLS
|
|
910
|
+
export const adminClient = createClient(
|
|
911
|
+
process.env.SUPABASE_URL!,
|
|
912
|
+
process.env.SUPABASE_SERVICE_ROLE_KEY! // Bypasses RLS
|
|
913
|
+
);
|
|
914
|
+
|
|
915
|
+
export async function deleteAnyUser(userId: string) {
|
|
916
|
+
// This bypasses all RLS policies!
|
|
917
|
+
return adminClient.from('users').delete().eq('id', userId);
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
// SAFE: Use anon key with user context
|
|
921
|
+
export const publicClient = createClient(
|
|
922
|
+
process.env.SUPABASE_URL!,
|
|
923
|
+
process.env.SUPABASE_ANON_KEY!
|
|
924
|
+
);
|
|
925
|
+
|
|
926
|
+
export async function deleteOwnUser(userId: string, accessToken: string) {
|
|
927
|
+
const client = createClient(
|
|
928
|
+
process.env.SUPABASE_URL!,
|
|
929
|
+
process.env.SUPABASE_ANON_KEY!,
|
|
930
|
+
{ global: { headers: { Authorization: \`Bearer \${accessToken}\` } } }
|
|
931
|
+
);
|
|
932
|
+
return client.from('users').delete().eq('id', userId);
|
|
933
|
+
}
|
|
934
|
+
`,
|
|
935
|
+
},
|
|
936
|
+
],
|
|
937
|
+
expectedFindings: [
|
|
938
|
+
{
|
|
939
|
+
file: "lib/supabase.ts",
|
|
940
|
+
line: 10,
|
|
941
|
+
severity: "high",
|
|
942
|
+
category: "rls-bypass",
|
|
943
|
+
cweId: "CWE-639",
|
|
944
|
+
description: "Service role key usage bypasses RLS policies",
|
|
945
|
+
isVulnerable: true,
|
|
946
|
+
},
|
|
947
|
+
],
|
|
948
|
+
tags: ["supabase", "rls", "authorization"],
|
|
949
|
+
},
|
|
950
|
+
];
|
|
526
951
|
/**
|
|
527
952
|
* All fixtures combined
|
|
528
953
|
*/
|
|
@@ -533,6 +958,11 @@ export const ALL_FIXTURES = [
|
|
|
533
958
|
...typeSafetyFixtures,
|
|
534
959
|
...authFixtures,
|
|
535
960
|
...pathTraversalFixtures,
|
|
961
|
+
...commandInjectionFixtures,
|
|
962
|
+
...ssrfFixtures,
|
|
963
|
+
...xxeFixtures,
|
|
964
|
+
...insecureDeserializationFixtures,
|
|
965
|
+
...rlsBypassFixtures,
|
|
536
966
|
];
|
|
537
967
|
/**
|
|
538
968
|
* Get fixtures by category
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/eval/fixtures.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/eval/fixtures.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiQpE;;GAEG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM;;;;;EAIjC;AAED;;GAEG;AACH,iBAAS,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;;;;;;EAK/D;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM;;;;;EAIrC;AA+CD,QAAA,MAAM,MAAM,WAGV,CAAC;AAkoKH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,9 @@ import { getTracker, formatCost, formatTokens, estimateCost, getSupportedModels,
|
|
|
46
46
|
import { getRunner, DEFAULT_MODELS, formatProvider, } from "./multimodel/index.js";
|
|
47
47
|
// Path validation utilities
|
|
48
48
|
import { validateProjectPath, PathValidationError } from "./util/paths.js";
|
|
49
|
+
// Telemetry and scan registry
|
|
50
|
+
import { trackCertificationStarted, trackCertificationCompleted, trackScannerRun, } from "./telemetry/usage.js";
|
|
51
|
+
import { getRegistry } from "./telemetry/registry.js";
|
|
49
52
|
// ---------------------------------------------------------------------------
|
|
50
53
|
// Config
|
|
51
54
|
// ---------------------------------------------------------------------------
|
|
@@ -755,6 +758,12 @@ server.registerTool("certification_scan", {
|
|
|
755
758
|
project: basename(project_path),
|
|
756
759
|
});
|
|
757
760
|
scanLogger.info("scanners.starting", { scanners, auto_detect });
|
|
761
|
+
const startTime = Date.now();
|
|
762
|
+
// Track scan start via telemetry
|
|
763
|
+
const scannersToRun = auto_detect
|
|
764
|
+
? ["auto-detect"]
|
|
765
|
+
: Object.entries(scanners || {}).filter(([, v]) => v).map(([k]) => k);
|
|
766
|
+
await trackCertificationStarted(project_path, scannersToRun, [], auto_detect ? "auto" : "manual");
|
|
758
767
|
// Use auto-detection or manual scanner selection
|
|
759
768
|
let result;
|
|
760
769
|
let detectedLanguages;
|
|
@@ -768,6 +777,24 @@ server.registerTool("certification_scan", {
|
|
|
768
777
|
else {
|
|
769
778
|
result = await runAllScanners(project_path, scanners);
|
|
770
779
|
}
|
|
780
|
+
// Track scanner runs in telemetry
|
|
781
|
+
for (const scanner of Object.keys(result.byScanner)) {
|
|
782
|
+
await trackScannerRun(project_path, scanner, result.totalDuration / Object.keys(result.byScanner).length, // Approximate per-scanner duration
|
|
783
|
+
result.byScanner[scanner] || 0, !result.failedScanners.includes(scanner));
|
|
784
|
+
}
|
|
785
|
+
// Record scan in registry for analytics
|
|
786
|
+
const registry = getRegistry();
|
|
787
|
+
await registry.recordScan({
|
|
788
|
+
certificationId: certification_id,
|
|
789
|
+
projectPath: project_path,
|
|
790
|
+
scanDate: new Date().toISOString(),
|
|
791
|
+
duration: Date.now() - startTime,
|
|
792
|
+
findingsSummary: result.bySeverity,
|
|
793
|
+
totalFindings: result.totalFindings,
|
|
794
|
+
scannersRun: Object.keys(result.byScanner),
|
|
795
|
+
frameworksAssessed: [],
|
|
796
|
+
success: result.allSucceeded,
|
|
797
|
+
});
|
|
771
798
|
// If certification_id provided and submit_findings is true, submit to certification
|
|
772
799
|
if (certification_id && submit_findings && result.totalFindings > 0) {
|
|
773
800
|
const certFindings = scannerFindingsToCertificationFindings(result);
|
|
@@ -1579,6 +1606,7 @@ server.registerTool("certification_finalize", {
|
|
|
1579
1606
|
},
|
|
1580
1607
|
}, async ({ project_path, certification_id }) => {
|
|
1581
1608
|
const certLogger = createChildLogger({ certId: certification_id, project: basename(project_path) });
|
|
1609
|
+
const startTime = Date.now();
|
|
1582
1610
|
const certification = await getCertification(project_path, certification_id);
|
|
1583
1611
|
if (!certification) {
|
|
1584
1612
|
certLogger.warn("certification.not_found");
|
|
@@ -1604,6 +1632,36 @@ server.registerTool("certification_finalize", {
|
|
|
1604
1632
|
}
|
|
1605
1633
|
// Generate artifacts
|
|
1606
1634
|
const artifacts = await writeCertificationArtifacts(project_path, finalCert);
|
|
1635
|
+
// Track certification completion via telemetry
|
|
1636
|
+
const severityCounts = { critical: 0, high: 0, medium: 0, low: 0, info: 0 };
|
|
1637
|
+
let totalFindings = 0;
|
|
1638
|
+
for (const agentType of Object.keys(certification.agents || {})) {
|
|
1639
|
+
const agent = certification.agents[agentType];
|
|
1640
|
+
if (agent?.findings) {
|
|
1641
|
+
for (const finding of agent.findings) {
|
|
1642
|
+
severityCounts[finding.severity]++;
|
|
1643
|
+
totalFindings++;
|
|
1644
|
+
}
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
await trackCertificationCompleted(project_path, certification_id, finalCert.consensus?.certification_level || "BLOCKED", finalCert.consensus?.overall_score || 0, Date.now() - new Date(certification.metadata.started_at).getTime(), severityCounts, totalFindings, [] // frameworks
|
|
1648
|
+
);
|
|
1649
|
+
// Record in registry
|
|
1650
|
+
const registry = getRegistry();
|
|
1651
|
+
await registry.recordScan({
|
|
1652
|
+
certificationId: certification_id,
|
|
1653
|
+
projectPath: project_path,
|
|
1654
|
+
scanDate: new Date().toISOString(),
|
|
1655
|
+
level: finalCert.consensus?.certification_level || "BLOCKED",
|
|
1656
|
+
score: finalCert.consensus?.overall_score || 0,
|
|
1657
|
+
duration: Date.now() - startTime,
|
|
1658
|
+
findingsSummary: severityCounts,
|
|
1659
|
+
totalFindings,
|
|
1660
|
+
scannersRun: Object.keys(certification.agents || {}),
|
|
1661
|
+
frameworksAssessed: [],
|
|
1662
|
+
success: true,
|
|
1663
|
+
tags: ["certification-finalized"],
|
|
1664
|
+
});
|
|
1607
1665
|
certLogger.info("certification.finalized", {
|
|
1608
1666
|
level: finalCert.consensus?.certification_level,
|
|
1609
1667
|
score: finalCert.consensus?.overall_score,
|
|
@@ -3625,7 +3683,11 @@ Maps findings to AI compliance frameworks (OWASP LLM, NIST AI RMF, EU AI Act).`,
|
|
|
3625
3683
|
if (!authorized) {
|
|
3626
3684
|
return errorResponse("Agent scanning requires explicit authorization. Set authorized=true to confirm you have permission to scan this target.");
|
|
3627
3685
|
}
|
|
3686
|
+
const startTime = Date.now();
|
|
3628
3687
|
try {
|
|
3688
|
+
// Track scan start via telemetry
|
|
3689
|
+
const enabledScanners = scanners || AGENT_SCANNER_TYPES;
|
|
3690
|
+
await trackCertificationStarted(target, enabledScanners, frameworks || [], "agent-cert");
|
|
3629
3691
|
// Build scan target
|
|
3630
3692
|
const scanTarget = {};
|
|
3631
3693
|
if (target.startsWith("http://") || target.startsWith("https://")) {
|
|
@@ -3641,7 +3703,6 @@ Maps findings to AI compliance frameworks (OWASP LLM, NIST AI RMF, EU AI Act).`,
|
|
|
3641
3703
|
scanTarget.npmPackage = target;
|
|
3642
3704
|
}
|
|
3643
3705
|
// Build scanner options
|
|
3644
|
-
const enabledScanners = scanners || AGENT_SCANNER_TYPES;
|
|
3645
3706
|
const scannerFlags = {
|
|
3646
3707
|
manifestAudit: enabledScanners.includes("manifest-audit"),
|
|
3647
3708
|
toolDrift: enabledScanners.includes("tool-description-drift"),
|
|
@@ -3680,6 +3741,28 @@ Maps findings to AI compliance frameworks (OWASP LLM, NIST AI RMF, EU AI Act).`,
|
|
|
3680
3741
|
}
|
|
3681
3742
|
// Generate summary
|
|
3682
3743
|
const summary = generateAgentScannerSummary(result);
|
|
3744
|
+
// Record scan in registry for analytics
|
|
3745
|
+
const registry = getRegistry();
|
|
3746
|
+
await registry.recordScan({
|
|
3747
|
+
certificationId: certification_id,
|
|
3748
|
+
projectPath: target,
|
|
3749
|
+
scanDate: new Date().toISOString(),
|
|
3750
|
+
level: result.certificationReadiness === "ready" ? "CERTIFIED"
|
|
3751
|
+
: result.certificationReadiness === "needs-review" ? "REVIEW_REQUIRED"
|
|
3752
|
+
: "BLOCKED",
|
|
3753
|
+
score: 100 - result.riskScore,
|
|
3754
|
+
duration: Date.now() - startTime,
|
|
3755
|
+
findingsSummary: result.bySeverity,
|
|
3756
|
+
totalFindings: result.totalFindings,
|
|
3757
|
+
scannersRun: result.scanners.map((s) => s.scanner),
|
|
3758
|
+
frameworksAssessed: frameworks || [],
|
|
3759
|
+
success: result.allSucceeded,
|
|
3760
|
+
tags: ["agent-cert", "mcp-security"],
|
|
3761
|
+
});
|
|
3762
|
+
// Track individual scanner runs
|
|
3763
|
+
for (const scanner of result.scanners) {
|
|
3764
|
+
await trackScannerRun(target, scanner.scanner, scanner.duration || 0, scanner.findings.length, scanner.success);
|
|
3765
|
+
}
|
|
3683
3766
|
return jsonResponse({
|
|
3684
3767
|
success: result.allSucceeded,
|
|
3685
3768
|
target,
|