circle-ir-ai 4.16.4 → 4.16.5
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 +42 -41
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,49 +8,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
|
-
- **`circle-ir` 4.9.
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
- **`circle-ir` 4.9.27 → 4.9.29.** All four packages re-pinned; suites pass unchanged
|
|
12
|
+
(circle-ir-ai 2340, cognium-ai 363, mcp-server 11, circle-pack 182) and each resolves exactly
|
|
13
|
+
one copy. 4.9.28 was pinned briefly on this branch and never published, so this supersedes it.
|
|
14
14
|
|
|
15
|
-
**C#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
| Gate | 4.9.26 | 4.9.27 |
|
|
19
|
-
|---|---|---|
|
|
20
|
-
| `benchmark:csharp` (engine) | 90.9% TPR / 0.0% FPR | **100.0% / 25.0%** |
|
|
21
|
-
| `benchmark:csharp-juliet` (injected config) | 13.8% / 8.1% | **21.1% / 16.3%** |
|
|
22
|
-
| `benchmark:csharp-juliet --default-config` | 2.4% / 2.4% | **10.6% / 10.6%** |
|
|
23
|
-
| `benchmark:csharp-oracle` (labelled, 808 cases) | 71.2% / 8.7% | **71.2% / 8.7%** (unchanged) |
|
|
24
|
-
|
|
25
|
-
The recall gains are real: the ASP.NET Core `Response.WriteAsync` xss sink landed
|
|
26
|
-
(cognium-dev#503), turning `xss_response_write_concat` from FN to TP, and Juliet CWE-89 sqli
|
|
27
|
-
went 29.6% → 59.3% with CWE-643 xpath 70% → 80%.
|
|
28
|
-
|
|
29
|
-
They arrived with a precision cost. The new xss sink does **not** credit
|
|
30
|
-
`HtmlEncoder.Default.Encode`, so `xss_htmlencode_safe` flipped TN → FP and the synthetic gate's
|
|
31
|
-
FPR went 0% → 25% — filed as cognium-dev#520. Juliet CWE-89's false-positive files went 3 → 12
|
|
32
|
-
and its cross-method leaks 3 → 12 in the same step.
|
|
33
|
-
|
|
34
|
-
The labelled oracle did not move at all, which locates 4.9.27's C# changes in the
|
|
35
|
-
Juliet-shaped source/sink surface rather than the ASP.NET Core surface the oracle covers.
|
|
36
|
-
|
|
37
|
-
### Fixed
|
|
38
|
-
- **ReDoS in `stripLiterals` wedges the whole process on scanned bundle content (cognium-ai#508).**
|
|
39
|
-
The regex-literal stripper's inner character class was `[^\]]`, which also matches a backslash —
|
|
40
|
-
so it overlapped the `\\.` alternative and a run of backslashes inside an unterminated `[…]`
|
|
41
|
-
could be partitioned exponentially many ways. Measured on `" /[" + "\\"×N + "x"`: 34 chars
|
|
42
|
-
6.5 ms, 44 chars 794 ms, **48 chars 5,395 ms** (~×2.7 per two characters); a ~56-character line
|
|
43
|
-
pins one core for **5+ hours**. Because `detectCodeThreatPatterns` runs over the **contents of
|
|
44
|
-
scanned skill bundles**, that is attacker-controlled input and a whole-process denial of service
|
|
45
|
-
— the service is single-threaded, so every concurrent job dies with it, and the bundle need not
|
|
46
|
-
even pass validation. Observed three times in production on 2026-09-24 (5 h 37 m, ~17 min, ~6 min);
|
|
47
|
-
`/health` is unanswerable throughout while the container stays alive, which reads as "the service
|
|
48
|
-
is down". Root-caused from a live stack captured via the Node inspector.
|
|
49
|
-
|
|
50
|
-
Fix excludes `\\` from the negated class, making the two alternatives disjoint: **5,394.9 ms →
|
|
51
|
-
0.1 ms**, with byte-identical output on real regex literals, division and string literals.
|
|
52
|
-
Audited the rest of the file — this was the only ambiguous `\\.` / `[^…]` site.
|
|
15
|
+
**C# product-path recall is essentially solved, and C# precision got much worse.** Both halves
|
|
16
|
+
matter and they have the same cause.
|
|
53
17
|
|
|
18
|
+
| Gate | 4.9.27 | 4.9.28 | **4.9.29** |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| `benchmark:csharp-juliet` (injected config) | 21.1 / 16.3 | 69.9 / 17.1 | **93.5 / 37.4** |
|
|
21
|
+
| `benchmark:csharp-juliet --default-config` | 10.6 / 10.6 | 34.1 / 13.8 | **93.5 / 37.4** |
|
|
22
|
+
| `benchmark:csharp-oracle` (808 labelled) | 71.2 / 8.7 | 73.5 / 8.4 | **73.7 / 8.4** |
|
|
23
|
+
| `benchmark:csharp-product` | 100.0 / 50.0 | 100.0 / 25.0 | 100.0 / 25.0 |
|
|
24
|
+
| `benchmark:csharp` (engine) | 100.0 / 25.0 | 100.0 / 25.0 | 100.0 / 25.0 |
|
|
25
|
+
| `benchmark:rust` | 92.3% | **89.6%** | **89.6%** ⚠ |
|
|
26
|
+
|
|
27
|
+
**Product-path C# recall on Juliet: 2.4% → 10.6% → 34.1% → 93.5% across 4.9.26 → 4.9.29.**
|
|
28
|
+
|
|
29
|
+
**The injected-config and default-config runs now produce identical numbers**, because
|
|
30
|
+
cognium-dev#502's I/O sources (console/file/socket/env) landed in the *default* model. Verified
|
|
31
|
+
directly: a Juliet `ReadLine` fixture that previously bound nothing now yields
|
|
32
|
+
`sources 2, sinks 5, flows 2` under the default config. The "engine ceiling vs product path"
|
|
33
|
+
gap this runner was built to expose has closed for this corpus — keep quoting both anyway, so
|
|
34
|
+
the day they diverge again is visible.
|
|
35
|
+
|
|
36
|
+
**cognium-dev#503 landed:** CWE-81 went 0.0% → 88.9% and CWE-94 0.0% → 100%, the two families
|
|
37
|
+
that were at exactly zero and that ticket's two missing sinks.
|
|
38
|
+
|
|
39
|
+
**Precision regressed sharply, and only where cognium-dev#508 applies.** CWE-89 sqli and
|
|
40
|
+
CWE-643 xpath now fire on **100% of their files including every `Good*()` safe control** (27/27
|
|
41
|
+
and 10/10), and CWE-94 on 90%. The other six families hold **0.0% FPR** at 88.9–90% recall.
|
|
42
|
+
More bound sources produce proportionally more bogus source×sink pairings: CWE-89 cross-method
|
|
43
|
+
leaks went 3 → 12 → 27 across the same three releases. #508 is now the top C# precision item,
|
|
44
|
+
reported there with this evidence.
|
|
45
|
+
|
|
46
|
+
**Not fixed in either release:** cognium-dev#520 (`HtmlEncoder` still uncredited, so
|
|
47
|
+
`xss_htmlencode_safe` remains the sole FP on both C# synthetic gates), #508, #509.
|
|
48
|
+
|
|
49
|
+
**Carried-over regression:** `rmp_serde::from_slice` is still not a deserialization sink, so
|
|
50
|
+
MessagePack over a `TcpStream` is undetected — Rust synthetic 97.3% TPR, down from 100%.
|
|
51
|
+
cognium-dev#541.
|
|
52
|
+
|
|
53
|
+
Unchanged on 4.9.29: OWASP 1415/1415, Juliet 243/243, SecuriBench 97.2%/6.7%, Go 89.5%,
|
|
54
|
+
NodeJS 92.9%, CWE-Bench-Rust 100%, bash and HTML 100%.
|
|
54
55
|
|
|
55
56
|
## [4.16.3] - 2026-09-24
|
|
56
57
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circle-ir-ai",
|
|
3
|
-
"version": "4.16.
|
|
3
|
+
"version": "4.16.5",
|
|
4
4
|
"description": "LLM-enhanced SAST analysis built on circle-ir",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"@ax-llm/ax": "^20.0.0",
|
|
106
106
|
"@cognium/project-profile-detect": "^1.1.0",
|
|
107
107
|
"@mastra/core": "^1.18.0",
|
|
108
|
-
"circle-ir": "4.9.
|
|
108
|
+
"circle-ir": "4.9.29",
|
|
109
109
|
"minimatch": "^10.2.5",
|
|
110
110
|
"p-queue": "^9.1.0"
|
|
111
111
|
},
|