circle-ir 3.54.0 → 3.56.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 +36 -3
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/findings.d.ts.map +1 -1
- package/dist/analysis/findings.js +11 -6
- package/dist/analysis/findings.js.map +1 -1
- package/dist/analysis/passes/csrf-protection-disabled-pass.d.ts +42 -0
- package/dist/analysis/passes/csrf-protection-disabled-pass.d.ts.map +1 -0
- package/dist/analysis/passes/csrf-protection-disabled-pass.js +185 -0
- package/dist/analysis/passes/csrf-protection-disabled-pass.js.map +1 -0
- package/dist/analysis/passes/mass-assignment-pass.d.ts +41 -0
- package/dist/analysis/passes/mass-assignment-pass.d.ts.map +1 -0
- package/dist/analysis/passes/mass-assignment-pass.js +124 -0
- package/dist/analysis/passes/mass-assignment-pass.js.map +1 -0
- package/dist/analysis/passes/weak-crypto-pass.d.ts +10 -0
- package/dist/analysis/passes/weak-crypto-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-crypto-pass.js +263 -3
- package/dist/analysis/passes/weak-crypto-pass.js.map +1 -1
- package/dist/analysis/passes/xml-entity-expansion-pass.d.ts +58 -0
- package/dist/analysis/passes/xml-entity-expansion-pass.d.ts.map +1 -0
- package/dist/analysis/passes/xml-entity-expansion-pass.js +196 -0
- package/dist/analysis/passes/xml-entity-expansion-pass.js.map +1 -0
- package/dist/analysis/rules.d.ts.map +1 -1
- package/dist/analysis/rules.js +18 -0
- package/dist/analysis/rules.js.map +1 -1
- package/dist/analysis/taint-propagation.js +1 -1
- package/dist/analysis/taint-propagation.js.map +1 -1
- 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 +533 -14
- package/dist/core/circle-ir-core.cjs +40 -5
- package/dist/core/circle-ir-core.js +40 -5
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -27,6 +27,12 @@
|
|
|
27
27
|
* `Crypto.Cipher.Blowfish.new(...)` (pycryptodome / pycrypto)
|
|
28
28
|
* - `cryptography.hazmat.primitives.ciphers.algorithms.{TripleDES,Blowfish,ARC4,IDEA,SEED,CAST5}`
|
|
29
29
|
* - `AES.new(key, AES.MODE_ECB)` — ECB mode argument
|
|
30
|
+
* - `modes.ECB()` (cryptography.hazmat) — issue #87
|
|
31
|
+
* - `AES.new(b"literal", …)` / `algorithms.AES(b"literal")` — hardcoded
|
|
32
|
+
* symmetric key (CWE-321, issue #87). Detected for both inline byte
|
|
33
|
+
* literals and variables resolved via constant propagation.
|
|
34
|
+
* - `rsa.generate_private_key(key_size=<2048)` — weak RSA key size
|
|
35
|
+
* (CWE-326, issue #87)
|
|
30
36
|
* JavaScript / TypeScript:
|
|
31
37
|
* - `crypto.createCipher(...)` (deprecated; always weak)
|
|
32
38
|
* - `crypto.createCipheriv("des-..."|"rc4"|"bf-..."|"des-ede"|".*-ecb")`
|
|
@@ -34,6 +40,10 @@
|
|
|
34
40
|
* - `des.NewCipher(...)` / `des.NewTripleDESCipher(...)` / `rc4.NewCipher(...)`
|
|
35
41
|
* (from `crypto/des` and `crypto/rc4`)
|
|
36
42
|
* - `cipher.NewECBEncrypter(...)` (custom ECB wrappers — best-effort)
|
|
43
|
+
* - `aes.NewCipher([]byte("literal"))` — hardcoded symmetric key
|
|
44
|
+
* (CWE-321, issue #87)
|
|
45
|
+
* - `rsa.GenerateKey(rand.Reader, <2048)` — weak RSA key size
|
|
46
|
+
* (CWE-326, issue #87)
|
|
37
47
|
*
|
|
38
48
|
* Aligned with: gosec G401/G405, Bandit B304/B305/B306, OWASP Benchmark `crypto` category.
|
|
39
49
|
*/
|
|
@@ -163,6 +173,183 @@ function detectHardcodedKeyJava(call) {
|
|
|
163
173
|
return `literal string`;
|
|
164
174
|
return null;
|
|
165
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Detect a hardcoded symmetric key passed as the first positional argument
|
|
178
|
+
* of a Python cipher constructor (`AES.new`, `DES.new`, `algorithms.AES(…)`,
|
|
179
|
+
* etc.).
|
|
180
|
+
*
|
|
181
|
+
* Patterns flagged (returns a human-readable detail string):
|
|
182
|
+
* - inline bytes literal `b"…"` / `b'…'`
|
|
183
|
+
* - inline string literal `"…"` / `'…'` (legacy pycrypto style)
|
|
184
|
+
* - variable resolved by constant propagation to a string/bytes constant
|
|
185
|
+
*
|
|
186
|
+
* Returns null when the key argument is a runtime value (function call,
|
|
187
|
+
* env-var lookup, parameter, etc.).
|
|
188
|
+
*/
|
|
189
|
+
function detectHardcodedKeyPython(call, constProp, literalBindings) {
|
|
190
|
+
const arg = call.arguments.find((a) => a.position === 0);
|
|
191
|
+
if (!arg)
|
|
192
|
+
return null;
|
|
193
|
+
// Prefer `expression` over `literal` — the Python plugin's `literal`
|
|
194
|
+
// field strips the trailing quote on bytes literals, breaking the
|
|
195
|
+
// `^b"…"$` regex.
|
|
196
|
+
const expr = (arg.expression ?? arg.literal ?? '').trim();
|
|
197
|
+
if (!expr)
|
|
198
|
+
return null;
|
|
199
|
+
// Inline bytes literal: b"…" / b'…' / rb"…" / br"…"
|
|
200
|
+
if (/^[bB][rR]?["'][^"']*["']$/.test(expr) || /^[rR][bB]["'][^"']*["']$/.test(expr)) {
|
|
201
|
+
return `literal bytes ${expr.slice(0, 24)}${expr.length > 24 ? '…' : ''}`;
|
|
202
|
+
}
|
|
203
|
+
// Inline plain string literal: "…" / '…'
|
|
204
|
+
if (/^["'][^"']*["']$/.test(expr)) {
|
|
205
|
+
return `literal string ${expr.slice(0, 24)}${expr.length > 24 ? '…' : ''}`;
|
|
206
|
+
}
|
|
207
|
+
// Variable resolved by constant propagation (Java symbol table).
|
|
208
|
+
if (arg.variable && constProp) {
|
|
209
|
+
const sym = constProp.symbols.get(arg.variable);
|
|
210
|
+
if (sym && sym.type === 'string' && typeof sym.value === 'string') {
|
|
211
|
+
return `constant-propagated bytes from \`${arg.variable}\``;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Variable bound to a literal RHS earlier in the file (regex scan
|
|
215
|
+
// fallback for languages whose const-prop pass does not yet track
|
|
216
|
+
// string/bytes assignments).
|
|
217
|
+
if (arg.variable) {
|
|
218
|
+
const lit = literalBindings.get(arg.variable);
|
|
219
|
+
if (lit) {
|
|
220
|
+
return `literal-bound ${arg.variable} = ${lit.slice(0, 24)}${lit.length > 24 ? '…' : ''}`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Detect a hardcoded symmetric key passed as the first positional argument
|
|
227
|
+
* of a Go cipher constructor (`aes.NewCipher`, `des.NewCipher`, etc.).
|
|
228
|
+
*
|
|
229
|
+
* Patterns flagged:
|
|
230
|
+
* - inline `[]byte("literal")` conversion
|
|
231
|
+
* - inline `[]byte{0x00, 0x01, …}` composite literal
|
|
232
|
+
* - variable resolved by constant propagation to a string constant
|
|
233
|
+
*
|
|
234
|
+
* Returns null when the key argument is a runtime value.
|
|
235
|
+
*/
|
|
236
|
+
function detectHardcodedKeyGo(call, constProp, literalBindings) {
|
|
237
|
+
const arg = call.arguments.find((a) => a.position === 0);
|
|
238
|
+
if (!arg)
|
|
239
|
+
return null;
|
|
240
|
+
const expr = (arg.literal ?? arg.expression ?? '').trim();
|
|
241
|
+
if (!expr)
|
|
242
|
+
return null;
|
|
243
|
+
// []byte("literal") / []byte(`literal`)
|
|
244
|
+
if (/^\[\s*\]\s*byte\s*\(\s*["'`][^"'`]*["'`]\s*\)$/.test(expr)) {
|
|
245
|
+
return `literal []byte("…")`;
|
|
246
|
+
}
|
|
247
|
+
// []byte{0x00, 0x01, …}
|
|
248
|
+
if (/^\[\s*\]\s*byte\s*\{[^}]*\}$/.test(expr)) {
|
|
249
|
+
return `literal []byte{…} composite`;
|
|
250
|
+
}
|
|
251
|
+
// Variable resolved by constant propagation.
|
|
252
|
+
if (arg.variable && constProp) {
|
|
253
|
+
const sym = constProp.symbols.get(arg.variable);
|
|
254
|
+
if (sym && sym.type === 'string' && typeof sym.value === 'string') {
|
|
255
|
+
return `constant-propagated key from \`${arg.variable}\``;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Regex fallback: `var key = []byte("…")` / `key := []byte("…")` /
|
|
259
|
+
// `const key = "…"` earlier in the same file.
|
|
260
|
+
if (arg.variable) {
|
|
261
|
+
const lit = literalBindings.get(arg.variable);
|
|
262
|
+
if (lit) {
|
|
263
|
+
return `literal-bound ${arg.variable} = ${lit.slice(0, 24)}${lit.length > 24 ? '…' : ''}`;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Extract a weak (< 2048) `key_size` argument from a Python
|
|
270
|
+
* `…rsa.generate_private_key(...)` call.
|
|
271
|
+
*
|
|
272
|
+
* The Python plugin renders keyword arguments as `name=value` in
|
|
273
|
+
* `argument.expression` and exposes the numeric RHS in `argument.literal`,
|
|
274
|
+
* so we scan every positional and keyword argument for a `key_size=N`
|
|
275
|
+
* spelling first, then fall back to a positional `key_size` (uncommon in
|
|
276
|
+
* the cryptography API but accepted via `**kwargs`).
|
|
277
|
+
*/
|
|
278
|
+
function parseWeakRsaKeySizePython(call) {
|
|
279
|
+
for (const arg of call.arguments) {
|
|
280
|
+
const expr = (arg.expression ?? '').trim();
|
|
281
|
+
const lit = (arg.literal ?? '').trim();
|
|
282
|
+
const m = expr.match(/^key_size\s*=\s*(-?\d+)\s*$/);
|
|
283
|
+
if (m && m[1]) {
|
|
284
|
+
const n = parseInt(m[1], 10);
|
|
285
|
+
if (Number.isFinite(n) && n > 0 && n < 2048)
|
|
286
|
+
return n;
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
// Keyword arg where expression='key_size=…' but literal already isolated.
|
|
290
|
+
if (/^key_size\s*=/.test(expr) && lit) {
|
|
291
|
+
const n = parseInt(lit, 10);
|
|
292
|
+
if (Number.isFinite(n) && n > 0 && n < 2048)
|
|
293
|
+
return n;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Build a `<name> → <literal>` map by regex-scanning the file's source.
|
|
300
|
+
*
|
|
301
|
+
* Recognised forms per language (only inline literal RHSes — not function
|
|
302
|
+
* calls, attribute lookups, parameters, etc.):
|
|
303
|
+
*
|
|
304
|
+
* Python:
|
|
305
|
+
* `name = b"…"` / `name = b'…'` (bytes literal)
|
|
306
|
+
* `name = "…"` / `name = '…'` (string literal)
|
|
307
|
+
*
|
|
308
|
+
* Go:
|
|
309
|
+
* `name := []byte("…")` / `var name = []byte("…")`
|
|
310
|
+
* `name := "…"` / `const name = "…"`
|
|
311
|
+
*
|
|
312
|
+
* Used by `detectHardcodedKeyPython` / `detectHardcodedKeyGo` to recognise
|
|
313
|
+
* the common pattern `key = b"…"; AES.new(key, …)`. Returns an empty map
|
|
314
|
+
* for unsupported languages or when the source is empty.
|
|
315
|
+
*/
|
|
316
|
+
function scanLiteralBindings(code, language) {
|
|
317
|
+
const out = new Map();
|
|
318
|
+
if (!code)
|
|
319
|
+
return out;
|
|
320
|
+
if (language === 'python') {
|
|
321
|
+
// `name = b"…"` (preferred form) or `name = "…"` (legacy / Python 2).
|
|
322
|
+
const re = /^[ \t]*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(b[rR]?["'][^"']*["']|[rR]?b["'][^"']*["']|["'][^"']*["'])\s*(?:$|#)/gm;
|
|
323
|
+
let m;
|
|
324
|
+
while ((m = re.exec(code)) !== null) {
|
|
325
|
+
if (m[1] && m[2])
|
|
326
|
+
out.set(m[1], m[2]);
|
|
327
|
+
}
|
|
328
|
+
return out;
|
|
329
|
+
}
|
|
330
|
+
if (language === 'go') {
|
|
331
|
+
// `name := []byte("…")` / `var name = []byte("…")` / `const name = "…"` /
|
|
332
|
+
// `name := "…"`.
|
|
333
|
+
const reByte = /^[ \t]*(?:var\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*(?::=|=)\s*(\[\s*\]\s*byte\s*\(\s*["'`][^"'`]*["'`]\s*\))/gm;
|
|
334
|
+
let m;
|
|
335
|
+
while ((m = reByte.exec(code)) !== null) {
|
|
336
|
+
if (m[1] && m[2])
|
|
337
|
+
out.set(m[1], m[2]);
|
|
338
|
+
}
|
|
339
|
+
const reStr = /^[ \t]*(?:var|const)\s+([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(["'`][^"'`]*["'`])/gm;
|
|
340
|
+
while ((m = reStr.exec(code)) !== null) {
|
|
341
|
+
if (m[1] && m[2])
|
|
342
|
+
out.set(m[1], m[2]);
|
|
343
|
+
}
|
|
344
|
+
const reShort = /^[ \t]*([A-Za-z_][A-Za-z0-9_]*)\s*:=\s*(["'`][^"'`]*["'`])/gm;
|
|
345
|
+
while ((m = reShort.exec(code)) !== null) {
|
|
346
|
+
if (m[1] && m[2])
|
|
347
|
+
out.set(m[1], m[2]);
|
|
348
|
+
}
|
|
349
|
+
return out;
|
|
350
|
+
}
|
|
351
|
+
return out;
|
|
352
|
+
}
|
|
166
353
|
/** Map issue kind → CWE identifier. */
|
|
167
354
|
const ISSUE_CWE = {
|
|
168
355
|
'weak-cipher': 'CWE-327',
|
|
@@ -176,11 +363,24 @@ export class WeakCryptoPass {
|
|
|
176
363
|
name = 'weak-crypto';
|
|
177
364
|
category = 'security';
|
|
178
365
|
run(ctx) {
|
|
179
|
-
const { graph, language } = ctx;
|
|
366
|
+
const { graph, language, code } = ctx;
|
|
180
367
|
const file = graph.ir.meta.file;
|
|
181
368
|
const findings = [];
|
|
369
|
+
// Optional constant-propagation result — used to resolve a variable whose
|
|
370
|
+
// assigned value is a literal bytes/string (Python `key = b"…"` → AES.new).
|
|
371
|
+
const constProp = ctx.hasResult('constant-propagation')
|
|
372
|
+
? ctx.getResult('constant-propagation')
|
|
373
|
+
: null;
|
|
374
|
+
// Lightweight per-language source scan for `<name> = <literal>`
|
|
375
|
+
// bindings. Python's constant-propagation pass does not yet track
|
|
376
|
+
// `name = b"…"` style assignments, and Go's does not track
|
|
377
|
+
// `name := []byte("…")`. We do a one-pass regex over `ctx.code` to
|
|
378
|
+
// build a `name → literal` map used by hardcoded-key detection.
|
|
379
|
+
// This is a conservative augmentation — only inline literal RHSes
|
|
380
|
+
// are recognised; runtime values stay invisible.
|
|
381
|
+
const literalBindings = scanLiteralBindings(code, language);
|
|
182
382
|
for (const call of graph.ir.calls) {
|
|
183
|
-
const detections = this.detect(call, language);
|
|
383
|
+
const detections = this.detect(call, language, constProp, literalBindings);
|
|
184
384
|
for (const det of detections) {
|
|
185
385
|
const line = call.location.line;
|
|
186
386
|
findings.push({ line, language, ...det });
|
|
@@ -250,7 +450,7 @@ export class WeakCryptoPass {
|
|
|
250
450
|
'use RSA-OAEP with ≥2048-bit keys or modern curve-based schemes.');
|
|
251
451
|
}
|
|
252
452
|
}
|
|
253
|
-
detect(call, language) {
|
|
453
|
+
detect(call, language, constProp, literalBindings) {
|
|
254
454
|
const method = call.method_name;
|
|
255
455
|
const receiver = call.receiver ?? '';
|
|
256
456
|
const out = [];
|
|
@@ -326,6 +526,15 @@ export class WeakCryptoPass {
|
|
|
326
526
|
out.push({ issue: 'ecb-mode', detail: 'AES.MODE_ECB', api: `${receiver}.new` });
|
|
327
527
|
}
|
|
328
528
|
}
|
|
529
|
+
// Hardcoded symmetric key — issue #87 (CWE-321). First arg is a bytes
|
|
530
|
+
// literal `b"…"` either inline or via a constant-propagated variable.
|
|
531
|
+
if (lastSeg === 'aes' || lastSeg.endsWith('.aes') ||
|
|
532
|
+
WEAK_CIPHER_BASES.has(lastSeg)) {
|
|
533
|
+
const keyDetail = detectHardcodedKeyPython(call, constProp, literalBindings);
|
|
534
|
+
if (keyDetail) {
|
|
535
|
+
out.push({ issue: 'hardcoded-key', detail: keyDetail, api: `${receiver}.new` });
|
|
536
|
+
}
|
|
537
|
+
}
|
|
329
538
|
}
|
|
330
539
|
// cryptography.hazmat ciphers — algorithms.TripleDES(key) / Blowfish(key) / ARC4(key) / IDEA(key) / SEED(key) / CAST5(key)
|
|
331
540
|
// Receiver here is `algorithms` (or full path); method is the algo name.
|
|
@@ -336,6 +545,32 @@ export class WeakCryptoPass {
|
|
|
336
545
|
if (WEAK_CIPHER_BASES.has(normalized)) {
|
|
337
546
|
out.push({ issue: 'weak-cipher', detail: normalized, api: `algorithms.${method}` });
|
|
338
547
|
}
|
|
548
|
+
// algorithms.AES(b"literal") — hardcoded key (CWE-321, issue #87).
|
|
549
|
+
if (m === 'aes') {
|
|
550
|
+
const keyDetail = detectHardcodedKeyPython(call, constProp, literalBindings);
|
|
551
|
+
if (keyDetail) {
|
|
552
|
+
out.push({ issue: 'hardcoded-key', detail: keyDetail, api: `algorithms.${method}` });
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// cryptography.hazmat modes — modes.ECB() — issue #87 (CWE-327).
|
|
557
|
+
// Receiver is `modes` (or full path ending in `.modes`); method is `ECB`.
|
|
558
|
+
if (method === 'ECB' && (receiver === 'modes' || receiver.endsWith('.modes'))) {
|
|
559
|
+
out.push({ issue: 'ecb-mode', detail: 'modes.ECB()', api: `${receiver}.ECB` });
|
|
560
|
+
}
|
|
561
|
+
// cryptography.hazmat asymmetric — rsa.generate_private_key(key_size=N)
|
|
562
|
+
// / dsa.generate_private_key(key_size=N) — issue #87 (CWE-326).
|
|
563
|
+
if (method === 'generate_private_key' &&
|
|
564
|
+
(receiver === 'rsa' || receiver === 'dsa' ||
|
|
565
|
+
receiver.endsWith('.rsa') || receiver.endsWith('.dsa'))) {
|
|
566
|
+
const n = parseWeakRsaKeySizePython(call);
|
|
567
|
+
if (n !== null) {
|
|
568
|
+
out.push({
|
|
569
|
+
issue: 'weak-rsa-key',
|
|
570
|
+
detail: String(n),
|
|
571
|
+
api: `${receiver}.generate_private_key`,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
339
574
|
}
|
|
340
575
|
return out;
|
|
341
576
|
}
|
|
@@ -384,6 +619,31 @@ export class WeakCryptoPass {
|
|
|
384
619
|
if ((method === 'NewECBEncrypter' || method === 'NewECBDecrypter') && receiver === 'cipher') {
|
|
385
620
|
out.push({ issue: 'ecb-mode', detail: method, api: `cipher.${method}` });
|
|
386
621
|
}
|
|
622
|
+
// aes.NewCipher / des.NewCipher / des.NewTripleDESCipher hardcoded key —
|
|
623
|
+
// issue #87 (CWE-321). First arg is `[]byte("literal")` or a variable
|
|
624
|
+
// assigned from such a literal.
|
|
625
|
+
if ((receiver === 'aes' && method === 'NewCipher') ||
|
|
626
|
+
(receiver === 'des' && (method === 'NewCipher' || method === 'NewTripleDESCipher')) ||
|
|
627
|
+
(receiver === 'rc4' && method === 'NewCipher')) {
|
|
628
|
+
const keyDetail = detectHardcodedKeyGo(call, constProp, literalBindings);
|
|
629
|
+
if (keyDetail) {
|
|
630
|
+
out.push({ issue: 'hardcoded-key', detail: keyDetail, api: `${receiver}.${method}` });
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
// crypto/rsa: rsa.GenerateKey(rand.Reader, bits) — issue #87 (CWE-326).
|
|
634
|
+
// Second positional arg is the key size in bits.
|
|
635
|
+
if (receiver === 'rsa' && method === 'GenerateKey') {
|
|
636
|
+
const bitsArg = call.arguments.find((a) => a.position === 1);
|
|
637
|
+
const expr = (bitsArg?.literal ?? bitsArg?.expression ?? '').trim();
|
|
638
|
+
const n = parseInt(expr, 10);
|
|
639
|
+
if (Number.isFinite(n) && n > 0 && n < 2048) {
|
|
640
|
+
out.push({
|
|
641
|
+
issue: 'weak-rsa-key',
|
|
642
|
+
detail: String(n),
|
|
643
|
+
api: 'rsa.GenerateKey',
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
}
|
|
387
647
|
return out;
|
|
388
648
|
}
|
|
389
649
|
return out;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weak-crypto-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/weak-crypto-pass.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weak-crypto-pass.js","sourceRoot":"","sources":["../../../src/analysis/passes/weak-crypto-pass.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pass: xml-entity-expansion (CWE-776 / CWE-611, category: security)
|
|
3
|
+
*
|
|
4
|
+
* Pattern pass — flags XML parser instantiation that does *not* disable
|
|
5
|
+
* DTD / external-entity processing in the same file. This covers:
|
|
6
|
+
* - Billion-laughs / quadratic blow-up DoS (CWE-776)
|
|
7
|
+
* - External-entity disclosure (CWE-611) [already partially covered by
|
|
8
|
+
* existing xxe taint sinks; this pass adds the config-level signal]
|
|
9
|
+
*
|
|
10
|
+
* Detection (Java):
|
|
11
|
+
* Factory instantiation:
|
|
12
|
+
* - `SAXParserFactory.newInstance()`
|
|
13
|
+
* - `DocumentBuilderFactory.newInstance()`
|
|
14
|
+
* - `XMLInputFactory.newInstance()` (StAX)
|
|
15
|
+
* - `SchemaFactory.newInstance(...)`
|
|
16
|
+
* - `TransformerFactory.newInstance()`
|
|
17
|
+
* Safe-feature setters (any of these in the same file silences the
|
|
18
|
+
* finding for that factory class):
|
|
19
|
+
* - `setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)`
|
|
20
|
+
* - `setFeature("http://xml.org/sax/features/external-general-entities", false)`
|
|
21
|
+
* - `setFeature("http://xml.org/sax/features/external-parameter-entities", false)`
|
|
22
|
+
* - `setProperty(XMLInputFactory.SUPPORT_DTD, false)`
|
|
23
|
+
* - `setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "")`
|
|
24
|
+
*
|
|
25
|
+
* Detection (Python):
|
|
26
|
+
* - `xml.etree.ElementTree.parse` / `fromstring` — defxml advises
|
|
27
|
+
* `defusedxml.ElementTree` instead.
|
|
28
|
+
* - `lxml.etree.parse(...)` without `XMLParser(resolve_entities=False)`
|
|
29
|
+
* argument. We only fire if `resolve_entities=False` does NOT appear
|
|
30
|
+
* in the file.
|
|
31
|
+
*
|
|
32
|
+
* Note: the existing `xxe` taint sinks (`SAXParser.parse`, `XMLReader.parse`,
|
|
33
|
+
* etc.) already fire when *tainted* XML reaches the parser. This pass is
|
|
34
|
+
* the orthogonal *configuration* signal — fire even on hard-coded inputs
|
|
35
|
+
* because billion-laughs is exploitable via any attacker-supplied entity
|
|
36
|
+
* file even when the parse() argument itself is trusted.
|
|
37
|
+
*
|
|
38
|
+
* Issue: #86, Sprint 6.
|
|
39
|
+
*/
|
|
40
|
+
import type { AnalysisPass, PassContext } from '../../graph/analysis-pass.js';
|
|
41
|
+
export interface XmlEntityExpansionResult {
|
|
42
|
+
findings: Array<{
|
|
43
|
+
line: number;
|
|
44
|
+
language: string;
|
|
45
|
+
pattern: string;
|
|
46
|
+
api: string;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
export declare class XmlEntityExpansionPass implements AnalysisPass<XmlEntityExpansionResult> {
|
|
50
|
+
readonly name = "xml-entity-expansion";
|
|
51
|
+
readonly category: "security";
|
|
52
|
+
run(ctx: PassContext): XmlEntityExpansionResult;
|
|
53
|
+
private detectJavaCall;
|
|
54
|
+
private detectPythonCall;
|
|
55
|
+
private fixForJava;
|
|
56
|
+
private fixForPython;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=xml-entity-expansion-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-entity-expansion-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/xml-entity-expansion-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAyB9E,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;CACJ;AAED,qBAAa,sBACX,YAAW,YAAY,CAAC,wBAAwB,CAAC;IAEjD,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,wBAAwB;IA0E/C,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,gBAAgB;IAyBxB,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,YAAY;CAarB"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pass: xml-entity-expansion (CWE-776 / CWE-611, category: security)
|
|
3
|
+
*
|
|
4
|
+
* Pattern pass — flags XML parser instantiation that does *not* disable
|
|
5
|
+
* DTD / external-entity processing in the same file. This covers:
|
|
6
|
+
* - Billion-laughs / quadratic blow-up DoS (CWE-776)
|
|
7
|
+
* - External-entity disclosure (CWE-611) [already partially covered by
|
|
8
|
+
* existing xxe taint sinks; this pass adds the config-level signal]
|
|
9
|
+
*
|
|
10
|
+
* Detection (Java):
|
|
11
|
+
* Factory instantiation:
|
|
12
|
+
* - `SAXParserFactory.newInstance()`
|
|
13
|
+
* - `DocumentBuilderFactory.newInstance()`
|
|
14
|
+
* - `XMLInputFactory.newInstance()` (StAX)
|
|
15
|
+
* - `SchemaFactory.newInstance(...)`
|
|
16
|
+
* - `TransformerFactory.newInstance()`
|
|
17
|
+
* Safe-feature setters (any of these in the same file silences the
|
|
18
|
+
* finding for that factory class):
|
|
19
|
+
* - `setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)`
|
|
20
|
+
* - `setFeature("http://xml.org/sax/features/external-general-entities", false)`
|
|
21
|
+
* - `setFeature("http://xml.org/sax/features/external-parameter-entities", false)`
|
|
22
|
+
* - `setProperty(XMLInputFactory.SUPPORT_DTD, false)`
|
|
23
|
+
* - `setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "")`
|
|
24
|
+
*
|
|
25
|
+
* Detection (Python):
|
|
26
|
+
* - `xml.etree.ElementTree.parse` / `fromstring` — defxml advises
|
|
27
|
+
* `defusedxml.ElementTree` instead.
|
|
28
|
+
* - `lxml.etree.parse(...)` without `XMLParser(resolve_entities=False)`
|
|
29
|
+
* argument. We only fire if `resolve_entities=False` does NOT appear
|
|
30
|
+
* in the file.
|
|
31
|
+
*
|
|
32
|
+
* Note: the existing `xxe` taint sinks (`SAXParser.parse`, `XMLReader.parse`,
|
|
33
|
+
* etc.) already fire when *tainted* XML reaches the parser. This pass is
|
|
34
|
+
* the orthogonal *configuration* signal — fire even on hard-coded inputs
|
|
35
|
+
* because billion-laughs is exploitable via any attacker-supplied entity
|
|
36
|
+
* file even when the parse() argument itself is trusted.
|
|
37
|
+
*
|
|
38
|
+
* Issue: #86, Sprint 6.
|
|
39
|
+
*/
|
|
40
|
+
const JAVA_FACTORIES = new Set([
|
|
41
|
+
'SAXParserFactory',
|
|
42
|
+
'DocumentBuilderFactory',
|
|
43
|
+
'XMLInputFactory',
|
|
44
|
+
'SchemaFactory',
|
|
45
|
+
'TransformerFactory',
|
|
46
|
+
]);
|
|
47
|
+
// "Disallow DTD" / safe-feature evidence — any one of these in the file
|
|
48
|
+
// suppresses the warning. Conservative on purpose: a missed feature still
|
|
49
|
+
// fires; FPs only on cross-file configuration.
|
|
50
|
+
const JAVA_SAFE_EVIDENCE_RE = /(disallow-doctype-decl|external-general-entities|external-parameter-entities|SUPPORT_DTD|ACCESS_EXTERNAL_DTD|ACCESS_EXTERNAL_SCHEMA|setXIncludeAware\s*\(\s*false\s*\)|setExpandEntityReferences\s*\(\s*false\s*\))/;
|
|
51
|
+
const PY_LXML_PARSER_INSECURE_DEFAULT_RE = /\bresolve_entities\s*=\s*False\b/;
|
|
52
|
+
export class XmlEntityExpansionPass {
|
|
53
|
+
name = 'xml-entity-expansion';
|
|
54
|
+
category = 'security';
|
|
55
|
+
run(ctx) {
|
|
56
|
+
const { graph, language } = ctx;
|
|
57
|
+
const file = graph.ir.meta.file;
|
|
58
|
+
const findings = [];
|
|
59
|
+
const code = ctx.code ?? '';
|
|
60
|
+
if (language === 'java') {
|
|
61
|
+
const safeInFile = JAVA_SAFE_EVIDENCE_RE.test(code);
|
|
62
|
+
if (safeInFile)
|
|
63
|
+
return { findings };
|
|
64
|
+
for (const call of graph.ir.calls) {
|
|
65
|
+
const det = this.detectJavaCall(call);
|
|
66
|
+
if (!det)
|
|
67
|
+
continue;
|
|
68
|
+
const line = call.location.line;
|
|
69
|
+
findings.push({ line, language, ...det });
|
|
70
|
+
ctx.addFinding({
|
|
71
|
+
id: `${this.name}-${file}-${line}-${det.api}`,
|
|
72
|
+
pass: this.name,
|
|
73
|
+
category: this.category,
|
|
74
|
+
rule_id: this.name,
|
|
75
|
+
cwe: det.cwe,
|
|
76
|
+
severity: 'high',
|
|
77
|
+
level: 'error',
|
|
78
|
+
message: `${det.api} created without disabling DTD / external-entity ` +
|
|
79
|
+
'processing. Vulnerable to billion-laughs / quadratic ' +
|
|
80
|
+
'blow-up DoS (CWE-776) and external-entity disclosure ' +
|
|
81
|
+
'(CWE-611). Add `setFeature("http://apache.org/xml/features/' +
|
|
82
|
+
'disallow-doctype-decl", true)` (or the equivalent) before ' +
|
|
83
|
+
'parsing.',
|
|
84
|
+
file,
|
|
85
|
+
line,
|
|
86
|
+
fix: this.fixForJava(det.api),
|
|
87
|
+
evidence: { ...det, language, safeFeatureInFile: false },
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return { findings };
|
|
91
|
+
}
|
|
92
|
+
if (language === 'python') {
|
|
93
|
+
const safeInFile = PY_LXML_PARSER_INSECURE_DEFAULT_RE.test(code) ||
|
|
94
|
+
/\bdefusedxml\b/.test(code);
|
|
95
|
+
if (safeInFile)
|
|
96
|
+
return { findings };
|
|
97
|
+
for (const call of graph.ir.calls) {
|
|
98
|
+
const det = this.detectPythonCall(call);
|
|
99
|
+
if (!det)
|
|
100
|
+
continue;
|
|
101
|
+
const line = call.location.line;
|
|
102
|
+
findings.push({ line, language, ...det });
|
|
103
|
+
ctx.addFinding({
|
|
104
|
+
id: `${this.name}-${file}-${line}-${det.api}`,
|
|
105
|
+
pass: this.name,
|
|
106
|
+
category: this.category,
|
|
107
|
+
rule_id: this.name,
|
|
108
|
+
cwe: det.cwe,
|
|
109
|
+
severity: 'high',
|
|
110
|
+
level: 'error',
|
|
111
|
+
message: `${det.api} called without an entity-safe parser. Vulnerable ` +
|
|
112
|
+
'to billion-laughs / quadratic blow-up DoS (CWE-776) and ' +
|
|
113
|
+
'external-entity disclosure (CWE-611). Use `defusedxml` or pass ' +
|
|
114
|
+
'an `XMLParser(resolve_entities=False)` to lxml.',
|
|
115
|
+
file,
|
|
116
|
+
line,
|
|
117
|
+
fix: this.fixForPython(det.api),
|
|
118
|
+
evidence: { ...det, language, safeFeatureInFile: false },
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return { findings };
|
|
122
|
+
}
|
|
123
|
+
return { findings };
|
|
124
|
+
}
|
|
125
|
+
detectJavaCall(call) {
|
|
126
|
+
if (call.method_name !== 'newInstance')
|
|
127
|
+
return null;
|
|
128
|
+
const recv = call.receiver ?? '';
|
|
129
|
+
const recvType = call.receiver_type ?? '';
|
|
130
|
+
for (const factory of JAVA_FACTORIES) {
|
|
131
|
+
if (recv === factory || recvType === factory ||
|
|
132
|
+
recv.endsWith('.' + factory) || recvType.endsWith('.' + factory)) {
|
|
133
|
+
return {
|
|
134
|
+
pattern: `${factory}.newInstance()`,
|
|
135
|
+
api: factory,
|
|
136
|
+
cwe: 'CWE-776',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
detectPythonCall(call) {
|
|
143
|
+
const recv = call.receiver ?? '';
|
|
144
|
+
const method = call.method_name;
|
|
145
|
+
// lxml.etree.parse / lxml.etree.fromstring
|
|
146
|
+
if ((method === 'parse' || method === 'fromstring' || method === 'XML') &&
|
|
147
|
+
(recv === 'etree' || recv.endsWith('.etree'))) {
|
|
148
|
+
return {
|
|
149
|
+
pattern: `etree.${method}`,
|
|
150
|
+
api: `lxml.etree.${method}`,
|
|
151
|
+
cwe: 'CWE-776',
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// xml.etree.ElementTree.parse / fromstring
|
|
155
|
+
if ((method === 'parse' || method === 'fromstring') &&
|
|
156
|
+
(recv === 'ET' || recv === 'ElementTree' ||
|
|
157
|
+
recv.endsWith('.ElementTree'))) {
|
|
158
|
+
return {
|
|
159
|
+
pattern: `ElementTree.${method}`,
|
|
160
|
+
api: `xml.etree.ElementTree.${method}`,
|
|
161
|
+
cwe: 'CWE-776',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
fixForJava(api) {
|
|
167
|
+
if (api === 'SAXParserFactory') {
|
|
168
|
+
return ('Call `factory.setFeature("http://apache.org/xml/features/' +
|
|
169
|
+
'disallow-doctype-decl", true)` and ' +
|
|
170
|
+
'`factory.setXIncludeAware(false)` before `newSAXParser()`.');
|
|
171
|
+
}
|
|
172
|
+
if (api === 'DocumentBuilderFactory') {
|
|
173
|
+
return ('Call `factory.setFeature("http://apache.org/xml/features/' +
|
|
174
|
+
'disallow-doctype-decl", true)` and ' +
|
|
175
|
+
'`factory.setExpandEntityReferences(false)` before ' +
|
|
176
|
+
'`newDocumentBuilder()`.');
|
|
177
|
+
}
|
|
178
|
+
if (api === 'XMLInputFactory') {
|
|
179
|
+
return ('Call `factory.setProperty(XMLInputFactory.SUPPORT_DTD, false)` ' +
|
|
180
|
+
'and `factory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_' +
|
|
181
|
+
'ENTITIES, false)` before `createXMLStreamReader`.');
|
|
182
|
+
}
|
|
183
|
+
return ('Use `XMLConstants.FEATURE_SECURE_PROCESSING` and explicitly disable ' +
|
|
184
|
+
'DTD / external-entity loading on the factory before parsing.');
|
|
185
|
+
}
|
|
186
|
+
fixForPython(api) {
|
|
187
|
+
if (api.startsWith('lxml.etree')) {
|
|
188
|
+
return ('Pass an explicit parser: ' +
|
|
189
|
+
'`etree.parse(src, parser=etree.XMLParser(resolve_entities=False, ' +
|
|
190
|
+
'no_network=True))`. Even better, use the `defusedxml.lxml` wrapper.');
|
|
191
|
+
}
|
|
192
|
+
return ('Replace `xml.etree.ElementTree` with `defusedxml.ElementTree`, which ' +
|
|
193
|
+
'disables DTD / entity processing by default.');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=xml-entity-expansion-pass.js.map
|