circle-ir 3.136.0 → 3.138.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/passes/language-sources-pass.d.ts +120 -0
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +1263 -0
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/browser/circle-ir.js +963 -0
- package/package.json +1 -1
|
@@ -425,4 +425,124 @@ export declare function findJsUtilFormatFormatStringFindings(code: string, file:
|
|
|
425
425
|
* `response.headers.add(...)` / `response.headers.set(...)`. CWE-113.
|
|
426
426
|
*/
|
|
427
427
|
export declare function findPythonHeaderCrlfInjectionFindings(code: string, file: string): SastFinding[];
|
|
428
|
+
/**
|
|
429
|
+
* Sprint 87 detector A (#189) — JavaScript / TypeScript LDAP injection
|
|
430
|
+
* via ldapjs / ldapts `client.search(base, { filter: <tainted>, ... })`.
|
|
431
|
+
*
|
|
432
|
+
* ldapjs and ldapts share the same call shape: `client.search(base, opts,
|
|
433
|
+
* cb)` where `opts.filter` is the LDAP filter string. When an attacker
|
|
434
|
+
* controls the filter content, they can break out of the intended filter
|
|
435
|
+
* (e.g. `*)(uid=*` injection) to enumerate the directory. CWE-90.
|
|
436
|
+
*
|
|
437
|
+
* The detector tracks taint propagation from Express request extractors
|
|
438
|
+
* (`req.query.X`, `req.body.X`, `req.params.X`, `req.headers.X`,
|
|
439
|
+
* `req.cookies.X`) through both `let|const|var` assignments and
|
|
440
|
+
* template-literal / `+`-concat construction of the filter string.
|
|
441
|
+
*/
|
|
442
|
+
export declare function findJsLdapInjectionFindings(code: string, file: string): SastFinding[];
|
|
443
|
+
/**
|
|
444
|
+
* Sprint 87 detector B (#189) — Go LDAP injection via go-ldap/ldap.v3
|
|
445
|
+
* `ldap.NewSearchRequest(base, scope, deref, sizeLimit, timeLimit,
|
|
446
|
+
* typesOnly, <tainted-filter>, attributes, controls)`.
|
|
447
|
+
*
|
|
448
|
+
* The 7th positional argument is the LDAP filter. The detector tracks
|
|
449
|
+
* tainted strings derived from `r.URL.Query().Get(...)` / `r.Form.Get`
|
|
450
|
+
* / `r.PostForm.Get` / `r.FormValue` / `r.PostFormValue` through
|
|
451
|
+
* `:=`/`=` assignments and `fmt.Sprintf` calls, then fires when the
|
|
452
|
+
* filter slot resolves to a tainted symbol. CWE-90.
|
|
453
|
+
*/
|
|
454
|
+
export declare function findGoLdapInjectionFindings(code: string, file: string): SastFinding[];
|
|
455
|
+
/**
|
|
456
|
+
* Sprint 87 detector C (#189) — Rust LDAP injection via ldap3
|
|
457
|
+
* `LdapConn::search(base, scope, &<tainted-filter>, attrs)` (and the
|
|
458
|
+
* async `Ldap::search(...)` mirror).
|
|
459
|
+
*
|
|
460
|
+
* The 3rd positional argument is the LDAP filter. Tainted strings come
|
|
461
|
+
* from actix-web `web::Query<HashMap<String, String>>` / `web::Path` /
|
|
462
|
+
* `web::Form` / `web::Json` parameter types (extractor handlers) and
|
|
463
|
+
* propagate through `let` bindings and `format!(...)` macros. CWE-90.
|
|
464
|
+
*/
|
|
465
|
+
export declare function findRustLdapInjectionFindings(code: string, file: string): SastFinding[];
|
|
466
|
+
/**
|
|
467
|
+
* Sprint 87 detector D (#189) — Rust log injection via the `log` crate
|
|
468
|
+
* macros (`info!`, `warn!`, `error!`, `debug!`, `trace!`) where a
|
|
469
|
+
* tainted value is interpolated into the format args.
|
|
470
|
+
*
|
|
471
|
+
* Unsanitized CRLF in log lines can split log entries, forge
|
|
472
|
+
* authentication events, or escape into log-aggregation pipelines that
|
|
473
|
+
* parse newlines as record boundaries. CWE-117.
|
|
474
|
+
*/
|
|
475
|
+
export declare function findRustLogInjectionFindings(code: string, file: string): SastFinding[];
|
|
476
|
+
/**
|
|
477
|
+
* Sprint 89 detector A (#189) — Go insecure deserialization via
|
|
478
|
+
* `encoding/gob` `gob.NewDecoder(<req-body>).Decode(&v)`.
|
|
479
|
+
*
|
|
480
|
+
* The `gob` package will reconstruct arbitrary Go values, and any
|
|
481
|
+
* registered concrete type can be instantiated by the attacker through
|
|
482
|
+
* `gob.Register(...)` side effects. Decoding directly from
|
|
483
|
+
* `r.Body` (`*http.Request`) without authenticated framing is unsafe.
|
|
484
|
+
* CWE-502.
|
|
485
|
+
*/
|
|
486
|
+
export declare function findGoGobDeserializationFindings(code: string, file: string): SastFinding[];
|
|
487
|
+
/**
|
|
488
|
+
* Sprint 89 detector B (#189) — JS insecure deserialization via
|
|
489
|
+
* `JSON.parse(req.body)`.
|
|
490
|
+
*
|
|
491
|
+
* Express applications that register `express.text(...)` or
|
|
492
|
+
* `bodyParser.raw(...)` middleware leave `req.body` as an
|
|
493
|
+
* attacker-controlled string. Passing it through `JSON.parse(...)`
|
|
494
|
+
* exposes prototype-pollution paths if the parsed object is then
|
|
495
|
+
* merged into trusted state or used as a property bag. CWE-502 /
|
|
496
|
+
* CWE-1321 (prototype-pollution adjacent).
|
|
497
|
+
*
|
|
498
|
+
* Conservative gate: only fire on `JSON.parse(<expr>)` where
|
|
499
|
+
* `<expr>` resolves to `req.body` (the only express extractor that
|
|
500
|
+
* is genuinely a raw string when text/raw bodyparsing is used).
|
|
501
|
+
*/
|
|
502
|
+
export declare function findJsJsonParseBodyFindings(code: string, file: string): SastFinding[];
|
|
503
|
+
/**
|
|
504
|
+
* Sprint 89 detector C (#189) — JS DOM XPath injection via
|
|
505
|
+
* `document.evaluate(<tainted>, ...)`.
|
|
506
|
+
*
|
|
507
|
+
* The DOM `XPathEvaluator.evaluate()` API takes a string XPath
|
|
508
|
+
* expression as its first argument. When that string is built from
|
|
509
|
+
* `location.search` / `location.hash` / URLSearchParams without
|
|
510
|
+
* escaping, the attacker can rewrite the query (e.g. injecting
|
|
511
|
+
* `' or '1'='1`-style predicates) and exfiltrate other nodes. CWE-643.
|
|
512
|
+
*
|
|
513
|
+
* Gate: file must reference `XPathResult` (strong DOM-XPath signal)
|
|
514
|
+
* AND call `.evaluate(`, AND contain a browser taint source
|
|
515
|
+
* (`location.search`, `location.hash`, `URLSearchParams`).
|
|
516
|
+
*/
|
|
517
|
+
export declare function findJsDomXpathInjectionFindings(code: string, file: string): SastFinding[];
|
|
518
|
+
/**
|
|
519
|
+
* Sprint 90 detector A (#189) — Go XXE via `encoding/xml` decoder with
|
|
520
|
+
* `d.Strict = false` (allows DTD-like constructs and custom Entity
|
|
521
|
+
* resolution to be configured on the decoder). When the source stream
|
|
522
|
+
* is `*http.Request.Body`, the attacker can submit a payload that
|
|
523
|
+
* triggers entity-expansion / external-entity reads through the
|
|
524
|
+
* `Entity` map. CWE-611 / CWE-776.
|
|
525
|
+
*/
|
|
526
|
+
export declare function findGoXmlDecoderXxeFindings(code: string, file: string): SastFinding[];
|
|
527
|
+
/**
|
|
528
|
+
* Sprint 90 detector B (#189) — Python SSTI via Jinja2
|
|
529
|
+
* `Template(<tainted>).render(...)`.
|
|
530
|
+
*
|
|
531
|
+
* Constructing a `jinja2.Template` from attacker-controlled source
|
|
532
|
+
* gives the attacker the entire Jinja sandbox-escape surface
|
|
533
|
+
* (`{{ ''.__class__.__mro__[1].__subclasses__() ... }}`). CWE-1336.
|
|
534
|
+
*
|
|
535
|
+
* Gate: file must import `jinja2.Template` AND construct it from a
|
|
536
|
+
* Flask/FastAPI request extractor (request.args/form/values/json/data).
|
|
537
|
+
*/
|
|
538
|
+
export declare function findPythonJinjaTemplateSstiFindings(code: string, file: string): SastFinding[];
|
|
539
|
+
/**
|
|
540
|
+
* Sprint 90 detector C (#189) — JS SSTI via `Handlebars.compile(<tainted>)`
|
|
541
|
+
* or `ejs.render(<tainted>, ...)` / `ejs.compile(<tainted>)`.
|
|
542
|
+
*
|
|
543
|
+
* Compiling an attacker-controlled template lets the attacker execute
|
|
544
|
+
* arbitrary code through helper-shadowing / prototype gadgets
|
|
545
|
+
* (Handlebars CVE-2019-19919 chains, EJS render-options escape). CWE-1336.
|
|
546
|
+
*/
|
|
547
|
+
export declare function findJsTemplateInjectionSstiFindings(code: string, file: string): SastFinding[];
|
|
428
548
|
//# sourceMappingURL=language-sources-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-sources-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/language-sources-pass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAwB,WAAW,EAAO,MAAM,sBAAsB,CAAC;AAC3H,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAqB9E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0C/B,CAAC;AAiCF,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B;;;;OAIG;IACH,oBAAoB,EAAE,cAAc,EAAE,CAAC;IACvC;;;OAGG;IACH,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B;;;OAGG;IACH,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAMD,qBAAa,mBAAoB,YAAW,YAAY,CAAC,qBAAqB,CAAC;IAC7E,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,qBAAqB;
|
|
1
|
+
{"version":3,"file":"language-sources-pass.d.ts","sourceRoot":"","sources":["../../../src/analysis/passes/language-sources-pass.ts"],"names":[],"mappings":"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"}
|