Nyx Security Scanner
Version updated for https://github.com/elicpeter/nyx to version v0.6.1.
- This action is used across all versions by 0 repositories.
Action Type
This is a Composite action.
Go to the GitHub Marketplace to find the latest changes.
Action Summary
Nyx is a local-first security scanner that performs cross-language taint analysis on repositories to detect vulnerabilities, providing a browser-based UI for triage and visualization without requiring cloud integration or user accounts. It automates the identification of security issues, displays detailed dataflows (source → sanitizer → sink), and allows collaborative triage management through shared state files. Key capabilities include severity-based finding categorization, code snippet visualization, scan history comparison, customizable rules, and integration with CI pipelines using SARIF output.
What’s Changed
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