circle-ir 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +200 -0
  3. package/configs/sinks/code_injection.yaml +672 -0
  4. package/configs/sinks/command.yaml +917 -0
  5. package/configs/sinks/deserialization.yaml +105 -0
  6. package/configs/sinks/ldap.yaml +136 -0
  7. package/configs/sinks/nodejs.json +629 -0
  8. package/configs/sinks/path.yaml +715 -0
  9. package/configs/sinks/python.json +501 -0
  10. package/configs/sinks/rust.json +339 -0
  11. package/configs/sinks/sql.yaml +233 -0
  12. package/configs/sinks/ssrf.yaml +160 -0
  13. package/configs/sinks/xpath.yaml +121 -0
  14. package/configs/sinks/xss.yaml +727 -0
  15. package/configs/sources/db_sources.yaml +90 -0
  16. package/configs/sources/env_sources.yaml +94 -0
  17. package/configs/sources/express.json +197 -0
  18. package/configs/sources/file_sources.yaml +164 -0
  19. package/configs/sources/http_sources.yaml +379 -0
  20. package/configs/sources/io_sources.yaml +519 -0
  21. package/configs/sources/network_sources.yaml +99 -0
  22. package/configs/sources/python.json +230 -0
  23. package/configs/sources/rust.json +286 -0
  24. package/configs/sources/spring.yaml +70 -0
  25. package/dist/analysis/advisory-db.d.ts +86 -0
  26. package/dist/analysis/advisory-db.js +104 -0
  27. package/dist/analysis/advisory-db.js.map +1 -0
  28. package/dist/analysis/cargo-parser.d.ts +42 -0
  29. package/dist/analysis/cargo-parser.js +102 -0
  30. package/dist/analysis/cargo-parser.js.map +1 -0
  31. package/dist/analysis/config-loader.d.ts +37 -0
  32. package/dist/analysis/config-loader.js +1561 -0
  33. package/dist/analysis/config-loader.js.map +1 -0
  34. package/dist/analysis/constant-propagation/ast-utils.d.ts +25 -0
  35. package/dist/analysis/constant-propagation/ast-utils.js +34 -0
  36. package/dist/analysis/constant-propagation/ast-utils.js.map +1 -0
  37. package/dist/analysis/constant-propagation/evaluator.d.ts +32 -0
  38. package/dist/analysis/constant-propagation/evaluator.js +296 -0
  39. package/dist/analysis/constant-propagation/evaluator.js.map +1 -0
  40. package/dist/analysis/constant-propagation/index.d.ts +62 -0
  41. package/dist/analysis/constant-propagation/index.js +152 -0
  42. package/dist/analysis/constant-propagation/index.js.map +1 -0
  43. package/dist/analysis/constant-propagation/patterns.d.ts +8 -0
  44. package/dist/analysis/constant-propagation/patterns.js +126 -0
  45. package/dist/analysis/constant-propagation/patterns.js.map +1 -0
  46. package/dist/analysis/constant-propagation/propagator.d.ts +180 -0
  47. package/dist/analysis/constant-propagation/propagator.js +1985 -0
  48. package/dist/analysis/constant-propagation/propagator.js.map +1 -0
  49. package/dist/analysis/constant-propagation/types.d.ts +63 -0
  50. package/dist/analysis/constant-propagation/types.js +5 -0
  51. package/dist/analysis/constant-propagation/types.js.map +1 -0
  52. package/dist/analysis/constant-propagation.d.ts +9 -0
  53. package/dist/analysis/constant-propagation.js +18 -0
  54. package/dist/analysis/constant-propagation.js.map +1 -0
  55. package/dist/analysis/dependency-scanner.d.ts +79 -0
  56. package/dist/analysis/dependency-scanner.js +122 -0
  57. package/dist/analysis/dependency-scanner.js.map +1 -0
  58. package/dist/analysis/dfg-verifier.d.ts +116 -0
  59. package/dist/analysis/dfg-verifier.js +399 -0
  60. package/dist/analysis/dfg-verifier.js.map +1 -0
  61. package/dist/analysis/findings.d.ts +11 -0
  62. package/dist/analysis/findings.js +228 -0
  63. package/dist/analysis/findings.js.map +1 -0
  64. package/dist/analysis/index.d.ts +16 -0
  65. package/dist/analysis/index.js +18 -0
  66. package/dist/analysis/index.js.map +1 -0
  67. package/dist/analysis/interprocedural.d.ts +99 -0
  68. package/dist/analysis/interprocedural.js +526 -0
  69. package/dist/analysis/interprocedural.js.map +1 -0
  70. package/dist/analysis/path-finder.d.ts +133 -0
  71. package/dist/analysis/path-finder.js +354 -0
  72. package/dist/analysis/path-finder.js.map +1 -0
  73. package/dist/analysis/rules.d.ts +75 -0
  74. package/dist/analysis/rules.js +332 -0
  75. package/dist/analysis/rules.js.map +1 -0
  76. package/dist/analysis/semver.d.ts +27 -0
  77. package/dist/analysis/semver.js +127 -0
  78. package/dist/analysis/semver.js.map +1 -0
  79. package/dist/analysis/taint-matcher.d.ts +15 -0
  80. package/dist/analysis/taint-matcher.js +634 -0
  81. package/dist/analysis/taint-matcher.js.map +1 -0
  82. package/dist/analysis/taint-propagation.d.ts +67 -0
  83. package/dist/analysis/taint-propagation.js +298 -0
  84. package/dist/analysis/taint-propagation.js.map +1 -0
  85. package/dist/analysis/unresolved.d.ts +14 -0
  86. package/dist/analysis/unresolved.js +202 -0
  87. package/dist/analysis/unresolved.js.map +1 -0
  88. package/dist/analyzer.d.ts +43 -0
  89. package/dist/analyzer.js +1010 -0
  90. package/dist/analyzer.js.map +1 -0
  91. package/dist/browser/circle-ir.js +16576 -0
  92. package/dist/browser.d.ts +38 -0
  93. package/dist/browser.js +38 -0
  94. package/dist/browser.js.map +1 -0
  95. package/dist/core/circle-ir-core.cjs +13626 -0
  96. package/dist/core/circle-ir-core.d.ts +59 -0
  97. package/dist/core/circle-ir-core.js +13591 -0
  98. package/dist/core/extractors/calls.d.ts +13 -0
  99. package/dist/core/extractors/calls.js +1429 -0
  100. package/dist/core/extractors/calls.js.map +1 -0
  101. package/dist/core/extractors/cfg.d.ts +9 -0
  102. package/dist/core/extractors/cfg.js +519 -0
  103. package/dist/core/extractors/cfg.js.map +1 -0
  104. package/dist/core/extractors/dfg.d.ts +12 -0
  105. package/dist/core/extractors/dfg.js +1081 -0
  106. package/dist/core/extractors/dfg.js.map +1 -0
  107. package/dist/core/extractors/exports.d.ts +14 -0
  108. package/dist/core/extractors/exports.js +80 -0
  109. package/dist/core/extractors/exports.js.map +1 -0
  110. package/dist/core/extractors/imports.d.ts +9 -0
  111. package/dist/core/extractors/imports.js +739 -0
  112. package/dist/core/extractors/imports.js.map +1 -0
  113. package/dist/core/extractors/index.d.ts +10 -0
  114. package/dist/core/extractors/index.js +11 -0
  115. package/dist/core/extractors/index.js.map +1 -0
  116. package/dist/core/extractors/meta.d.ts +10 -0
  117. package/dist/core/extractors/meta.js +109 -0
  118. package/dist/core/extractors/meta.js.map +1 -0
  119. package/dist/core/extractors/types.d.ts +10 -0
  120. package/dist/core/extractors/types.js +1479 -0
  121. package/dist/core/extractors/types.js.map +1 -0
  122. package/dist/core/index.d.ts +5 -0
  123. package/dist/core/index.js +8 -0
  124. package/dist/core/index.js.map +1 -0
  125. package/dist/core/parser.d.ts +84 -0
  126. package/dist/core/parser.js +250 -0
  127. package/dist/core/parser.js.map +1 -0
  128. package/dist/core-lib.d.ts +59 -0
  129. package/dist/core-lib.js +62 -0
  130. package/dist/core-lib.js.map +1 -0
  131. package/dist/index.d.ts +15 -0
  132. package/dist/index.js +20 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/languages/index.d.ts +11 -0
  135. package/dist/languages/index.js +14 -0
  136. package/dist/languages/index.js.map +1 -0
  137. package/dist/languages/plugins/base.d.ts +44 -0
  138. package/dist/languages/plugins/base.js +82 -0
  139. package/dist/languages/plugins/base.js.map +1 -0
  140. package/dist/languages/plugins/index.d.ts +14 -0
  141. package/dist/languages/plugins/index.js +25 -0
  142. package/dist/languages/plugins/index.js.map +1 -0
  143. package/dist/languages/plugins/java.d.ts +49 -0
  144. package/dist/languages/plugins/java.js +402 -0
  145. package/dist/languages/plugins/java.js.map +1 -0
  146. package/dist/languages/plugins/javascript.d.ts +48 -0
  147. package/dist/languages/plugins/javascript.js +445 -0
  148. package/dist/languages/plugins/javascript.js.map +1 -0
  149. package/dist/languages/plugins/python.d.ts +47 -0
  150. package/dist/languages/plugins/python.js +480 -0
  151. package/dist/languages/plugins/python.js.map +1 -0
  152. package/dist/languages/plugins/rust.d.ts +47 -0
  153. package/dist/languages/plugins/rust.js +405 -0
  154. package/dist/languages/plugins/rust.js.map +1 -0
  155. package/dist/languages/registry.d.ts +30 -0
  156. package/dist/languages/registry.js +80 -0
  157. package/dist/languages/registry.js.map +1 -0
  158. package/dist/languages/types.d.ts +184 -0
  159. package/dist/languages/types.js +8 -0
  160. package/dist/languages/types.js.map +1 -0
  161. package/dist/resolution/cross-file.d.ts +146 -0
  162. package/dist/resolution/cross-file.js +439 -0
  163. package/dist/resolution/cross-file.js.map +1 -0
  164. package/dist/resolution/index.d.ts +12 -0
  165. package/dist/resolution/index.js +10 -0
  166. package/dist/resolution/index.js.map +1 -0
  167. package/dist/resolution/symbol-table.d.ts +136 -0
  168. package/dist/resolution/symbol-table.js +336 -0
  169. package/dist/resolution/symbol-table.js.map +1 -0
  170. package/dist/resolution/type-hierarchy.d.ts +124 -0
  171. package/dist/resolution/type-hierarchy.js +515 -0
  172. package/dist/resolution/type-hierarchy.js.map +1 -0
  173. package/dist/types/config.d.ts +45 -0
  174. package/dist/types/config.js +5 -0
  175. package/dist/types/config.js.map +1 -0
  176. package/dist/types/index.d.ts +392 -0
  177. package/dist/types/index.js +7 -0
  178. package/dist/types/index.js.map +1 -0
  179. package/dist/utils/logger.d.ts +85 -0
  180. package/dist/utils/logger.js +198 -0
  181. package/dist/utils/logger.js.map +1 -0
  182. package/dist/wasm/tree-sitter-java.wasm +0 -0
  183. package/dist/wasm/tree-sitter-javascript.wasm +0 -0
  184. package/dist/wasm/tree-sitter-python.wasm +0 -0
  185. package/dist/wasm/tree-sitter-rust.wasm +0 -0
  186. package/dist/wasm/web-tree-sitter.wasm +0 -0
  187. package/docs/SPEC.md +1021 -0
  188. package/examples/browser-example.html +610 -0
  189. package/examples/node-example.ts +215 -0
  190. package/package.json +107 -0
  191. package/wasm/tree-sitter-java.wasm +0 -0
  192. package/wasm/tree-sitter-javascript.wasm +0 -0
  193. package/wasm/tree-sitter-python.wasm +0 -0
  194. package/wasm/tree-sitter-rust.wasm +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interprocedural.js","sourceRoot":"","sources":["../../src/analysis/interprocedural.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Path Finder - Enumerate all taint paths from sources to sinks
3
+ *
4
+ * Provides detailed flow visualization showing exactly how taint propagates
5
+ * through variable assignments, method calls, and returns.
6
+ */
7
+ import type { DFG, CallInfo, TaintSource, TaintSink, TaintSanitizer, SourceType, SinkType } from '../types/index.js';
8
+ /**
9
+ * A single hop in the taint path
10
+ */
11
+ export interface TaintHop {
12
+ line: number;
13
+ column?: number;
14
+ variable: string;
15
+ operation: 'source' | 'assign' | 'call_arg' | 'call_return' | 'field_read' | 'field_write' | 'array_access' | 'sink';
16
+ code?: string;
17
+ description: string;
18
+ }
19
+ /**
20
+ * Complete taint path from source to sink
21
+ */
22
+ export interface TaintPath {
23
+ id: string;
24
+ source: {
25
+ line: number;
26
+ type: SourceType;
27
+ variable: string;
28
+ code?: string;
29
+ };
30
+ sink: {
31
+ line: number;
32
+ type: SinkType;
33
+ method: string;
34
+ code?: string;
35
+ };
36
+ hops: TaintHop[];
37
+ sanitized: boolean;
38
+ sanitizer?: {
39
+ line: number;
40
+ method: string;
41
+ };
42
+ confidence: number;
43
+ length: number;
44
+ }
45
+ /**
46
+ * Result of path finding analysis
47
+ */
48
+ export interface PathFinderResult {
49
+ paths: TaintPath[];
50
+ summary: {
51
+ totalPaths: number;
52
+ sanitizedPaths: number;
53
+ vulnerablePaths: number;
54
+ avgPathLength: number;
55
+ maxPathLength: number;
56
+ };
57
+ }
58
+ /**
59
+ * Configuration for path finding
60
+ */
61
+ export interface PathFinderConfig {
62
+ maxPathLength?: number;
63
+ maxPathsPerSink?: number;
64
+ includeCode?: boolean;
65
+ sourceLines?: string[];
66
+ }
67
+ /**
68
+ * PathFinder - Enumerate taint paths through the DFG
69
+ */
70
+ export declare class PathFinder {
71
+ private dfg;
72
+ private calls;
73
+ private sources;
74
+ private sinks;
75
+ private sanitizers;
76
+ private config;
77
+ private defById;
78
+ private defsByLine;
79
+ private defsByVar;
80
+ private usesByLine;
81
+ private usesByDefId;
82
+ private callsByLine;
83
+ private sanitizerLines;
84
+ constructor(dfg: DFG, calls: CallInfo[], sources: TaintSource[], sinks: TaintSink[], sanitizers: TaintSanitizer[], config?: PathFinderConfig);
85
+ /**
86
+ * Build all lookup maps for efficient querying
87
+ */
88
+ private buildLookupMaps;
89
+ /**
90
+ * Find all taint paths from sources to sinks
91
+ */
92
+ findAllPaths(): PathFinderResult;
93
+ /**
94
+ * Find all paths from a specific source
95
+ */
96
+ private findPathsFromSource;
97
+ /**
98
+ * Check if a definition reaches a sink
99
+ */
100
+ private reachesSink;
101
+ /**
102
+ * Create a hop description between two definitions
103
+ */
104
+ private createHop;
105
+ /**
106
+ * Calculate confidence based on path characteristics
107
+ */
108
+ private calculateConfidence;
109
+ /**
110
+ * Get source code at a specific line
111
+ */
112
+ private getCodeAtLine;
113
+ /**
114
+ * Find paths to a specific sink
115
+ */
116
+ findPathsToSink(sinkLine: number): TaintPath[];
117
+ /**
118
+ * Find paths from a specific source
119
+ */
120
+ findPathsFromSourceLine(sourceLine: number): TaintPath[];
121
+ /**
122
+ * Get a summary of paths grouped by sink type
123
+ */
124
+ getPathsBySinkType(): Map<SinkType, TaintPath[]>;
125
+ }
126
+ /**
127
+ * Convenience function to find all paths
128
+ */
129
+ export declare function findTaintPaths(dfg: DFG, calls: CallInfo[], sources: TaintSource[], sinks: TaintSink[], sanitizers?: TaintSanitizer[], config?: PathFinderConfig): PathFinderResult;
130
+ /**
131
+ * Format a taint path for display
132
+ */
133
+ export declare function formatTaintPath(path: TaintPath): string;
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Path Finder - Enumerate all taint paths from sources to sinks
3
+ *
4
+ * Provides detailed flow visualization showing exactly how taint propagates
5
+ * through variable assignments, method calls, and returns.
6
+ */
7
+ /**
8
+ * PathFinder - Enumerate taint paths through the DFG
9
+ */
10
+ export class PathFinder {
11
+ dfg;
12
+ calls;
13
+ sources;
14
+ sinks;
15
+ sanitizers;
16
+ config;
17
+ // Lookup maps
18
+ defById = new Map();
19
+ defsByLine = new Map();
20
+ defsByVar = new Map();
21
+ usesByLine = new Map();
22
+ usesByDefId = new Map();
23
+ callsByLine = new Map();
24
+ sanitizerLines = new Set();
25
+ constructor(dfg, calls, sources, sinks, sanitizers, config = {}) {
26
+ this.dfg = dfg;
27
+ this.calls = calls;
28
+ this.sources = sources;
29
+ this.sinks = sinks;
30
+ this.sanitizers = sanitizers;
31
+ this.config = {
32
+ maxPathLength: config.maxPathLength ?? 50,
33
+ maxPathsPerSink: config.maxPathsPerSink ?? 10,
34
+ includeCode: config.includeCode ?? false,
35
+ sourceLines: config.sourceLines ?? [],
36
+ };
37
+ this.buildLookupMaps();
38
+ }
39
+ /**
40
+ * Build all lookup maps for efficient querying
41
+ */
42
+ buildLookupMaps() {
43
+ for (const def of this.dfg.defs) {
44
+ this.defById.set(def.id, def);
45
+ const byLine = this.defsByLine.get(def.line) ?? [];
46
+ byLine.push(def);
47
+ this.defsByLine.set(def.line, byLine);
48
+ const byVar = this.defsByVar.get(def.variable) ?? [];
49
+ byVar.push(def);
50
+ this.defsByVar.set(def.variable, byVar);
51
+ }
52
+ for (const use of this.dfg.uses) {
53
+ const byLine = this.usesByLine.get(use.line) ?? [];
54
+ byLine.push(use);
55
+ this.usesByLine.set(use.line, byLine);
56
+ if (use.def_id !== null) {
57
+ const byDefId = this.usesByDefId.get(use.def_id) ?? [];
58
+ byDefId.push(use);
59
+ this.usesByDefId.set(use.def_id, byDefId);
60
+ }
61
+ }
62
+ for (const call of this.calls) {
63
+ const byLine = this.callsByLine.get(call.location.line) ?? [];
64
+ byLine.push(call);
65
+ this.callsByLine.set(call.location.line, byLine);
66
+ }
67
+ for (const sanitizer of this.sanitizers) {
68
+ this.sanitizerLines.add(sanitizer.line);
69
+ }
70
+ }
71
+ /**
72
+ * Find all taint paths from sources to sinks
73
+ */
74
+ findAllPaths() {
75
+ const paths = [];
76
+ let pathId = 1;
77
+ for (const source of this.sources) {
78
+ // Find variable defined at source line
79
+ const sourceDefs = this.defsByLine.get(source.line) ?? [];
80
+ for (const sourceDef of sourceDefs) {
81
+ // Find paths from this source to all reachable sinks
82
+ const pathsFromSource = this.findPathsFromSource(source, sourceDef, pathId);
83
+ paths.push(...pathsFromSource);
84
+ pathId += pathsFromSource.length;
85
+ }
86
+ }
87
+ // Calculate summary statistics
88
+ const vulnerablePaths = paths.filter(p => !p.sanitized);
89
+ const avgLength = paths.length > 0
90
+ ? paths.reduce((sum, p) => sum + p.length, 0) / paths.length
91
+ : 0;
92
+ const maxLength = paths.length > 0
93
+ ? Math.max(...paths.map(p => p.length))
94
+ : 0;
95
+ return {
96
+ paths,
97
+ summary: {
98
+ totalPaths: paths.length,
99
+ sanitizedPaths: paths.filter(p => p.sanitized).length,
100
+ vulnerablePaths: vulnerablePaths.length,
101
+ avgPathLength: Math.round(avgLength * 10) / 10,
102
+ maxPathLength: maxLength,
103
+ },
104
+ };
105
+ }
106
+ /**
107
+ * Find all paths from a specific source
108
+ */
109
+ findPathsFromSource(source, sourceDef, startPathId) {
110
+ const paths = [];
111
+ const pathsPerSink = new Map(); // sink line -> path count
112
+ const initialHop = {
113
+ line: source.line,
114
+ variable: sourceDef.variable,
115
+ operation: 'source',
116
+ description: `Taint introduced from ${source.type}`,
117
+ code: this.getCodeAtLine(source.line),
118
+ };
119
+ const queue = [{
120
+ currentDef: sourceDef,
121
+ hops: [initialHop],
122
+ visited: new Set([sourceDef.id]),
123
+ sanitizer: undefined,
124
+ }];
125
+ while (queue.length > 0) {
126
+ const state = queue.shift();
127
+ // Check path length limit
128
+ if (state.hops.length > this.config.maxPathLength) {
129
+ continue;
130
+ }
131
+ // Check if current position reaches any sink
132
+ for (const sink of this.sinks) {
133
+ const sinkCount = pathsPerSink.get(sink.line) ?? 0;
134
+ if (sinkCount >= this.config.maxPathsPerSink)
135
+ continue;
136
+ if (this.reachesSink(state.currentDef, sink)) {
137
+ const sinkHop = {
138
+ line: sink.line,
139
+ variable: state.currentDef.variable,
140
+ operation: 'sink',
141
+ description: `Flows into ${sink.type} sink`,
142
+ code: this.getCodeAtLine(sink.line),
143
+ };
144
+ const call = this.callsByLine.get(sink.line)?.[0];
145
+ paths.push({
146
+ id: `path-${startPathId + paths.length}`,
147
+ source: {
148
+ line: source.line,
149
+ type: source.type,
150
+ variable: sourceDef.variable,
151
+ code: this.getCodeAtLine(source.line),
152
+ },
153
+ sink: {
154
+ line: sink.line,
155
+ type: sink.type,
156
+ method: call?.method_name ?? 'unknown',
157
+ code: this.getCodeAtLine(sink.line),
158
+ },
159
+ hops: [...state.hops, sinkHop],
160
+ sanitized: state.sanitizer !== undefined,
161
+ sanitizer: state.sanitizer,
162
+ confidence: this.calculateConfidence(state.hops.length, state.sanitizer !== undefined),
163
+ length: state.hops.length + 1,
164
+ });
165
+ pathsPerSink.set(sink.line, sinkCount + 1);
166
+ }
167
+ }
168
+ // Find next hops via uses of current definition
169
+ const uses = this.usesByDefId.get(state.currentDef.id) ?? [];
170
+ for (const use of uses) {
171
+ // Check for sanitizer at this line
172
+ let sanitizer = state.sanitizer;
173
+ if (this.sanitizerLines.has(use.line) && !sanitizer) {
174
+ const san = this.sanitizers.find(s => s.line === use.line);
175
+ if (san) {
176
+ sanitizer = { line: san.line, method: san.method };
177
+ }
178
+ }
179
+ // Find definitions at the use line (assignments)
180
+ const nextDefs = this.defsByLine.get(use.line) ?? [];
181
+ for (const nextDef of nextDefs) {
182
+ if (state.visited.has(nextDef.id))
183
+ continue;
184
+ const hop = this.createHop(state.currentDef, nextDef, use);
185
+ const newVisited = new Set(state.visited);
186
+ newVisited.add(nextDef.id);
187
+ queue.push({
188
+ currentDef: nextDef,
189
+ hops: [...state.hops, hop],
190
+ visited: newVisited,
191
+ sanitizer,
192
+ });
193
+ }
194
+ // Also follow to same variable uses at later lines (implicit flow)
195
+ const laterDefs = (this.defsByVar.get(use.variable) ?? [])
196
+ .filter(d => d.line > use.line && !state.visited.has(d.id));
197
+ for (const laterDef of laterDefs.slice(0, 3)) { // Limit branching
198
+ const hop = {
199
+ line: laterDef.line,
200
+ variable: laterDef.variable,
201
+ operation: 'assign',
202
+ description: `Reassigned at line ${laterDef.line}`,
203
+ code: this.getCodeAtLine(laterDef.line),
204
+ };
205
+ const newVisited = new Set(state.visited);
206
+ newVisited.add(laterDef.id);
207
+ queue.push({
208
+ currentDef: laterDef,
209
+ hops: [...state.hops, hop],
210
+ visited: newVisited,
211
+ sanitizer,
212
+ });
213
+ }
214
+ }
215
+ }
216
+ return paths;
217
+ }
218
+ /**
219
+ * Check if a definition reaches a sink
220
+ */
221
+ reachesSink(def, sink) {
222
+ // Check if the variable is used at the sink line
223
+ const uses = this.usesByLine.get(sink.line) ?? [];
224
+ for (const use of uses) {
225
+ if (use.variable === def.variable || use.def_id === def.id) {
226
+ return true;
227
+ }
228
+ }
229
+ // Check if any call at the sink line uses this variable
230
+ const calls = this.callsByLine.get(sink.line) ?? [];
231
+ for (const call of calls) {
232
+ for (const arg of call.arguments) {
233
+ if (arg.variable === def.variable) {
234
+ return true;
235
+ }
236
+ }
237
+ }
238
+ return false;
239
+ }
240
+ /**
241
+ * Create a hop description between two definitions
242
+ */
243
+ createHop(fromDef, toDef, use) {
244
+ const call = this.callsByLine.get(toDef.line)?.[0];
245
+ let operation = 'assign';
246
+ let description = `Assigned to ${toDef.variable}`;
247
+ if (call) {
248
+ // Check if it's a call return assignment
249
+ if (toDef.variable !== fromDef.variable) {
250
+ operation = 'call_return';
251
+ description = `Return value from ${call.method_name}() assigned to ${toDef.variable}`;
252
+ }
253
+ else {
254
+ operation = 'call_arg';
255
+ description = `Passed to ${call.method_name}()`;
256
+ }
257
+ }
258
+ else if (toDef.kind === 'field') {
259
+ operation = 'field_write';
260
+ description = `Written to field ${toDef.variable}`;
261
+ }
262
+ return {
263
+ line: toDef.line,
264
+ variable: toDef.variable,
265
+ operation,
266
+ description,
267
+ code: this.getCodeAtLine(toDef.line),
268
+ };
269
+ }
270
+ /**
271
+ * Calculate confidence based on path characteristics
272
+ */
273
+ calculateConfidence(pathLength, sanitized) {
274
+ if (sanitized)
275
+ return 0.1;
276
+ // Shorter paths are more confident
277
+ if (pathLength <= 3)
278
+ return 0.95;
279
+ if (pathLength <= 5)
280
+ return 0.9;
281
+ if (pathLength <= 10)
282
+ return 0.8;
283
+ if (pathLength <= 20)
284
+ return 0.7;
285
+ return 0.6;
286
+ }
287
+ /**
288
+ * Get source code at a specific line
289
+ */
290
+ getCodeAtLine(line) {
291
+ if (!this.config.includeCode || this.config.sourceLines.length === 0) {
292
+ return undefined;
293
+ }
294
+ const idx = line - 1;
295
+ if (idx >= 0 && idx < this.config.sourceLines.length) {
296
+ return this.config.sourceLines[idx].trim();
297
+ }
298
+ return undefined;
299
+ }
300
+ /**
301
+ * Find paths to a specific sink
302
+ */
303
+ findPathsToSink(sinkLine) {
304
+ const result = this.findAllPaths();
305
+ return result.paths.filter(p => p.sink.line === sinkLine);
306
+ }
307
+ /**
308
+ * Find paths from a specific source
309
+ */
310
+ findPathsFromSourceLine(sourceLine) {
311
+ const result = this.findAllPaths();
312
+ return result.paths.filter(p => p.source.line === sourceLine);
313
+ }
314
+ /**
315
+ * Get a summary of paths grouped by sink type
316
+ */
317
+ getPathsBySinkType() {
318
+ const result = this.findAllPaths();
319
+ const grouped = new Map();
320
+ for (const path of result.paths) {
321
+ const existing = grouped.get(path.sink.type) ?? [];
322
+ existing.push(path);
323
+ grouped.set(path.sink.type, existing);
324
+ }
325
+ return grouped;
326
+ }
327
+ }
328
+ /**
329
+ * Convenience function to find all paths
330
+ */
331
+ export function findTaintPaths(dfg, calls, sources, sinks, sanitizers = [], config = {}) {
332
+ const finder = new PathFinder(dfg, calls, sources, sinks, sanitizers, config);
333
+ return finder.findAllPaths();
334
+ }
335
+ /**
336
+ * Format a taint path for display
337
+ */
338
+ export function formatTaintPath(path) {
339
+ const lines = [];
340
+ lines.push(`Path ${path.id}: ${path.source.type} → ${path.sink.type}`);
341
+ lines.push(` Confidence: ${Math.round(path.confidence * 100)}%`);
342
+ if (path.sanitized) {
343
+ lines.push(` ⚠ Sanitized at line ${path.sanitizer?.line} by ${path.sanitizer?.method}`);
344
+ }
345
+ lines.push(' Flow:');
346
+ for (const hop of path.hops) {
347
+ const marker = hop.operation === 'source' ? '→' :
348
+ hop.operation === 'sink' ? '⇒' : '·';
349
+ const codeSnippet = hop.code ? ` | ${hop.code}` : '';
350
+ lines.push(` ${marker} Line ${hop.line}: ${hop.description}${codeSnippet}`);
351
+ }
352
+ return lines.join('\n');
353
+ }
354
+ //# sourceMappingURL=path-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-finder.js","sourceRoot":"","sources":["../../src/analysis/path-finder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Centralized Security Rule Definitions
3
+ *
4
+ * Single source of truth for vulnerability types, severity levels,
5
+ * descriptions, and remediation advice used across the codebase.
6
+ */
7
+ import type { SinkType, Severity } from '../types/index.js';
8
+ /** Sinks that warrant critical severity when exploitable. */
9
+ export declare const CRITICAL_SINKS: SinkType[];
10
+ /** Sinks that warrant high severity. */
11
+ export declare const HIGH_SINKS: SinkType[];
12
+ /** Source types that represent direct HTTP user input. */
13
+ export declare const HIGH_SEVERITY_SOURCES: string[];
14
+ export interface RuleInfo {
15
+ /** Human-readable vulnerability name */
16
+ name: string;
17
+ /** Brief description for summaries */
18
+ shortDescription: string;
19
+ /** Detailed description for reports */
20
+ fullDescription: string;
21
+ /** Remediation guidance */
22
+ remediation: string;
23
+ /** CVSS-like severity score (0-10 scale as string) */
24
+ cvssScore: string;
25
+ /** Severity level category */
26
+ severityLevel: Severity;
27
+ /** CWE identifier */
28
+ cwe: string;
29
+ }
30
+ /**
31
+ * Complete rule definitions for all supported vulnerability types.
32
+ */
33
+ export declare const RULE_DEFINITIONS: Record<SinkType, RuleInfo>;
34
+ /**
35
+ * Get complete rule information for a sink type.
36
+ */
37
+ export declare function getRuleInfo(sinkType: SinkType | string): RuleInfo;
38
+ /**
39
+ * Get remediation advice for a sink type.
40
+ */
41
+ export declare function getRemediation(sinkType: SinkType | string): string;
42
+ /**
43
+ * Get severity level for a sink type.
44
+ */
45
+ export declare function getSeverityLevel(sinkType: SinkType | string): Severity;
46
+ /**
47
+ * Get CWE identifier for a sink type.
48
+ */
49
+ export declare function getCwe(sinkType: SinkType | string): string;
50
+ /**
51
+ * Check if a sink type is critical severity.
52
+ */
53
+ export declare function isCriticalSink(sinkType: SinkType | string): boolean;
54
+ /**
55
+ * Check if a sink type is high severity.
56
+ */
57
+ export declare function isHighSink(sinkType: SinkType | string): boolean;
58
+ /**
59
+ * Get human-readable description for a source type.
60
+ */
61
+ export declare function getSourceDescription(sourceType: string): string;
62
+ /**
63
+ * Get human-readable description for a sink type.
64
+ */
65
+ export declare function getSinkDescription(sinkType: SinkType | string): string;
66
+ export interface SeverityContext {
67
+ sourceType?: string;
68
+ sinkType: SinkType | string;
69
+ pathExists: boolean;
70
+ confidence?: number;
71
+ }
72
+ /**
73
+ * Calculate severity based on source, sink, and path information.
74
+ */
75
+ export declare function calculateSeverity(context: SeverityContext): Severity;