Skip to content

fix: close source-mode blind spots and SSRF false positives, harden releases - #1

Merged
SergeevDmitry merged 8 commits into
masterfrom
bug-fixes
Nov 14, 2026
Merged

SergeevDmitry merged 8 commits into
masterfrom
bug-fixes

Conversation

@SergeevDmitry

Copy link
Copy Markdown
Member

Summary

Detection

  • Decorator, annotation and attribute names and descriptions are read from parsed arguments, including same-file string constants. The old text scan matched inside strings and fell back to the docstring when an argument was unreadable; an unreadable value is now a coverage gap. Readiness no longer reports such tools as missing a description.
  • Callees and decorators are read through comments, whitespace, line continuations and brackets (server./* c */tool(...), @(mcp.tool()), (0, cp.execSync)(...)). Each of these used to hide a registration or sink and leave a clean scan.
  • SSRF needs taint in the URL argument of a recognized HTTP client, and a URL with a fixed host clears it. This removes false positives on dict.get, Map.get, headers, request bodies and fixed API hosts.
  • Silence on the malformed-request probe is INFO, not MEDIUM: the Go and Python SDKs drop the envelope before server code runs.

Fail-closed coverage

  • A refused symlink that can lead to source records a limit instead of counting as an excused skip.

  • Parsing deeply nested input is linear and bounded per file:

    • parsing and extraction share one 5 s deadline;
    • call text shares the source buffer, and text that must be copied is capped at 4x the file size;
    • trees deeper than 32,768 levels are refused before tree-sitter's 16-bit query depth can silently drop matches.

    Hitting any of these limits is a coverage gap.

Toolchain and release

  • Go 1.26.11 (GO-2026-6859, GO-2026-6809), go-sdk v1.8.0 with a fix to the session-resume probe it requires, pflag v1.1.0, x/sys v0.50.0, and go.yaml.in/yaml/v3 in place of the archived gopkg.in/yaml.v3.
  • Actions are pinned to commit SHAs and govulncheck to v1.9.0.
  • Linux binaries link musl statically, and arm64 builds on an arm64 runner.
  • A release waits for the check workflow, runs govulncheck on each binary and attests build provenance.
  • A test keeps THIRD_PARTY_NOTICES in step with the linked modules.

Behaviour changes

Some scans that were SAFE can now be PARTIAL, when a description is unresolved, a symlink to source is refused, or a nesting limit is hit. SSRF findings and the malformed-request severity drop on servers that only call fixed APIs.

@SergeevDmitry
SergeevDmitry merged commit b2f71e8 into master Nov 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants