Precision pass on auth and resource analysis, three fresh CVE corpus pairs, plus a UTF-8 slice panic in the path abstract domain.
Closes ~1900 Go auth FPs on gitea-shaped helpers, the mastodon/diaspora private-callback Ruby controller pattern, and a phantom-taint outbreak from JS/TS / Java lambda shorthand in jest-style nested test callbacks.
Highlights
- Java JDBC raw-SQL sinks.
Statement.execute/executeBatch/executeLargeUpdatemodeled asSQL_QUERYvia type-qualified resolution (DatabaseConnection.execute), so bareexecuteon Runnable / Executor / HttpClient does not
over-fire. Closes GHSA-h8cj-hpmg-636v (AppsmithFilterDataServiceCE.dropTable). - Java/Kotlin regex allowlist.
Pattern.matcher(value).matches()recognised as aValidationCallwhen the receiver name containsregexorpattern. Branch narrowing appliesvalidated_mustto the matcher argument on the surviving
branch. - Go raw-SQL builders.
goqu.L/goqu.Litmodeled asSQL_QUERYsinks; safe siblings (goqu.I,goqu.C,goqu.T,goqu.V, …) stay unlabeled. Gin source list extended with the array-returning helpers (c.QueryArray,c.GetQueryArray,
c.PostFormArray,c.GetPostFormArray). Closes CVE-2026-41422 (daptin). - Rust format-string named args.
format!("...{x}...")and friends (println!,write!, log macros,panic!, …) lift{name}captures into the call'suses. Mirrors the Python f-string lifter. - Java/JS lambda shorthand.
cmd -> …and(a, b) -> …now matchextract_param_meta, so lambda formals are no longer treated as closure captures. Closes 934 phantom taint findings on the outline test suite.
CVE corpus pairs added
- CVE-2026-41422 — daptin Go SQL injection via
goqu.L - CVE-2023-42456, CVE-2024-32884, CVE-2025-53549 — Rust vulnerable + patched fixtures
- GHSA-h8cj-hpmg-636v — Appsmith Java JDBC dropTable
Fixes
- Panic on non-ASCII input to
has_first_char_absolute_checkin the path abstract domain. The 32-byte search window around[0]was sliced as&clause[lo..hi](str), which panicked whenhilanded inside a multi-byte UTF-8 char (e.g. em
dash). Switched to byte-pattern checks. Surfaced bycargo fuzz.
False-positive fixes
- Go ~1900 auth FPs closed.
unit_has_user_input_evidenceallow-list narrowed for Go (noctx,context,info,body,path,payload,dto,form,queryas user-input indicators); param collection dropsctx context.Context/
context.CancelFuncentirely and avoids type-segment identifiers polluting the param-name set. - Ruby controller visibility + filter-callback gate.
private/protectedmethods and Rails filter callback targets (before_action,after_action,around_action, theirprepend_*/append_*/skip_*siblings, legacy*_filter
aliases) no longer emit asFunctionunits. Closes mastodon / diasporaset_Xrow-fetch flood. - Field-LHS resource acquires no longer counted as local leaks at
apply_assignment(e->name = (char *)e + sizeof(*e),mem->buf = ptr). Parent struct owns the field's lifecycle. Cross-language. Closes curlentry_newand equivalents in
openssl / postgres. - Empty-formals SSA lowering signal.
lower_to_ssa_with_paramssetswith_params=trueon() => {…}so external vars are correctly tagged synthetic. JS/TS / Java auto-seed pass no longer mistakes a bubbled-up free var (e.g.userIdlifted
from a nested jest test callback) for a real handler formal. - Rust integer-typed values suppress
Cap::FILE_IOat the abstract-domain leaf gate. Closes the sudo-rs RUSTSEC-2023-0069 patched FPpath.push(uid.to_string()).
Full changelog: https://github.com/elicpeter/nyx/blob/master/CHANGELOG.md