circle-ir-ai 2.8.21 → 2.8.23
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/CHANGELOG.md +107 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,84 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.8.23] - 2026-06-16
|
|
9
|
+
|
|
10
|
+
### Changed — bump `circle-ir` 3.49.0 → 3.50.0
|
|
11
|
+
|
|
12
|
+
Recall improvement for inline-source taint patterns. circle-ir#83
|
|
13
|
+
(subsumes #76) closes the cross-language false-negative class where
|
|
14
|
+
a taint source used inline as a call/concat argument was not
|
|
15
|
+
tracked — previously only an intermediate variable recovered the
|
|
16
|
+
flow:
|
|
17
|
+
|
|
18
|
+
- **Java**: `Runtime.getRuntime().exec("echo " + req.getParameter("u"))`
|
|
19
|
+
and `Runtime.getRuntime().exec(req.getParameter("u"))`
|
|
20
|
+
- **JavaScript/TypeScript**: `eval(req.query.x)`,
|
|
21
|
+
`vm.runInThisContext(req.cookies.c)`,
|
|
22
|
+
`child_process.exec(req.body.cmd)`
|
|
23
|
+
- **Python**: `os.system("echo " + request.args.get("u"))` plus
|
|
24
|
+
for-loop iterable patterns: `for p in request.args.getlist("p"):
|
|
25
|
+
os.system(p)` (closes the original cognium-dev#76)
|
|
26
|
+
|
|
27
|
+
Four upstream fixes combined: an inline-source colocation pass in
|
|
28
|
+
`taint-propagation-pass.ts`, Python for-loop iterable derivation
|
|
29
|
+
with virtual `http_param` anchor, loosened empty-source early
|
|
30
|
+
returns in `taint-propagation-pass.ts` / `interprocedural-pass.ts`,
|
|
31
|
+
and `canSourceReachSink` matrix expansion for JS RCE shapes
|
|
32
|
+
(`code_injection` valid sink for `http_param` / `http_query` /
|
|
33
|
+
`http_header` / `http_cookie`).
|
|
34
|
+
|
|
35
|
+
Expected impact: lifts the dominant recall gap on OWASP
|
|
36
|
+
BenchmarkPython, OWASP Benchmark Java with bare-arg variants, and
|
|
37
|
+
the JS `eval(req.query.x)` shape. Should be visible on
|
|
38
|
+
CWE-Bench-Java cmdi/code-injection runs as well.
|
|
39
|
+
|
|
40
|
+
No circle-ir-ai source change — dep-only bump to surface the
|
|
41
|
+
upstream recall fix to cognium-ai / circle-pack / mcp-server
|
|
42
|
+
consumers.
|
|
43
|
+
|
|
44
|
+
## [2.8.22] - 2026-06-16
|
|
45
|
+
|
|
46
|
+
### Changed — bump `circle-ir` 3.48.0 → 3.49.0
|
|
47
|
+
|
|
48
|
+
Pulls in upstream additive sink/pass coverage with no API surface
|
|
49
|
+
changes. Visible to cognium-ai users without any engine-side work:
|
|
50
|
+
|
|
51
|
+
- **`insecure-cookie` pattern pass for JavaScript/TypeScript (CWE-614,
|
|
52
|
+
circle-ir#43)** — scans `res.cookie(...)` / `reply.cookie(...)`
|
|
53
|
+
invocations for missing `secure: true` / `httpOnly: true` flags.
|
|
54
|
+
Pattern-based, no taint required. One finding per call site,
|
|
55
|
+
severity `medium`.
|
|
56
|
+
- **`log_injection` sinks for Java + JavaScript/TypeScript (CWE-117,
|
|
57
|
+
circle-ir#44)** — slf4j/logback `Logger.info`/`warn`/`error`/etc.
|
|
58
|
+
and `java.util.logging.Logger` for Java; `console.log`/`warn`/`error`/
|
|
59
|
+
`info`/`debug`/`trace` for JS/TS. Severity `low`.
|
|
60
|
+
- **`nosql_injection` (CWE-943) mongoose Model/Query fluent-chain
|
|
61
|
+
coverage (circle-ir#45)** — closes the gap where
|
|
62
|
+
`User.findOne({ username })` and friends didn't fire because the
|
|
63
|
+
receiver doesn't resolve to `Collection`. Adds `Model` /`Query`
|
|
64
|
+
class entries plus classless `findOne`/`updateOne`/`aggregate`/…
|
|
65
|
+
for JS/TS.
|
|
66
|
+
- **Classless `open_redirect` (CWE-601) entry for Express
|
|
67
|
+
`res.redirect()` (circle-ir#46)** — removes the receiver-type
|
|
68
|
+
resolution dependency for the Express response object.
|
|
69
|
+
- **Python `path_traversal` sanitizers for `os.path.realpath` and
|
|
70
|
+
`os.path.abspath` (circle-ir#48 pt 2)** — Python equivalents of
|
|
71
|
+
Java's `File.getCanonicalPath`; cuts the canonical-path FP class on
|
|
72
|
+
Python codebases.
|
|
73
|
+
- **Rust actix-web / axum typed extractors now produce taint flows
|
|
74
|
+
(circle-ir#71)** — three fixes in the upstream taint matcher /
|
|
75
|
+
language-sources / propagation passes so `web::Path<…>` /
|
|
76
|
+
`axum::extract::Path<…>` are recognised as sources, source `type`
|
|
77
|
+
is selected per extractor kind (`Form`/`Query`/`Path` →
|
|
78
|
+
`http_param`; `Json`/`Body`/`Bytes`/`Multipart` → `http_body`),
|
|
79
|
+
and source `variable` is attached so propagation can fire.
|
|
80
|
+
Mostly improves Rust HTTP framework detection (axum, actix-web).
|
|
81
|
+
|
|
82
|
+
No circle-ir-ai source change in this release — it's a dep-only bump
|
|
83
|
+
to surface the upstream additive coverage to cognium-ai / circle-pack
|
|
84
|
+
/ mcp-server consumers.
|
|
85
|
+
|
|
8
86
|
## [2.8.21] - 2026-06-15
|
|
9
87
|
|
|
10
88
|
### Fixed — capability_mismatch severity inversion for over-declared capabilities (cognium-ai#100 Bug #2)
|
|
@@ -49,6 +127,35 @@ real vulnerability-bearing files). Test updated to assert the new
|
|
|
49
127
|
default. No production behaviour change — `prepublishOnly` was
|
|
50
128
|
blocking publish on the stale assertion.
|
|
51
129
|
|
|
130
|
+
### Changed — bundled LLM throughput defaults (2026-06-14, undocumented in 2.8.20)
|
|
131
|
+
|
|
132
|
+
`src/llm/ax-client.ts` raised three defaults to match modern hosted
|
|
133
|
+
LLM headroom — committed alongside the 2.8.20 → 2.8.21 work but not
|
|
134
|
+
called out in 2.8.20's CHANGELOG. Recording here for traceability:
|
|
135
|
+
|
|
136
|
+
- `MAX_CODE_CONTEXT_LENGTH` `8000` → `32000` chars (env
|
|
137
|
+
`LLM_MAX_CODE_CONTEXT` overrides).
|
|
138
|
+
- `LLM_MAX_CONCURRENT` `5` → `10` (env override unchanged).
|
|
139
|
+
- `LLM_RATE_LIMIT` `10` → `20` req/s (env override unchanged).
|
|
140
|
+
|
|
141
|
+
Override individually via env to restore the previous limits on
|
|
142
|
+
constrained backends.
|
|
143
|
+
|
|
144
|
+
### Changed — big-file / minified-shape skip guard (mastra swarm path)
|
|
145
|
+
|
|
146
|
+
`src/agents/mastra/swarm.ts` now short-circuits per-file analysis
|
|
147
|
+
when content exceeds `LLM_MAX_FILE_BYTES` (default 500 KB) or
|
|
148
|
+
matches a minified-shape heuristic (longest line > 5000 chars, or
|
|
149
|
+
avg line > 500 chars). Minified bundles (e.g. `mermaid.min.js` at
|
|
150
|
+
~18k parse errors) and giant generated files (~140 kLOC AWS SDK
|
|
151
|
+
marshallers) thrash tree-sitter without producing useful findings;
|
|
152
|
+
skipping them up-front saves 30 s – 3 min per file vs hitting the
|
|
153
|
+
analysis timeout. Surfaced through the same `[SKIP]` stderr marker
|
|
154
|
+
introduced in cognium-ai#88. Also tightened LLM-mode timeout
|
|
155
|
+
defaults (`llmEnrichmentMs`/`llmVerificationMs` 60 s → 45 s,
|
|
156
|
+
`llmMaxMs` 180 s → 120 s) for fail-fast behaviour on real-world
|
|
157
|
+
mixes.
|
|
158
|
+
|
|
52
159
|
## [2.8.20] - 2026-06-13
|
|
53
160
|
|
|
54
161
|
### Changed — circle-ir 3.39.0 → 3.48.0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circle-ir-ai",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.23",
|
|
4
4
|
"description": "LLM-enhanced SAST analysis built on circle-ir",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"dependencies": {
|
|
95
95
|
"@ax-llm/ax": "^20.0.0",
|
|
96
96
|
"@mastra/core": "^1.18.0",
|
|
97
|
-
"circle-ir": "3.
|
|
97
|
+
"circle-ir": "3.50.0",
|
|
98
98
|
"minimatch": "^10.2.5",
|
|
99
99
|
"p-queue": "^9.1.0"
|
|
100
100
|
},
|