circle-ir 3.179.0 → 3.180.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/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +14 -0
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/dependency-versions.d.ts +59 -0
- package/dist/analysis/dependency-versions.d.ts.map +1 -1
- package/dist/analysis/dependency-versions.js +149 -0
- package/dist/analysis/dependency-versions.js.map +1 -1
- package/dist/analysis/passes/deserialization-safety-gate-pass.d.ts.map +1 -1
- package/dist/analysis/passes/deserialization-safety-gate-pass.js +6 -2
- package/dist/analysis/passes/deserialization-safety-gate-pass.js.map +1 -1
- package/dist/analysis/passes/python-receiver-taint-format-pass.d.ts +48 -0
- package/dist/analysis/passes/python-receiver-taint-format-pass.d.ts.map +1 -0
- package/dist/analysis/passes/python-receiver-taint-format-pass.js +91 -0
- package/dist/analysis/passes/python-receiver-taint-format-pass.js.map +1 -0
- package/dist/analyzer.d.ts +24 -0
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +9 -0
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +108 -1
- package/dist/core/circle-ir-core.cjs +14 -0
- package/dist/core/circle-ir-core.js +14 -0
- package/package.json +1 -1
|
@@ -80,6 +80,36 @@ export declare function resolveFastjsonFromPom(pomXml: string): FastjsonPomResol
|
|
|
80
80
|
* - `subprojects { }` / `allprojects { }` conditional declarations
|
|
81
81
|
*/
|
|
82
82
|
export declare function resolveFastjsonFromGradle(buildGradle: string): FastjsonPomResolution | null;
|
|
83
|
+
/**
|
|
84
|
+
* Extract the effective Fastjson version from a Gradle version-catalog
|
|
85
|
+
* (`gradle/libs.versions.toml`) combined with the `build.gradle` script
|
|
86
|
+
* that references it via a `libs.<alias>` accessor.
|
|
87
|
+
*
|
|
88
|
+
* cognium-dev #261 (Gradle catalog slice, extending the direct-Gradle
|
|
89
|
+
* shape landed in the first Gradle slice).
|
|
90
|
+
*
|
|
91
|
+
* Recognises the two common `[libraries]` entry shapes:
|
|
92
|
+
*
|
|
93
|
+
* fastjson = { module = "com.alibaba:fastjson", version.ref = "fastjson" }
|
|
94
|
+
* fastjson = { group = "com.alibaba", name = "fastjson", version.ref = "fastjson" }
|
|
95
|
+
*
|
|
96
|
+
* The version can be either a `version.ref` pointer into the
|
|
97
|
+
* `[versions]` section, or an inline `version = "…"` on the library
|
|
98
|
+
* entry itself. Both forms are handled.
|
|
99
|
+
*
|
|
100
|
+
* The build.gradle must reference the resolved alias via a
|
|
101
|
+
* `libs.<alias>` accessor (or `libs.<dashed>` — Gradle normalises
|
|
102
|
+
* dashes to dots for accessor names, but at the toml level the key
|
|
103
|
+
* uses the original form; we match the toml alias here). If the alias
|
|
104
|
+
* isn't referenced anywhere in the build.gradle, returns null — an
|
|
105
|
+
* unreferenced catalog entry is not an active dependency.
|
|
106
|
+
*
|
|
107
|
+
* Returns null when no fastjson library entry exists, when the version
|
|
108
|
+
* cannot be resolved, or when the alias is defined but unreferenced.
|
|
109
|
+
* The `DeserializationSafetyGatePass` then falls through to its
|
|
110
|
+
* default "do not drop" behaviour.
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveFastjsonFromGradleCatalog(buildGradle: string, libsVersionsToml: string): FastjsonPomResolution | null;
|
|
83
113
|
/**
|
|
84
114
|
* Result of extracting the effective PyYAML version. `safeByDefault` is
|
|
85
115
|
* true when the parsed version is ≥ 6.0; at that point pyyaml.load()
|
|
@@ -156,6 +186,35 @@ export declare function isPyYamlVersionSafeByDefault(version: string): boolean;
|
|
|
156
186
|
* the gate.
|
|
157
187
|
*/
|
|
158
188
|
export declare function fileHasUnsafePyYamlLoader(sourceLines: string[], sinkLine: number): boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Generic result: the declared version string + the parsed feature list
|
|
191
|
+
* (for `[dependencies] pkg = { version = "…", features = ["safe"] }`
|
|
192
|
+
* shapes). Returns null when the dep is absent, or when the version is
|
|
193
|
+
* a `{ git = "…" }` / `{ path = "…" }` non-registry source (no version
|
|
194
|
+
* string to compare against). Feature-set matching is left to the
|
|
195
|
+
* caller; this helper only parses.
|
|
196
|
+
*/
|
|
197
|
+
export interface CargoDepResolution {
|
|
198
|
+
version: string;
|
|
199
|
+
features: string[];
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract the declared version + feature list for a named crate from a
|
|
203
|
+
* `Cargo.toml`. Recognises the standard `[dependencies]` (and
|
|
204
|
+
* `[dev-dependencies]` / `[build-dependencies]`) shapes:
|
|
205
|
+
*
|
|
206
|
+
* pkg = "1.2.3" — bare string
|
|
207
|
+
* pkg = { version = "1.2.3" } — table with version
|
|
208
|
+
* pkg = { version = "1.2.3", features = ["a", "b"] }
|
|
209
|
+
* pkg = { git = "…" } — git source (no version)
|
|
210
|
+
* pkg = { path = "…" } — path source (no version)
|
|
211
|
+
*
|
|
212
|
+
* Cross-table dependency declarations (`[dependencies.pkg]`) are not
|
|
213
|
+
* yet recognised; those are less common and can be added when needed.
|
|
214
|
+
* Regex-based rather than a full TOML parser to keep the runtime-dep
|
|
215
|
+
* list minimal (Pillar I).
|
|
216
|
+
*/
|
|
217
|
+
export declare function resolveDepFromCargoToml(cargoToml: string, crateName: string): CargoDepResolution | null;
|
|
159
218
|
/**
|
|
160
219
|
* Return true when the given source text contains an in-file call that
|
|
161
220
|
* re-enables Fastjson autotype. Even a `_noneautotype` build does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-versions.d.ts","sourceRoot":"","sources":["../../src/analysis/dependency-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA8BnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"dependency-versions.d.ts","sourceRoot":"","sources":["../../src/analysis/dependency-versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA8BnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA4D3F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,qBAAqB,GAAG,IAAI,CAkE9B;AAMD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,MAAM,GACtB,gBAAgB,GAAG,IAAI,CAuBzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,MAAM,GACpB,gBAAgB,GAAG,IAAI,CAiCzB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAkBT;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,kBAAkB,GAAG,IAAI,CAsC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAKrE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAUtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOrE"}
|
|
@@ -112,6 +112,26 @@ export function resolveFastjsonFromGradle(buildGradle) {
|
|
|
112
112
|
const version = direct[1];
|
|
113
113
|
return { version, noneAutotype: /_noneautotype/i.test(version) };
|
|
114
114
|
}
|
|
115
|
+
// Shape 4 — `constraints { }` block with a `version { strictly/
|
|
116
|
+
// require/prefer 'X' }` sub-block. cognium-dev #261 (extended forms).
|
|
117
|
+
//
|
|
118
|
+
// constraints {
|
|
119
|
+
// implementation('com.alibaba:fastjson') {
|
|
120
|
+
// version {
|
|
121
|
+
// strictly '1.2.83_noneautotype'
|
|
122
|
+
// }
|
|
123
|
+
// }
|
|
124
|
+
// }
|
|
125
|
+
//
|
|
126
|
+
// Non-greedy `[\s\S]*?` across the outer + inner braces so we don't
|
|
127
|
+
// fuse sibling constraint entries. Accepts strictly / require /
|
|
128
|
+
// prefer — all three specify a concrete version.
|
|
129
|
+
const constraintsBlockRe = /['"(]\s*com\.alibaba:fastjson\s*['")]\s*\)?\s*\{[\s\S]*?\bversion\s*\{[\s\S]*?\b(?:strictly|require|prefer)\s+['"]([^'"\s]+)['"]/;
|
|
130
|
+
const constraintsBlock = buildGradle.match(constraintsBlockRe);
|
|
131
|
+
if (constraintsBlock) {
|
|
132
|
+
const version = constraintsBlock[1];
|
|
133
|
+
return { version, noneAutotype: /_noneautotype/i.test(version) };
|
|
134
|
+
}
|
|
115
135
|
// Shapes 2 + 3 — property reference. Capture the property name (either
|
|
116
136
|
// `${name}` Groovy form or `$name` bare form; Kotlin uses the same
|
|
117
137
|
// string-template syntax as Groovy for this case).
|
|
@@ -135,6 +155,86 @@ export function resolveFastjsonFromGradle(buildGradle) {
|
|
|
135
155
|
const version = def[1];
|
|
136
156
|
return { version, noneAutotype: /_noneautotype/i.test(version) };
|
|
137
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Extract the effective Fastjson version from a Gradle version-catalog
|
|
160
|
+
* (`gradle/libs.versions.toml`) combined with the `build.gradle` script
|
|
161
|
+
* that references it via a `libs.<alias>` accessor.
|
|
162
|
+
*
|
|
163
|
+
* cognium-dev #261 (Gradle catalog slice, extending the direct-Gradle
|
|
164
|
+
* shape landed in the first Gradle slice).
|
|
165
|
+
*
|
|
166
|
+
* Recognises the two common `[libraries]` entry shapes:
|
|
167
|
+
*
|
|
168
|
+
* fastjson = { module = "com.alibaba:fastjson", version.ref = "fastjson" }
|
|
169
|
+
* fastjson = { group = "com.alibaba", name = "fastjson", version.ref = "fastjson" }
|
|
170
|
+
*
|
|
171
|
+
* The version can be either a `version.ref` pointer into the
|
|
172
|
+
* `[versions]` section, or an inline `version = "…"` on the library
|
|
173
|
+
* entry itself. Both forms are handled.
|
|
174
|
+
*
|
|
175
|
+
* The build.gradle must reference the resolved alias via a
|
|
176
|
+
* `libs.<alias>` accessor (or `libs.<dashed>` — Gradle normalises
|
|
177
|
+
* dashes to dots for accessor names, but at the toml level the key
|
|
178
|
+
* uses the original form; we match the toml alias here). If the alias
|
|
179
|
+
* isn't referenced anywhere in the build.gradle, returns null — an
|
|
180
|
+
* unreferenced catalog entry is not an active dependency.
|
|
181
|
+
*
|
|
182
|
+
* Returns null when no fastjson library entry exists, when the version
|
|
183
|
+
* cannot be resolved, or when the alias is defined but unreferenced.
|
|
184
|
+
* The `DeserializationSafetyGatePass` then falls through to its
|
|
185
|
+
* default "do not drop" behaviour.
|
|
186
|
+
*/
|
|
187
|
+
export function resolveFastjsonFromGradleCatalog(buildGradle, libsVersionsToml) {
|
|
188
|
+
if (!buildGradle || !libsVersionsToml)
|
|
189
|
+
return null;
|
|
190
|
+
// 1. Locate the [libraries] block. Non-greedy to next `[section]` or EOF.
|
|
191
|
+
const librariesMatch = libsVersionsToml.match(/\[libraries\]([\s\S]*?)(?=\n\[|$)/);
|
|
192
|
+
if (!librariesMatch)
|
|
193
|
+
return null;
|
|
194
|
+
const librariesBlock = librariesMatch[1];
|
|
195
|
+
// 2. Find the alias whose entry maps to com.alibaba:fastjson. Try
|
|
196
|
+
// both `module = "com.alibaba:fastjson"` and split
|
|
197
|
+
// `group = "com.alibaba"` + `name = "fastjson"` forms.
|
|
198
|
+
const moduleForm = librariesBlock.match(/^\s*([\w.-]+)\s*=\s*\{[^}]*\bmodule\s*=\s*"com\.alibaba:fastjson"[^}]*\}/m);
|
|
199
|
+
const groupNameForm = librariesBlock.match(/^\s*([\w.-]+)\s*=\s*\{[^}]*\bgroup\s*=\s*"com\.alibaba"[^}]*\bname\s*=\s*"fastjson"[^}]*\}/m);
|
|
200
|
+
const entry = moduleForm ?? groupNameForm;
|
|
201
|
+
if (!entry)
|
|
202
|
+
return null;
|
|
203
|
+
const alias = entry[1];
|
|
204
|
+
const entryBody = entry[0];
|
|
205
|
+
// 3. The build script must actually consume this alias — an unused
|
|
206
|
+
// catalog entry is not an active dep. The Gradle accessor form is
|
|
207
|
+
// `libs.<alias>` (or `libs.<pathified>` for dot-separated aliases;
|
|
208
|
+
// for the MVP we match the alias verbatim).
|
|
209
|
+
const aliasEsc = alias.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
210
|
+
const aliasRefRe = new RegExp(`\\blibs\\s*\\.\\s*${aliasEsc}\\b`);
|
|
211
|
+
if (!aliasRefRe.test(buildGradle))
|
|
212
|
+
return null;
|
|
213
|
+
// 4. Extract version. Inline `version = "..."` on the library entry
|
|
214
|
+
// beats `version.ref` if both are present (matches Gradle's own
|
|
215
|
+
// resolution).
|
|
216
|
+
const inlineVersionM = entryBody.match(/\bversion\s*=\s*"([^"$][^"]*)"/);
|
|
217
|
+
if (inlineVersionM) {
|
|
218
|
+
const version = inlineVersionM[1];
|
|
219
|
+
return { version, noneAutotype: /_noneautotype/i.test(version) };
|
|
220
|
+
}
|
|
221
|
+
const versionRefM = entryBody.match(/\bversion\.ref\s*=\s*"([^"]+)"/);
|
|
222
|
+
if (!versionRefM)
|
|
223
|
+
return null;
|
|
224
|
+
const versionAlias = versionRefM[1];
|
|
225
|
+
// 5. Look up the version-alias in the [versions] block.
|
|
226
|
+
const versionsMatch = libsVersionsToml.match(/\[versions\]([\s\S]*?)(?=\n\[|$)/);
|
|
227
|
+
if (!versionsMatch)
|
|
228
|
+
return null;
|
|
229
|
+
const versionsBlock = versionsMatch[1];
|
|
230
|
+
const versionAliasEsc = versionAlias.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
231
|
+
const versionLineRe = new RegExp(`^\\s*${versionAliasEsc}\\s*=\\s*"([^"]+)"`, 'm');
|
|
232
|
+
const versionLine = versionsBlock.match(versionLineRe);
|
|
233
|
+
if (!versionLine)
|
|
234
|
+
return null;
|
|
235
|
+
const version = versionLine[1];
|
|
236
|
+
return { version, noneAutotype: /_noneautotype/i.test(version) };
|
|
237
|
+
}
|
|
138
238
|
/**
|
|
139
239
|
* Extract the effective PyYAML version from a `requirements.txt` file.
|
|
140
240
|
* Recognises the standard PEP 508 shapes (`==`, `>=`, `~=`, `>`,
|
|
@@ -264,6 +364,55 @@ export function fileHasUnsafePyYamlLoader(sourceLines, sinkLine) {
|
|
|
264
364
|
}
|
|
265
365
|
return false;
|
|
266
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* Extract the declared version + feature list for a named crate from a
|
|
369
|
+
* `Cargo.toml`. Recognises the standard `[dependencies]` (and
|
|
370
|
+
* `[dev-dependencies]` / `[build-dependencies]`) shapes:
|
|
371
|
+
*
|
|
372
|
+
* pkg = "1.2.3" — bare string
|
|
373
|
+
* pkg = { version = "1.2.3" } — table with version
|
|
374
|
+
* pkg = { version = "1.2.3", features = ["a", "b"] }
|
|
375
|
+
* pkg = { git = "…" } — git source (no version)
|
|
376
|
+
* pkg = { path = "…" } — path source (no version)
|
|
377
|
+
*
|
|
378
|
+
* Cross-table dependency declarations (`[dependencies.pkg]`) are not
|
|
379
|
+
* yet recognised; those are less common and can be added when needed.
|
|
380
|
+
* Regex-based rather than a full TOML parser to keep the runtime-dep
|
|
381
|
+
* list minimal (Pillar I).
|
|
382
|
+
*/
|
|
383
|
+
export function resolveDepFromCargoToml(cargoToml, crateName) {
|
|
384
|
+
if (!cargoToml || !crateName)
|
|
385
|
+
return null;
|
|
386
|
+
const nameEsc = crateName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
387
|
+
// Shape 1: bare string — `pkg = "1.2.3"`.
|
|
388
|
+
const bareRe = new RegExp(`^\\s*${nameEsc}\\s*=\\s*"([\\d.]+[^"\\s]*)"`, 'm');
|
|
389
|
+
const bare = cargoToml.match(bareRe);
|
|
390
|
+
if (bare) {
|
|
391
|
+
return { version: bare[1], features: [] };
|
|
392
|
+
}
|
|
393
|
+
// Shape 2: inline table — `pkg = { version = "1.2.3", features = [...] }`.
|
|
394
|
+
// Match the table body then extract version + optional features.
|
|
395
|
+
const tableRe = new RegExp(`^\\s*${nameEsc}\\s*=\\s*\\{([^}]*)\\}`, 'm');
|
|
396
|
+
const table = cargoToml.match(tableRe);
|
|
397
|
+
if (!table)
|
|
398
|
+
return null;
|
|
399
|
+
const body = table[1];
|
|
400
|
+
const versionM = body.match(/\bversion\s*=\s*"([\d.]+[^"\s]*)"/);
|
|
401
|
+
if (!versionM)
|
|
402
|
+
return null;
|
|
403
|
+
const version = versionM[1];
|
|
404
|
+
const featuresM = body.match(/\bfeatures\s*=\s*\[([^\]]*)\]/);
|
|
405
|
+
const features = [];
|
|
406
|
+
if (featuresM) {
|
|
407
|
+
const featureStr = featuresM[1];
|
|
408
|
+
const re = /"([^"]+)"/g;
|
|
409
|
+
let m;
|
|
410
|
+
while ((m = re.exec(featureStr)) !== null) {
|
|
411
|
+
features.push(m[1]);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return { version, features };
|
|
415
|
+
}
|
|
267
416
|
/**
|
|
268
417
|
* Return true when the given source text contains an in-file call that
|
|
269
418
|
* re-enables Fastjson autotype. Even a `_noneautotype` build does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-versions.js","sourceRoot":"","sources":["../../src/analysis/dependency-versions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependency-versions.js","sourceRoot":"","sources":["../../src/analysis/dependency-versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialization-safety-gate-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/deserialization-safety-gate-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"deserialization-safety-gate-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/deserialization-safety-gate-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAa3D,MAAM,WAAW,+BAA+B;IAC9C,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;CACvB;AAeD,qBAAa,6BACX,YAAW,YAAY,CAAC,+BAA+B,CAAC;IAK5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAH/C,QAAQ,CAAC,IAAI,iCAAiC;IAC9C,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;gBAEX,iBAAiB,CAAC,EAAE,iBAAiB,YAAA;IAElE,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,+BAA+B;CAqIvD"}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
*
|
|
39
39
|
* See `docs/PASSES.md` for the canonical pass registry entry.
|
|
40
40
|
*/
|
|
41
|
-
import { resolveFastjsonFromPom, resolveFastjsonFromGradle, resolvePyYamlFromRequirements, resolvePyYamlFromPyproject, fileHasUnsafePyYamlLoader, fileReenablesFastjsonAutotype, fileEnablesJacksonPolymorphism, fileConfiguresSnakeYamlSafely, } from '../dependency-versions.js';
|
|
41
|
+
import { resolveFastjsonFromPom, resolveFastjsonFromGradle, resolveFastjsonFromGradleCatalog, resolvePyYamlFromRequirements, resolvePyYamlFromPyproject, fileHasUnsafePyYamlLoader, fileReenablesFastjsonAutotype, fileEnablesJacksonPolymorphism, fileConfiguresSnakeYamlSafely, } from '../dependency-versions.js';
|
|
42
42
|
const FASTJSON_METHODS = new Set(['parseObject', 'parse']);
|
|
43
43
|
const FASTJSON_CLASSES = new Set(['JSON', 'JSONObject']);
|
|
44
44
|
const JACKSON_METHODS = new Set(['readValue', 'convertValue', 'treeToValue']);
|
|
@@ -77,8 +77,12 @@ export class DeserializationSafetyGatePass {
|
|
|
77
77
|
// classifier is sufficient to drop the sink.
|
|
78
78
|
const pomXml = this.dependencyContext?.java?.pomXml;
|
|
79
79
|
const buildGradle = this.dependencyContext?.java?.buildGradle;
|
|
80
|
+
const libsVersionsToml = this.dependencyContext?.java?.libsVersionsToml;
|
|
80
81
|
const fastjson = (pomXml ? resolveFastjsonFromPom(pomXml) : null) ??
|
|
81
|
-
(buildGradle ? resolveFastjsonFromGradle(buildGradle) : null)
|
|
82
|
+
(buildGradle ? resolveFastjsonFromGradle(buildGradle) : null) ??
|
|
83
|
+
(buildGradle && libsVersionsToml
|
|
84
|
+
? resolveFastjsonFromGradleCatalog(buildGradle, libsVersionsToml)
|
|
85
|
+
: null);
|
|
82
86
|
const fastjsonHardened = fastjson?.noneAutotype === true &&
|
|
83
87
|
!fileReenablesFastjsonAutotype(code);
|
|
84
88
|
// --- Gate B: Jackson polymorphism ---------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserialization-safety-gate-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/deserialization-safety-gate-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAMH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAanC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAEzD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;AAElE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACjE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,+DAA+D;AAC/D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEzC,MAAM,OAAO,6BAA6B;IAMX;IAHpB,IAAI,GAAG,6BAA6B,CAAC;IACrC,QAAQ,GAAG,UAAmB,CAAC;IAExC,YAA6B,iBAAqC;QAArC,sBAAiB,GAAjB,iBAAiB,CAAoB;IAAG,CAAC;IAEtE,GAAG,CAAC,GAAgB;QAClB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QAEtC,8DAA8D;QAC9D,8DAA8D;QAC9D,oBAAoB;QACpB,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjD,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,0DAA0D;QAC1D,kEAAkE;QAClE,4DAA4D;QAC5D,+DAA+D;QAC/D,MAAM,KAAK,GAAgB,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC;YACrD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAmB,aAAa,CAAC,CAAC,KAAK;YACtD,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QAEzB,0EAA0E;QAC1E,iEAAiE;QACjE,+DAA+D;QAC/D,kEAAkE;QAClE,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC;QAC9D,MAAM,QAAQ,GACZ,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChD,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"deserialization-safety-gate-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/deserialization-safety-gate-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PythonReceiverTaintFormatPass — cognium-dev #264 (Python receiver-taint).
|
|
3
|
+
*
|
|
4
|
+
* Emits `format_string` (CWE-134) findings for Python `.format(...)`
|
|
5
|
+
* calls whose RECEIVER is tainted. The pre-#264-Python-slice sink
|
|
6
|
+
* patterns key exclusively on `arg_positions`, which cannot represent
|
|
7
|
+
* a taint that lives on the call's receiver — Python's
|
|
8
|
+
* `str.format(*args)` shape puts the format template AS the receiver,
|
|
9
|
+
* not as an argument. Same is true of the `%`-operator shape
|
|
10
|
+
* (`taintedFmt % args`), which lives entirely in a binary-operator
|
|
11
|
+
* AST node, not a call.
|
|
12
|
+
*
|
|
13
|
+
* This pass takes the receiver-taint half of that gap by scanning
|
|
14
|
+
* `graph.ir.calls` for `.format(...)` calls whose receiver appears in
|
|
15
|
+
* the constant-propagation `tainted` set. On a hit, emits a direct
|
|
16
|
+
* `format_string` finding at the call site (severity `medium`, level
|
|
17
|
+
* `warning`).
|
|
18
|
+
*
|
|
19
|
+
* The `%`-operator half is genuinely bigger — needs a new AST scan
|
|
20
|
+
* over `binary_operator` nodes with format-shape RHS detection — and
|
|
21
|
+
* remains deferred on #264.
|
|
22
|
+
*
|
|
23
|
+
* Python-only. No-op on other languages.
|
|
24
|
+
*
|
|
25
|
+
* Pipeline slot: runs after `ConstantPropagationPass` so the
|
|
26
|
+
* `tainted` set is populated. Any pass position after
|
|
27
|
+
* `constant-propagation` is safe; placing near the sink-emission
|
|
28
|
+
* chain keeps like-with-like grouped.
|
|
29
|
+
*
|
|
30
|
+
* Direct-finding emission (via `ctx.addFinding`) rather than
|
|
31
|
+
* synthetic-sink emission because the format-string vulnerability
|
|
32
|
+
* here doesn't need a taint-source → sink flow trace: the
|
|
33
|
+
* `constant-propagation.tainted` set implicitly encodes that the
|
|
34
|
+
* receiver traces back to a source. Emitting a sink would require
|
|
35
|
+
* TaintPropagationPass to also understand receiver-taint, which
|
|
36
|
+
* would be a much broader engine change.
|
|
37
|
+
*/
|
|
38
|
+
import type { AnalysisPass, PassContext } from '../../graph/analysis-pass.js';
|
|
39
|
+
export interface PythonReceiverTaintFormatResult {
|
|
40
|
+
/** Number of `.format()` calls flagged this run. */
|
|
41
|
+
findingsEmitted: number;
|
|
42
|
+
}
|
|
43
|
+
export declare class PythonReceiverTaintFormatPass implements AnalysisPass<PythonReceiverTaintFormatResult> {
|
|
44
|
+
readonly name = "python-receiver-taint-format";
|
|
45
|
+
readonly category: "security";
|
|
46
|
+
run(ctx: PassContext): PythonReceiverTaintFormatResult;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=python-receiver-taint-format-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-receiver-taint-format-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/python-receiver-taint-format-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG9E,MAAM,WAAW,+BAA+B;IAC9C,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,6BACX,YAAW,YAAY,CAAC,+BAA+B,CAAC;IAExD,QAAQ,CAAC,IAAI,kCAAkC;IAC/C,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,+BAA+B;CAsDvD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PythonReceiverTaintFormatPass — cognium-dev #264 (Python receiver-taint).
|
|
3
|
+
*
|
|
4
|
+
* Emits `format_string` (CWE-134) findings for Python `.format(...)`
|
|
5
|
+
* calls whose RECEIVER is tainted. The pre-#264-Python-slice sink
|
|
6
|
+
* patterns key exclusively on `arg_positions`, which cannot represent
|
|
7
|
+
* a taint that lives on the call's receiver — Python's
|
|
8
|
+
* `str.format(*args)` shape puts the format template AS the receiver,
|
|
9
|
+
* not as an argument. Same is true of the `%`-operator shape
|
|
10
|
+
* (`taintedFmt % args`), which lives entirely in a binary-operator
|
|
11
|
+
* AST node, not a call.
|
|
12
|
+
*
|
|
13
|
+
* This pass takes the receiver-taint half of that gap by scanning
|
|
14
|
+
* `graph.ir.calls` for `.format(...)` calls whose receiver appears in
|
|
15
|
+
* the constant-propagation `tainted` set. On a hit, emits a direct
|
|
16
|
+
* `format_string` finding at the call site (severity `medium`, level
|
|
17
|
+
* `warning`).
|
|
18
|
+
*
|
|
19
|
+
* The `%`-operator half is genuinely bigger — needs a new AST scan
|
|
20
|
+
* over `binary_operator` nodes with format-shape RHS detection — and
|
|
21
|
+
* remains deferred on #264.
|
|
22
|
+
*
|
|
23
|
+
* Python-only. No-op on other languages.
|
|
24
|
+
*
|
|
25
|
+
* Pipeline slot: runs after `ConstantPropagationPass` so the
|
|
26
|
+
* `tainted` set is populated. Any pass position after
|
|
27
|
+
* `constant-propagation` is safe; placing near the sink-emission
|
|
28
|
+
* chain keeps like-with-like grouped.
|
|
29
|
+
*
|
|
30
|
+
* Direct-finding emission (via `ctx.addFinding`) rather than
|
|
31
|
+
* synthetic-sink emission because the format-string vulnerability
|
|
32
|
+
* here doesn't need a taint-source → sink flow trace: the
|
|
33
|
+
* `constant-propagation.tainted` set implicitly encodes that the
|
|
34
|
+
* receiver traces back to a source. Emitting a sink would require
|
|
35
|
+
* TaintPropagationPass to also understand receiver-taint, which
|
|
36
|
+
* would be a much broader engine change.
|
|
37
|
+
*/
|
|
38
|
+
export class PythonReceiverTaintFormatPass {
|
|
39
|
+
name = 'python-receiver-taint-format';
|
|
40
|
+
category = 'security';
|
|
41
|
+
run(ctx) {
|
|
42
|
+
if (ctx.language !== 'python') {
|
|
43
|
+
return { findingsEmitted: 0 };
|
|
44
|
+
}
|
|
45
|
+
const { calls, meta } = ctx.graph.ir;
|
|
46
|
+
const constProp = ctx.getResult('constant-propagation');
|
|
47
|
+
const tainted = constProp.tainted;
|
|
48
|
+
let count = 0;
|
|
49
|
+
for (const call of calls) {
|
|
50
|
+
if (call.method_name !== 'format')
|
|
51
|
+
continue;
|
|
52
|
+
const receiver = call.receiver;
|
|
53
|
+
if (!receiver)
|
|
54
|
+
continue;
|
|
55
|
+
// Only bare-identifier receivers can be looked up in the tainted
|
|
56
|
+
// set. Skip complex receivers (`obj.attr.format()`, `f(x).format()`)
|
|
57
|
+
// — those don't correspond to a variable name the taint tracker
|
|
58
|
+
// would have on file. Recall may improve later with attribute-
|
|
59
|
+
// chain resolution, but the direct-identifier form is the common
|
|
60
|
+
// shape for user-controlled templates.
|
|
61
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(receiver))
|
|
62
|
+
continue;
|
|
63
|
+
// constant-propagation stores both scoped (`method:var`) and
|
|
64
|
+
// unscoped forms in the tainted set. Check both.
|
|
65
|
+
const scopedName = call.in_method
|
|
66
|
+
? `${call.in_method}:${receiver}`
|
|
67
|
+
: receiver;
|
|
68
|
+
if (!tainted.has(receiver) && !tainted.has(scopedName))
|
|
69
|
+
continue;
|
|
70
|
+
ctx.addFinding({
|
|
71
|
+
id: `format_string-${meta.file}-${call.location.line}-${receiver}`,
|
|
72
|
+
pass: this.name,
|
|
73
|
+
category: 'security',
|
|
74
|
+
rule_id: 'format_string',
|
|
75
|
+
cwe: 'CWE-134',
|
|
76
|
+
severity: 'medium',
|
|
77
|
+
level: 'warning',
|
|
78
|
+
message: `Format-string vulnerability: the format template \`${receiver}\` ` +
|
|
79
|
+
`is tainted (traces back to a taint source). Attacker can leak ` +
|
|
80
|
+
`object attributes via \`{obj.__class__.__mro__[…]}\` chains or ` +
|
|
81
|
+
`crash the process via unbounded specifiers. Use a literal ` +
|
|
82
|
+
`format string and pass user input as an argument instead.`,
|
|
83
|
+
file: meta.file,
|
|
84
|
+
line: call.location.line,
|
|
85
|
+
});
|
|
86
|
+
count++;
|
|
87
|
+
}
|
|
88
|
+
return { findingsEmitted: count };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=python-receiver-taint-format-pass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python-receiver-taint-format-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/python-receiver-taint-format-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAUH,MAAM,OAAO,6BAA6B;IAG/B,IAAI,GAAG,8BAA8B,CAAC;IACtC,QAAQ,GAAG,UAAmB,CAAC;IAExC,GAAG,CAAC,GAAgB;QAClB,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAC7B,sBAAsB,CACvB,CAAC;QACF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAElC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ;gBAAE,SAAS;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,iEAAiE;YACjE,qEAAqE;YACrE,gEAAgE;YAChE,+DAA+D;YAC/D,iEAAiE;YACjE,uCAAuC;YACvC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAEzD,6DAA6D;YAC7D,iDAAiD;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS;gBAC/B,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,EAAE;gBACjC,CAAC,CAAC,QAAQ,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAEjE,GAAG,CAAC,UAAU,CAAC;gBACb,EAAE,EAAE,iBAAiB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,EAAE;gBAClE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,eAAe;gBACxB,GAAG,EAAE,SAAS;gBACd,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,SAAS;gBAChB,OAAO,EACL,sDAAsD,QAAQ,KAAK;oBACnE,gEAAgE;oBAChE,iEAAiE;oBACjE,4DAA4D;oBAC5D,2DAA2D;gBAC7D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;aACzB,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;QACV,CAAC;QAED,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC;CACF"}
|
package/dist/analyzer.d.ts
CHANGED
|
@@ -241,6 +241,15 @@ export interface DependencyContext {
|
|
|
241
241
|
* dependency. Added by cognium-dev #261 (Gradle-first slice).
|
|
242
242
|
*/
|
|
243
243
|
buildGradle?: string;
|
|
244
|
+
/**
|
|
245
|
+
* Raw `gradle/libs.versions.toml` content (Gradle version-catalog).
|
|
246
|
+
* When present alongside `buildGradle`, the gate follows any
|
|
247
|
+
* `libs.<alias>` reference in the build script through the
|
|
248
|
+
* `[libraries]` and `[versions]` sections of the catalog to resolve
|
|
249
|
+
* the effective declared version. Added by cognium-dev #261
|
|
250
|
+
* (Gradle catalog slice).
|
|
251
|
+
*/
|
|
252
|
+
libsVersionsToml?: string;
|
|
244
253
|
};
|
|
245
254
|
/**
|
|
246
255
|
* Python project manifests (added cognium-dev #261 Python slice). Both
|
|
@@ -256,6 +265,21 @@ export interface DependencyContext {
|
|
|
256
265
|
/** Raw `pyproject.toml` content (Poetry / PEP 621). */
|
|
257
266
|
pyprojectToml?: string;
|
|
258
267
|
};
|
|
268
|
+
/**
|
|
269
|
+
* Rust project manifest (added cognium-dev #261 Rust slice).
|
|
270
|
+
*
|
|
271
|
+
* **Plumbing shipped ahead of gate integration.** Currently no gate
|
|
272
|
+
* consumes `cargoToml`: `serde_yaml` is deprecated (no safe successor
|
|
273
|
+
* to gate on), `bincode` has no safe-mode feature, and no other Rust
|
|
274
|
+
* deserialization sink in `DEFAULT_SINKS` has a clean version-safety
|
|
275
|
+
* story. The field + `resolveDepFromCargoToml` helper are shipped so
|
|
276
|
+
* future work can attach a gate without another round of API-surface
|
|
277
|
+
* additions when a real Rust FP-driving case appears.
|
|
278
|
+
*/
|
|
279
|
+
rust?: {
|
|
280
|
+
/** Raw `Cargo.toml` content. */
|
|
281
|
+
cargoToml?: string;
|
|
282
|
+
};
|
|
259
283
|
}
|
|
260
284
|
/**
|
|
261
285
|
* Per-pass configuration options.
|
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAA2B,eAAe,EAAe,cAAc,EAAgE,MAAM,kBAAkB,CAAC;AACxM,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAcL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAmD7B,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAKlH,OAAO,EAA2B,KAAK,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAe1H,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACjH,OAAO,EAAuB,KAAK,sBAAsB,EAA6B,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/analyzer.js
CHANGED
|
@@ -122,6 +122,7 @@ import { GodClassPass } from './analysis/passes/god-class-pass.js';
|
|
|
122
122
|
import { NamingConventionPass } from './analysis/passes/naming-convention-pass.js';
|
|
123
123
|
import { SecurityHeadersPass, checkInheritedCorsHeaders } from './analysis/passes/security-headers-pass.js';
|
|
124
124
|
import { ScanSecretsPass } from './analysis/passes/scan-secrets-pass.js';
|
|
125
|
+
import { PythonReceiverTaintFormatPass } from './analysis/passes/python-receiver-taint-format-pass.js';
|
|
125
126
|
import { Spring4ShellPass } from './analysis/passes/spring4shell-pass.js';
|
|
126
127
|
import { InsecureCookiePass } from './analysis/passes/insecure-cookie-pass.js';
|
|
127
128
|
import { WeakHashPass } from './analysis/passes/weak-hash-pass.js';
|
|
@@ -560,6 +561,14 @@ export async function analyze(code, filePath, language, options = {}) {
|
|
|
560
561
|
// `hardcoded-credential` findings are already in the dedup buffer.
|
|
561
562
|
if (!disabledPasses.has('scan-secrets'))
|
|
562
563
|
pipeline.add(new ScanSecretsPass());
|
|
564
|
+
// cognium-dev #264 Python receiver-taint: emits format_string
|
|
565
|
+
// (CWE-134) findings for Python `.format(...)` calls whose
|
|
566
|
+
// receiver appears in the constant-propagation tainted set.
|
|
567
|
+
// Direct-finding emission (not sink emission) — no downstream flow
|
|
568
|
+
// generation needed since the tainted set implicitly encodes the
|
|
569
|
+
// source-to-receiver trace. Python-only; no-op on other languages.
|
|
570
|
+
if (!disabledPasses.has('python-receiver-taint-format'))
|
|
571
|
+
pipeline.add(new PythonReceiverTaintFormatPass());
|
|
563
572
|
// Optional passes — can be disabled via disabledPasses
|
|
564
573
|
if (!disabledPasses.has('dead-code'))
|
|
565
574
|
pipeline.add(new DeadCodePass());
|