vaspera 2.9.2 → 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.
Files changed (159) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +58 -1
  3. package/dist/__tests__/autofix/branch-manager.test.d.ts +2 -0
  4. package/dist/__tests__/autofix/branch-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/autofix/branch-manager.test.js +60 -0
  6. package/dist/__tests__/autofix/branch-manager.test.js.map +1 -0
  7. package/dist/__tests__/autofix/commit-generator.test.d.ts +2 -0
  8. package/dist/__tests__/autofix/commit-generator.test.d.ts.map +1 -0
  9. package/dist/__tests__/autofix/commit-generator.test.js +147 -0
  10. package/dist/__tests__/autofix/commit-generator.test.js.map +1 -0
  11. package/dist/__tests__/autofix/constitution.test.d.ts +9 -0
  12. package/dist/__tests__/autofix/constitution.test.d.ts.map +1 -0
  13. package/dist/__tests__/autofix/constitution.test.js +421 -0
  14. package/dist/__tests__/autofix/constitution.test.js.map +1 -0
  15. package/dist/__tests__/autofix/pr-generator.test.d.ts +2 -0
  16. package/dist/__tests__/autofix/pr-generator.test.d.ts.map +1 -0
  17. package/dist/__tests__/autofix/pr-generator.test.js +152 -0
  18. package/dist/__tests__/autofix/pr-generator.test.js.map +1 -0
  19. package/dist/__tests__/property-test-helpers.d.ts +87 -0
  20. package/dist/__tests__/property-test-helpers.d.ts.map +1 -0
  21. package/dist/__tests__/property-test-helpers.js +136 -0
  22. package/dist/__tests__/property-test-helpers.js.map +1 -0
  23. package/dist/__tests__/scanners/dast/index.test.d.ts +2 -0
  24. package/dist/__tests__/scanners/dast/index.test.d.ts.map +1 -0
  25. package/dist/__tests__/scanners/dast/index.test.js +183 -0
  26. package/dist/__tests__/scanners/dast/index.test.js.map +1 -0
  27. package/dist/__tests__/scanners/dast/nuclei.test.d.ts +2 -0
  28. package/dist/__tests__/scanners/dast/nuclei.test.d.ts.map +1 -0
  29. package/dist/__tests__/scanners/dast/nuclei.test.js +166 -0
  30. package/dist/__tests__/scanners/dast/nuclei.test.js.map +1 -0
  31. package/dist/__tests__/scanners/dast/zap.test.d.ts +2 -0
  32. package/dist/__tests__/scanners/dast/zap.test.d.ts.map +1 -0
  33. package/dist/__tests__/scanners/dast/zap.test.js +158 -0
  34. package/dist/__tests__/scanners/dast/zap.test.js.map +1 -0
  35. package/dist/__tests__/scanners/fp-feedback.test.d.ts +2 -0
  36. package/dist/__tests__/scanners/fp-feedback.test.d.ts.map +1 -0
  37. package/dist/__tests__/scanners/fp-feedback.test.js +202 -0
  38. package/dist/__tests__/scanners/fp-feedback.test.js.map +1 -0
  39. package/dist/__tests__/scanners/fp-filter.property.test.d.ts +9 -0
  40. package/dist/__tests__/scanners/fp-filter.property.test.d.ts.map +1 -0
  41. package/dist/__tests__/scanners/fp-filter.property.test.js +253 -0
  42. package/dist/__tests__/scanners/fp-filter.property.test.js.map +1 -0
  43. package/dist/__tests__/scanners/fp-filter.test.d.ts +2 -0
  44. package/dist/__tests__/scanners/fp-filter.test.d.ts.map +1 -0
  45. package/dist/__tests__/scanners/fp-filter.test.js +234 -0
  46. package/dist/__tests__/scanners/fp-filter.test.js.map +1 -0
  47. package/dist/__tests__/scanners/fp-tracker.test.d.ts +2 -0
  48. package/dist/__tests__/scanners/fp-tracker.test.d.ts.map +1 -0
  49. package/dist/__tests__/scanners/fp-tracker.test.js +262 -0
  50. package/dist/__tests__/scanners/fp-tracker.test.js.map +1 -0
  51. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts +10 -0
  52. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.d.ts.map +1 -0
  53. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js +238 -0
  54. package/dist/__tests__/scanners/logic/endpoint-analyzer.property.test.js.map +1 -0
  55. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts +2 -0
  56. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.d.ts.map +1 -0
  57. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js +55 -0
  58. package/dist/__tests__/scanners/logic/endpoint-analyzer.test.js.map +1 -0
  59. package/dist/__tests__/scanners/logic/index.test.d.ts +2 -0
  60. package/dist/__tests__/scanners/logic/index.test.d.ts.map +1 -0
  61. package/dist/__tests__/scanners/logic/index.test.js +165 -0
  62. package/dist/__tests__/scanners/logic/index.test.js.map +1 -0
  63. package/dist/__tests__/scanners/logic/types.test.d.ts +2 -0
  64. package/dist/__tests__/scanners/logic/types.test.d.ts.map +1 -0
  65. package/dist/__tests__/scanners/logic/types.test.js +85 -0
  66. package/dist/__tests__/scanners/logic/types.test.js.map +1 -0
  67. package/dist/action/pr-comment.test.js +4 -0
  68. package/dist/action/pr-comment.test.js.map +1 -1
  69. package/dist/action/sarif-upload.test.js +4 -0
  70. package/dist/action/sarif-upload.test.js.map +1 -1
  71. package/dist/autofix/branch-manager.d.ts +115 -0
  72. package/dist/autofix/branch-manager.d.ts.map +1 -0
  73. package/dist/autofix/branch-manager.js +308 -0
  74. package/dist/autofix/branch-manager.js.map +1 -0
  75. package/dist/autofix/commit-generator.d.ts +55 -0
  76. package/dist/autofix/commit-generator.d.ts.map +1 -0
  77. package/dist/autofix/commit-generator.js +277 -0
  78. package/dist/autofix/commit-generator.js.map +1 -0
  79. package/dist/autofix/constitution.d.ts +77 -0
  80. package/dist/autofix/constitution.d.ts.map +1 -0
  81. package/dist/autofix/constitution.js +261 -0
  82. package/dist/autofix/constitution.js.map +1 -0
  83. package/dist/autofix/constitution.schema.d.ts +441 -0
  84. package/dist/autofix/constitution.schema.d.ts.map +1 -0
  85. package/dist/autofix/constitution.schema.js +144 -0
  86. package/dist/autofix/constitution.schema.js.map +1 -0
  87. package/dist/autofix/index.d.ts +13 -0
  88. package/dist/autofix/index.d.ts.map +1 -0
  89. package/dist/autofix/index.js +15 -0
  90. package/dist/autofix/index.js.map +1 -0
  91. package/dist/autofix/pr-generator.d.ts +57 -0
  92. package/dist/autofix/pr-generator.d.ts.map +1 -0
  93. package/dist/autofix/pr-generator.js +597 -0
  94. package/dist/autofix/pr-generator.js.map +1 -0
  95. package/dist/autofix/types.d.ts +151 -0
  96. package/dist/autofix/types.d.ts.map +1 -0
  97. package/dist/autofix/types.js +22 -0
  98. package/dist/autofix/types.js.map +1 -0
  99. package/dist/eval/fixtures.d.ts +20 -0
  100. package/dist/eval/fixtures.d.ts.map +1 -1
  101. package/dist/eval/fixtures.js +430 -0
  102. package/dist/eval/fixtures.js.map +1 -1
  103. package/dist/scanners/cache.d.ts.map +1 -1
  104. package/dist/scanners/cache.js +4 -0
  105. package/dist/scanners/cache.js.map +1 -1
  106. package/dist/scanners/dast/index.d.ts +39 -0
  107. package/dist/scanners/dast/index.d.ts.map +1 -0
  108. package/dist/scanners/dast/index.js +259 -0
  109. package/dist/scanners/dast/index.js.map +1 -0
  110. package/dist/scanners/dast/nuclei.d.ts +26 -0
  111. package/dist/scanners/dast/nuclei.d.ts.map +1 -0
  112. package/dist/scanners/dast/nuclei.js +354 -0
  113. package/dist/scanners/dast/nuclei.js.map +1 -0
  114. package/dist/scanners/dast/types.d.ts +306 -0
  115. package/dist/scanners/dast/types.d.ts.map +1 -0
  116. package/dist/scanners/dast/types.js +52 -0
  117. package/dist/scanners/dast/types.js.map +1 -0
  118. package/dist/scanners/dast/zap.d.ts +26 -0
  119. package/dist/scanners/dast/zap.d.ts.map +1 -0
  120. package/dist/scanners/dast/zap.js +453 -0
  121. package/dist/scanners/dast/zap.js.map +1 -0
  122. package/dist/scanners/fp-feedback.d.ts +140 -0
  123. package/dist/scanners/fp-feedback.d.ts.map +1 -0
  124. package/dist/scanners/fp-feedback.js +292 -0
  125. package/dist/scanners/fp-feedback.js.map +1 -0
  126. package/dist/scanners/fp-filter.d.ts +94 -0
  127. package/dist/scanners/fp-filter.d.ts.map +1 -0
  128. package/dist/scanners/fp-filter.js +397 -0
  129. package/dist/scanners/fp-filter.js.map +1 -0
  130. package/dist/scanners/fp-tracker.d.ts +125 -0
  131. package/dist/scanners/fp-tracker.d.ts.map +1 -0
  132. package/dist/scanners/fp-tracker.js +330 -0
  133. package/dist/scanners/fp-tracker.js.map +1 -0
  134. package/dist/scanners/index.d.ts.map +1 -1
  135. package/dist/scanners/index.js +56 -0
  136. package/dist/scanners/index.js.map +1 -1
  137. package/dist/scanners/index.test.js +6 -6
  138. package/dist/scanners/index.test.js.map +1 -1
  139. package/dist/scanners/logic/auth-flow-analyzer.d.ts +18 -0
  140. package/dist/scanners/logic/auth-flow-analyzer.d.ts.map +1 -0
  141. package/dist/scanners/logic/auth-flow-analyzer.js +384 -0
  142. package/dist/scanners/logic/auth-flow-analyzer.js.map +1 -0
  143. package/dist/scanners/logic/endpoint-analyzer.d.ts +29 -0
  144. package/dist/scanners/logic/endpoint-analyzer.d.ts.map +1 -0
  145. package/dist/scanners/logic/endpoint-analyzer.js +528 -0
  146. package/dist/scanners/logic/endpoint-analyzer.js.map +1 -0
  147. package/dist/scanners/logic/index.d.ts +41 -0
  148. package/dist/scanners/logic/index.d.ts.map +1 -0
  149. package/dist/scanners/logic/index.js +268 -0
  150. package/dist/scanners/logic/index.js.map +1 -0
  151. package/dist/scanners/logic/types.d.ts +254 -0
  152. package/dist/scanners/logic/types.d.ts.map +1 -0
  153. package/dist/scanners/logic/types.js +142 -0
  154. package/dist/scanners/logic/types.js.map +1 -0
  155. package/dist/scanners/types.d.ts +1 -1
  156. package/dist/scanners/types.d.ts.map +1 -1
  157. package/dist/scanners/types.js +4 -0
  158. package/dist/scanners/types.js.map +1 -1
  159. package/package.json +5 -3
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Property-Based Testing Helpers
3
+ *
4
+ * Shared generators and utilities for property-based tests using fast-check.
5
+ *
6
+ * @module __tests__/property-test-helpers
7
+ */
8
+ import * as fc from "fast-check";
9
+ /**
10
+ * Arbitrary generators for common security testing patterns
11
+ */
12
+ export declare const arbitraries: {
13
+ /**
14
+ * Valid identifier characters for path parameters
15
+ * Matches common conventions: alphanumeric + underscore, starting with letter/underscore
16
+ */
17
+ paramName: fc.Arbitrary<string>;
18
+ /**
19
+ * Generate a valid file path segment (no special chars)
20
+ */
21
+ pathSegment: fc.Arbitrary<string>;
22
+ /**
23
+ * Generate a valid file extension
24
+ */
25
+ fileExtension: fc.Arbitrary<"ts" | "py" | "go" | "rb" | "java" | "tsx" | "js" | "jsx">;
26
+ /**
27
+ * Generate a plural noun for singularization testing
28
+ */
29
+ pluralNoun: fc.Arbitrary<"entries" | "data" | "categories" | "matches" | "users" | "products" | "orders" | "items" | "companies" | "stories" | "addresses" | "statuses" | "boxes" | "bushes" | "media" | "sheep" | "fish">;
30
+ /**
31
+ * Generate an API path prefix
32
+ */
33
+ apiPrefix: fc.Arbitrary<"" | "/api" | "/api/v1" | "/api/v2" | "/v1" | "/v2">;
34
+ };
35
+ /**
36
+ * Generate a path with Express-style parameters (:param)
37
+ */
38
+ export declare function expressPath(paramNames: string[]): string;
39
+ /**
40
+ * Generate a path with Next.js-style parameters ([param])
41
+ */
42
+ export declare function nextjsPath(paramNames: string[]): string;
43
+ /**
44
+ * Generate a path with Flask-style parameters (<param> or <param:type>)
45
+ */
46
+ export declare function flaskPath(paramNames: string[], withTypes?: boolean): string;
47
+ /**
48
+ * Generate a path with Spring-style parameters ({param})
49
+ */
50
+ export declare function springPath(paramNames: string[]): string;
51
+ /**
52
+ * Generate a test file path
53
+ */
54
+ export declare function testFilePath(stem: string, extension: string): string;
55
+ /**
56
+ * Generate a spec file path
57
+ */
58
+ export declare function specFilePath(stem: string, extension: string): string;
59
+ /**
60
+ * Generate a node_modules file path
61
+ */
62
+ export declare function nodeModulesPath(pkg: string, file: string): string;
63
+ /**
64
+ * Generate a generated code file path
65
+ */
66
+ export declare function generatedFilePath(stem: string): string;
67
+ /**
68
+ * Generate a type definition file path
69
+ */
70
+ export declare function dtsFilePath(stem: string): string;
71
+ /**
72
+ * Arbitrary for generating arrays of unique parameter names
73
+ */
74
+ export declare const uniqueParamNames: fc.Arbitrary<string[]>;
75
+ /**
76
+ * Arbitrary for generating a file path with random structure
77
+ */
78
+ export declare const filePath: fc.Arbitrary<string>;
79
+ /**
80
+ * Check if a string contains any of the given characters
81
+ */
82
+ export declare function containsAny(str: string, chars: string[]): boolean;
83
+ /**
84
+ * Path parameter delimiter characters that should never appear in extracted params
85
+ */
86
+ export declare const PARAM_DELIMITERS: string[];
87
+ //# sourceMappingURL=property-test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test-helpers.d.ts","sourceRoot":"","sources":["../../src/__tests__/property-test-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;;OAGG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAyBH;;OAEG;;CAEJ,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAGxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,GAAE,OAAe,GACzB,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,wBAES,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,QAAQ,sBAM4C,CAAC;AAElE;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAAsC,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Property-Based Testing Helpers
3
+ *
4
+ * Shared generators and utilities for property-based tests using fast-check.
5
+ *
6
+ * @module __tests__/property-test-helpers
7
+ */
8
+ import * as fc from "fast-check";
9
+ /**
10
+ * Arbitrary generators for common security testing patterns
11
+ */
12
+ export const arbitraries = {
13
+ /**
14
+ * Valid identifier characters for path parameters
15
+ * Matches common conventions: alphanumeric + underscore, starting with letter/underscore
16
+ */
17
+ paramName: fc.stringMatching(/^[a-zA-Z_][a-zA-Z0-9_]{0,15}$/),
18
+ /**
19
+ * Generate a valid file path segment (no special chars)
20
+ */
21
+ pathSegment: fc.stringMatching(/^[a-zA-Z0-9_-]{1,20}$/),
22
+ /**
23
+ * Generate a valid file extension
24
+ */
25
+ fileExtension: fc.constantFrom("ts", "js", "tsx", "jsx", "py", "go", "rb", "java"),
26
+ /**
27
+ * Generate a plural noun for singularization testing
28
+ */
29
+ pluralNoun: fc.oneof(
30
+ // Regular plurals (add 's')
31
+ fc.constant("users"), fc.constant("products"), fc.constant("orders"), fc.constant("items"),
32
+ // -ies plurals (y -> ies)
33
+ fc.constant("categories"), fc.constant("companies"), fc.constant("stories"), fc.constant("entries"),
34
+ // -es plurals
35
+ fc.constant("addresses"), fc.constant("statuses"), fc.constant("boxes"), fc.constant("matches"), fc.constant("bushes"),
36
+ // Irregular or edge cases
37
+ fc.constant("data"), fc.constant("media"), fc.constant("sheep"), fc.constant("fish")),
38
+ /**
39
+ * Generate an API path prefix
40
+ */
41
+ apiPrefix: fc.constantFrom("/api", "/api/v1", "/api/v2", "/v1", "/v2", ""),
42
+ };
43
+ /**
44
+ * Generate a path with Express-style parameters (:param)
45
+ */
46
+ export function expressPath(paramNames) {
47
+ if (paramNames.length === 0)
48
+ return "/api/resource";
49
+ return "/api/" + paramNames.map((p) => `:${p}`).join("/");
50
+ }
51
+ /**
52
+ * Generate a path with Next.js-style parameters ([param])
53
+ */
54
+ export function nextjsPath(paramNames) {
55
+ if (paramNames.length === 0)
56
+ return "/api/resource";
57
+ return "/api/" + paramNames.map((p) => `[${p}]`).join("/");
58
+ }
59
+ /**
60
+ * Generate a path with Flask-style parameters (<param> or <param:type>)
61
+ */
62
+ export function flaskPath(paramNames, withTypes = false) {
63
+ if (paramNames.length === 0)
64
+ return "/api/resource";
65
+ const types = ["int", "string", "path", "float"];
66
+ return ("/api/" +
67
+ paramNames
68
+ .map((p, i) => {
69
+ if (withTypes && i % 2 === 0) {
70
+ return `<${p}:${types[i % types.length]}>`;
71
+ }
72
+ return `<${p}>`;
73
+ })
74
+ .join("/"));
75
+ }
76
+ /**
77
+ * Generate a path with Spring-style parameters ({param})
78
+ */
79
+ export function springPath(paramNames) {
80
+ if (paramNames.length === 0)
81
+ return "/api/resource";
82
+ return "/api/" + paramNames.map((p) => `{${p}}`).join("/");
83
+ }
84
+ /**
85
+ * Generate a test file path
86
+ */
87
+ export function testFilePath(stem, extension) {
88
+ return `src/__tests__/${stem}.test.${extension}`;
89
+ }
90
+ /**
91
+ * Generate a spec file path
92
+ */
93
+ export function specFilePath(stem, extension) {
94
+ return `src/${stem}.spec.${extension}`;
95
+ }
96
+ /**
97
+ * Generate a node_modules file path
98
+ */
99
+ export function nodeModulesPath(pkg, file) {
100
+ return `node_modules/${pkg}/${file}`;
101
+ }
102
+ /**
103
+ * Generate a generated code file path
104
+ */
105
+ export function generatedFilePath(stem) {
106
+ return `src/${stem}.generated.ts`;
107
+ }
108
+ /**
109
+ * Generate a type definition file path
110
+ */
111
+ export function dtsFilePath(stem) {
112
+ return `src/${stem}.d.ts`;
113
+ }
114
+ /**
115
+ * Arbitrary for generating arrays of unique parameter names
116
+ */
117
+ export const uniqueParamNames = fc
118
+ .array(arbitraries.paramName, { minLength: 1, maxLength: 5 })
119
+ .map((names) => [...new Set(names)]);
120
+ /**
121
+ * Arbitrary for generating a file path with random structure
122
+ */
123
+ export const filePath = fc
124
+ .tuple(fc.array(arbitraries.pathSegment, { minLength: 1, maxLength: 4 }), arbitraries.pathSegment, arbitraries.fileExtension)
125
+ .map(([dirs, name, ext]) => `${dirs.join("/")}/${name}.${ext}`);
126
+ /**
127
+ * Check if a string contains any of the given characters
128
+ */
129
+ export function containsAny(str, chars) {
130
+ return chars.some((c) => str.includes(c));
131
+ }
132
+ /**
133
+ * Path parameter delimiter characters that should never appear in extracted params
134
+ */
135
+ export const PARAM_DELIMITERS = [":", "[", "]", "<", ">", "{", "}"];
136
+ //# sourceMappingURL=property-test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test-helpers.js","sourceRoot":"","sources":["../../src/__tests__/property-test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/scanners/dast/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,183 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { formatDASTFindings, convertToSARIF, getDASTInstallInstructions, } from "../../../scanners/dast/index.js";
3
+ describe("dast index", () => {
4
+ describe("formatDASTFindings", () => {
5
+ it("returns message for empty findings", () => {
6
+ const result = formatDASTFindings([]);
7
+ expect(result).toBe("No vulnerabilities found.");
8
+ });
9
+ it("formats findings grouped by severity", () => {
10
+ const findings = [
11
+ createMockFinding({ severity: "critical", name: "SQL Injection" }),
12
+ createMockFinding({ severity: "high", name: "XSS" }),
13
+ createMockFinding({ severity: "medium", name: "CSRF" }),
14
+ ];
15
+ const result = formatDASTFindings(findings);
16
+ expect(result).toContain("## DAST Scan Results");
17
+ expect(result).toContain("Found 3 unique vulnerabilities");
18
+ expect(result).toContain("### 🔴 CRITICAL (1)");
19
+ expect(result).toContain("### 🟠 HIGH (1)");
20
+ expect(result).toContain("### 🟡 MEDIUM (1)");
21
+ expect(result).toContain("SQL Injection");
22
+ expect(result).toContain("XSS");
23
+ expect(result).toContain("CSRF");
24
+ });
25
+ it("includes CWE IDs when present", () => {
26
+ const findings = [
27
+ createMockFinding({ cweIds: ["CWE-89", "CWE-564"] }),
28
+ ];
29
+ const result = formatDASTFindings(findings);
30
+ expect(result).toContain("CWE: CWE-89, CWE-564");
31
+ });
32
+ it("includes truncated solution when present", () => {
33
+ const longSolution = "A".repeat(300);
34
+ const findings = [
35
+ createMockFinding({ solution: longSolution }),
36
+ ];
37
+ const result = formatDASTFindings(findings);
38
+ expect(result).toContain("Fix:");
39
+ expect(result).toContain("...");
40
+ expect(result.length).toBeLessThan(longSolution.length + 500);
41
+ });
42
+ it("shows scanner name for each finding", () => {
43
+ const findings = [
44
+ createMockFinding({ scanner: "zap", name: "From ZAP" }),
45
+ createMockFinding({ scanner: "nuclei", name: "From Nuclei" }),
46
+ ];
47
+ const result = formatDASTFindings(findings);
48
+ expect(result).toContain("(zap)");
49
+ expect(result).toContain("(nuclei)");
50
+ });
51
+ });
52
+ describe("convertToSARIF", () => {
53
+ it("generates valid SARIF structure", () => {
54
+ const result = createMockAggregatedResult();
55
+ const sarif = convertToSARIF(result);
56
+ expect(sarif.$schema).toContain("sarif-schema-2.1.0");
57
+ expect(sarif.version).toBe("2.1.0");
58
+ expect(sarif.runs).toHaveLength(1);
59
+ expect(sarif.runs[0].tool.driver.name).toBe("Vaspera DAST");
60
+ });
61
+ it("includes rules for each unique finding", () => {
62
+ const result = createMockAggregatedResult([
63
+ createMockFinding({ ruleId: "zap-40012", name: "XSS" }),
64
+ createMockFinding({ ruleId: "nuclei-CVE-2021-44228", name: "Log4j" }),
65
+ ]);
66
+ const sarif = convertToSARIF(result);
67
+ const rules = sarif.runs[0].tool.driver.rules;
68
+ expect(rules).toHaveLength(2);
69
+ expect(rules.map((r) => r.id)).toContain("zap-40012");
70
+ expect(rules.map((r) => r.id)).toContain("nuclei-CVE-2021-44228");
71
+ });
72
+ it("deduplicates rules", () => {
73
+ const result = createMockAggregatedResult([
74
+ createMockFinding({ ruleId: "zap-40012", url: "https://a.com" }),
75
+ createMockFinding({ ruleId: "zap-40012", url: "https://b.com" }),
76
+ ]);
77
+ const sarif = convertToSARIF(result);
78
+ expect(sarif.runs[0].tool.driver.rules).toHaveLength(1);
79
+ expect(sarif.runs[0].results).toHaveLength(2);
80
+ });
81
+ it("maps severity to SARIF levels", () => {
82
+ const result = createMockAggregatedResult([
83
+ createMockFinding({ severity: "critical", ruleId: "rule-1" }),
84
+ createMockFinding({ severity: "high", ruleId: "rule-2" }),
85
+ createMockFinding({ severity: "medium", ruleId: "rule-3" }),
86
+ createMockFinding({ severity: "low", ruleId: "rule-4" }),
87
+ ]);
88
+ const sarif = convertToSARIF(result);
89
+ const results = sarif.runs[0].results;
90
+ const findLevel = (ruleId) => results.find((r) => r.ruleId === ruleId)?.level;
91
+ expect(findLevel("rule-1")).toBe("error");
92
+ expect(findLevel("rule-2")).toBe("error");
93
+ expect(findLevel("rule-3")).toBe("warning");
94
+ expect(findLevel("rule-4")).toBe("note");
95
+ });
96
+ it("includes finding properties", () => {
97
+ const result = createMockAggregatedResult([
98
+ createMockFinding({
99
+ scanner: "zap",
100
+ confidence: 90,
101
+ cweIds: ["CWE-79"],
102
+ cveIds: ["CVE-2021-12345"],
103
+ evidence: "test evidence",
104
+ }),
105
+ ]);
106
+ const sarif = convertToSARIF(result);
107
+ const props = sarif.runs[0].results[0].properties;
108
+ expect(props.scanner).toBe("zap");
109
+ expect(props.confidence).toBe(90);
110
+ expect(props.cweIds).toContain("CWE-79");
111
+ expect(props.cveIds).toContain("CVE-2021-12345");
112
+ expect(props.evidence).toBe("test evidence");
113
+ });
114
+ });
115
+ describe("getDASTInstallInstructions", () => {
116
+ it("returns success message when all tools available", () => {
117
+ const availability = [
118
+ { scanner: "zap", available: true, version: "2.14.0" },
119
+ { scanner: "nuclei", available: true, version: "3.1.0" },
120
+ ];
121
+ const result = getDASTInstallInstructions(availability);
122
+ expect(result).toBe("All DAST tools are installed and available.");
123
+ });
124
+ it("returns ZAP instructions when ZAP unavailable", () => {
125
+ const availability = [
126
+ { scanner: "zap", available: false, error: "Not found" },
127
+ { scanner: "nuclei", available: true, version: "3.1.0" },
128
+ ];
129
+ const result = getDASTInstallInstructions(availability);
130
+ expect(result).toContain("OWASP ZAP");
131
+ expect(result).toContain("docker pull owasp/zap2docker-stable");
132
+ });
133
+ it("returns Nuclei instructions when Nuclei unavailable", () => {
134
+ const availability = [
135
+ { scanner: "zap", available: true, version: "2.14.0" },
136
+ { scanner: "nuclei", available: false, error: "Not found" },
137
+ ];
138
+ const result = getDASTInstallInstructions(availability);
139
+ expect(result).toContain("Nuclei");
140
+ expect(result).toContain("go install");
141
+ });
142
+ it("returns both instructions when both unavailable", () => {
143
+ const availability = [
144
+ { scanner: "zap", available: false, error: "Not found" },
145
+ { scanner: "nuclei", available: false, error: "Not found" },
146
+ ];
147
+ const result = getDASTInstallInstructions(availability);
148
+ expect(result).toContain("OWASP ZAP");
149
+ expect(result).toContain("Nuclei");
150
+ expect(result).toContain("docker pull owasp/zap2docker-stable");
151
+ expect(result).toContain("go install");
152
+ });
153
+ });
154
+ });
155
+ function createMockFinding(overrides = {}) {
156
+ return {
157
+ scanner: "zap",
158
+ ruleId: "zap-test",
159
+ name: "Test Finding",
160
+ description: "Test description",
161
+ severity: "medium",
162
+ confidence: 80,
163
+ url: "https://example.com/test",
164
+ timestamp: new Date().toISOString(),
165
+ ...overrides,
166
+ };
167
+ }
168
+ function createMockAggregatedResult(findings = [createMockFinding()]) {
169
+ const target = { url: "https://example.com" };
170
+ return {
171
+ timestamp: new Date().toISOString(),
172
+ target,
173
+ scanners: [],
174
+ totalFindings: findings.length,
175
+ uniqueFindings: findings,
176
+ bySeverity: {},
177
+ byScanner: { zap: 0, nuclei: 0 },
178
+ totalDuration: 1000,
179
+ allSucceeded: true,
180
+ failedScanners: [],
181
+ };
182
+ }
183
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/__tests__/scanners/dast/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,0BAA0B,GAC3B,MAAM,iCAAiC,CAAC;AAQzC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAkB;gBAC9B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;gBAClE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACpD,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxD,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,QAAQ,GAAkB;gBAC9B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;aACrD,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAkB;gBAC9B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;aAC9C,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,QAAQ,GAAkB;gBAC9B,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBACvD,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;aAC9D,CAAC;YAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAOlC,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,0BAA0B,CAAC;gBACxC,iBAAiB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvD,iBAAiB,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;aACtE,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAElC,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAE9C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,0BAA0B,CAAC;gBACxC,iBAAiB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC;gBAChE,iBAAiB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC;aACjE,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAKlC,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,0BAA0B,CAAC;gBACxC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAC7D,iBAAiB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACzD,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAC3D,iBAAiB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aACzD,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAElC,CAAC;YACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAEtC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE,CACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC;YAElD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,0BAA0B,CAAC;gBACxC,iBAAiB,CAAC;oBAChB,OAAO,EAAE,KAAK;oBACd,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,CAAC,QAAQ,CAAC;oBAClB,MAAM,EAAE,CAAC,gBAAgB,CAAC;oBAC1B,QAAQ,EAAE,eAAe;iBAC1B,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAYlC,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAElD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,YAAY,GAAuB;gBACvC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;gBACtD,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;aACzD,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,YAAY,GAAuB;gBACvC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;gBACxD,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;aACzD,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,YAAY,GAAuB;gBACvC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;gBACtD,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;aAC5D,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,YAAY,GAAuB;gBACvC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;gBACxD,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE;aAC5D,CAAC;YAEF,MAAM,MAAM,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,YAAkC,EAAE;IAC7D,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,EAAE;QACd,GAAG,EAAE,0BAA0B;QAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,WAA0B,CAAC,iBAAiB,EAAE,CAAC;IAE/C,MAAM,MAAM,GAAe,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC;IAE1D,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;QACN,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAChC,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nuclei.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuclei.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/scanners/dast/nuclei.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,166 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { parseNucleiResult } from "../../../scanners/dast/nuclei.js";
3
+ describe("nuclei scanner", () => {
4
+ describe("parseNucleiResult", () => {
5
+ it("parses Nuclei result to DASTFinding", () => {
6
+ const result = {
7
+ template: "cves/2021/CVE-2021-44228.yaml",
8
+ "template-url": "https://github.com/projectdiscovery/nuclei-templates/blob/main/cves/2021/CVE-2021-44228.yaml",
9
+ "template-id": "CVE-2021-44228",
10
+ "template-path": "/path/to/templates/cves/2021/CVE-2021-44228.yaml",
11
+ info: {
12
+ name: "Apache Log4j RCE",
13
+ author: ["pdteam"],
14
+ tags: ["cve", "cve2021", "rce", "log4j", "apache"],
15
+ description: "Apache Log4j2 <=2.14.1 JNDI features...",
16
+ reference: [
17
+ "https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
18
+ "https://logging.apache.org/log4j/2.x/security.html",
19
+ ],
20
+ severity: "critical",
21
+ metadata: { "max-request": 1 },
22
+ classification: {
23
+ "cve-id": ["CVE-2021-44228"],
24
+ "cwe-id": ["CWE-502", "CWE-400"],
25
+ },
26
+ },
27
+ type: "http",
28
+ host: "https://vulnerable-app.com",
29
+ matched: "https://vulnerable-app.com/api/log",
30
+ "extracted-results": ["${jndi:ldap://...}"],
31
+ ip: "192.168.1.1",
32
+ timestamp: "2024-01-15T10:30:00Z",
33
+ matcher: "regex",
34
+ "curl-command": "curl -X POST ...",
35
+ request: "POST /api/log HTTP/1.1\n...",
36
+ response: "HTTP/1.1 200 OK\n...",
37
+ };
38
+ const finding = parseNucleiResult(result);
39
+ expect(finding.scanner).toBe("nuclei");
40
+ expect(finding.ruleId).toBe("nuclei-CVE-2021-44228");
41
+ expect(finding.name).toBe("Apache Log4j RCE");
42
+ expect(finding.severity).toBe("critical");
43
+ expect(finding.confidence).toBe(95);
44
+ expect(finding.url).toBe("https://vulnerable-app.com/api/log");
45
+ expect(finding.cweIds).toContain("CWE-502");
46
+ expect(finding.cweIds).toContain("CWE-400");
47
+ expect(finding.cveIds).toContain("CVE-2021-44228");
48
+ expect(finding.tags).toContain("cve");
49
+ expect(finding.tags).toContain("log4j");
50
+ expect(finding.evidence).toBe("${jndi:ldap://...}");
51
+ expect(finding.references).toContain("https://nvd.nist.gov/vuln/detail/CVE-2021-44228");
52
+ expect(finding.references).toContain("https://github.com/projectdiscovery/nuclei-templates/blob/main/cves/2021/CVE-2021-44228.yaml");
53
+ });
54
+ it("maps Nuclei severity levels correctly", () => {
55
+ const severities = ["critical", "high", "medium", "low", "info", "unknown"];
56
+ const expected = ["critical", "high", "medium", "low", "info", "info"];
57
+ for (let i = 0; i < severities.length; i++) {
58
+ const result = createMockNucleiResult({ severity: severities[i] });
59
+ const finding = parseNucleiResult(result);
60
+ expect(finding.severity).toBe(expected[i]);
61
+ }
62
+ });
63
+ it("assigns confidence based on severity", () => {
64
+ const testCases = [
65
+ { severity: "critical", expectedConfidence: 95 },
66
+ { severity: "high", expectedConfidence: 90 },
67
+ { severity: "medium", expectedConfidence: 80 },
68
+ { severity: "low", expectedConfidence: 70 },
69
+ { severity: "info", expectedConfidence: 60 },
70
+ ];
71
+ for (const { severity, expectedConfidence } of testCases) {
72
+ const result = createMockNucleiResult({ severity });
73
+ const finding = parseNucleiResult(result);
74
+ expect(finding.confidence).toBe(expectedConfidence);
75
+ }
76
+ });
77
+ it("handles results without optional fields", () => {
78
+ const result = {
79
+ template: "http/misconfiguration/debug-enabled.yaml",
80
+ "template-id": "debug-enabled",
81
+ info: {
82
+ name: "Debug Mode Enabled",
83
+ author: ["tester"],
84
+ tags: ["misconfiguration"],
85
+ severity: "medium",
86
+ },
87
+ type: "http",
88
+ host: "https://example.com",
89
+ matched: "https://example.com/debug",
90
+ timestamp: "2024-01-15T10:30:00Z",
91
+ };
92
+ const finding = parseNucleiResult(result);
93
+ expect(finding.scanner).toBe("nuclei");
94
+ expect(finding.ruleId).toBe("nuclei-debug-enabled");
95
+ expect(finding.description).toBe("Debug Mode Enabled detected");
96
+ expect(finding.cweIds).toBeUndefined();
97
+ expect(finding.cveIds).toBeUndefined();
98
+ expect(finding.evidence).toBeUndefined();
99
+ });
100
+ it("extracts HTTP method from request", () => {
101
+ const postResult = createMockNucleiResult({ request: "POST /api/data HTTP/1.1\nHost: example.com" });
102
+ const getResult = createMockNucleiResult({ request: "GET /api/data HTTP/1.1\nHost: example.com" });
103
+ const putResult = createMockNucleiResult({ request: "PUT /api/data HTTP/1.1\nHost: example.com" });
104
+ expect(parseNucleiResult(postResult).method).toBe("POST");
105
+ expect(parseNucleiResult(getResult).method).toBe("GET");
106
+ expect(parseNucleiResult(putResult).method).toBe("PUT");
107
+ });
108
+ it("uses host as url fallback when matched is not present", () => {
109
+ const result = {
110
+ template: "test.yaml",
111
+ "template-id": "test",
112
+ info: {
113
+ name: "Test",
114
+ author: ["tester"],
115
+ tags: [],
116
+ severity: "info",
117
+ },
118
+ type: "http",
119
+ host: "https://example.com",
120
+ matched: "",
121
+ timestamp: "2024-01-15T10:30:00Z",
122
+ };
123
+ const finding = parseNucleiResult(result);
124
+ expect(finding.url).toBe("https://example.com");
125
+ });
126
+ it("formats CWE IDs with prefix", () => {
127
+ const result = createMockNucleiResult({
128
+ classification: {
129
+ "cwe-id": ["79", "CWE-89"],
130
+ },
131
+ });
132
+ const finding = parseNucleiResult(result);
133
+ expect(finding.cweIds).toContain("CWE-79");
134
+ expect(finding.cweIds).toContain("CWE-89");
135
+ });
136
+ it("joins multiple extracted results as evidence", () => {
137
+ const result = createMockNucleiResult({
138
+ "extracted-results": ["result1", "result2", "result3"],
139
+ });
140
+ const finding = parseNucleiResult(result);
141
+ expect(finding.evidence).toBe("result1\nresult2\nresult3");
142
+ });
143
+ });
144
+ });
145
+ function createMockNucleiResult(overrides = {}) {
146
+ const { severity, classification, request, "extracted-results": extractedResults, ...rest } = overrides;
147
+ return {
148
+ template: "test/template.yaml",
149
+ "template-id": "test-template",
150
+ info: {
151
+ name: "Test Template",
152
+ author: ["tester"],
153
+ tags: ["test"],
154
+ severity: severity || "medium",
155
+ classification: classification,
156
+ },
157
+ type: "http",
158
+ host: "https://test.example.com",
159
+ matched: "https://test.example.com/path",
160
+ timestamp: "2024-01-15T10:30:00Z",
161
+ request: request,
162
+ "extracted-results": extractedResults,
163
+ ...rest,
164
+ };
165
+ }
166
+ //# sourceMappingURL=nuclei.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuclei.test.js","sourceRoot":"","sources":["../../../../src/__tests__/scanners/dast/nuclei.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=zap.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zap.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/scanners/dast/zap.test.ts"],"names":[],"mappings":""}