Skip to content

docs(skills): require the request-to-sink path in every security triage - #2110

Merged
lukaszlenart merged 1 commit into
mainfrom
docs/triage-request-path-ownership
Nov 5, 2026
Merged

lukaszlenart merged 1 commit into
mainfrom
docs/triage-request-path-ownership

Conversation

@lukaszlenart

Copy link
Copy Markdown
Member

What

triaging-security-reports now requires every assessment to carry a path table from the HTTP request to the sink the report names: one row per hop, each a file:line read this session, a probe executed, or the literal "not traced". The table decides ownership, which becomes the verdict's first sentence:

  • input the framework accepts and operates on (type conversion, parsing, tag formatting) is the framework's fault, whatever the developer could have validated afterwards;
  • input the developer hands to a framework evaluation capability (findValue, getText, template %{}) is the application's.

Two red flags and three Common Mistakes rows close the rationalizations seen in use: "the gadget fires, so it's confirmed", "the developer declared the type", and "the earlier triage already walked the channels".

Why

In two triages this week the sink was confirmed by a direct probe and the assessment stopped there. The question that decides the verdict, whether framework code carries the request value into that sink, was answered from a memory note or not at all. The skill verified mechanisms; it did not demand reachability.

Testing (skill TDD)

Baseline, unedited skill, four subagent runs over two scenarios:

  • converter scenario (over-long numeric parameter, pre-WW-5834 worktree, PMC pushing "application's problem / generic DoS"): both runs traced the full path and landed on §8.7 unprompted; no failure to fix on that side;
  • OGNL-gadget scenario (public java.beans.Expression post, PMC pushing "quick confirm of the earlier verdict"): the neutral run traced the parameter hops but never touched the report's "reflected via tags" channel and deferred the other channels to the memory note.

With the edit, one run per scenario: both open with the ownership call, both carry the table, the gadget run traced and executed the tag channel and marked the channels it did not walk as "not traced". No new rationalization appeared, so no refactor pass was needed.

🤖 Generated with Claude Code

The triaging-security-reports skill verified the mechanism a report
names but let the assessment stop there. In two triages this week the
sink was confirmed by a direct probe while the question that decides
ownership - does framework code carry the request value into that
sink, or does the application hand it over - was answered from memory
or not at all.

The assessment now carries a path table, one row per hop from the HTTP
request to the sink, each row a file:line read this session, a probe
executed, or the literal "not traced". The table decides ownership:
input the framework accepts and operates on (type conversion, parsing,
tag formatting) is the framework's fault even when the developer could
have validated it afterwards; input the developer hands to a framework
evaluation capability (findValue, getText, template %{}) is the
application's.

Baseline: four subagent runs against the unedited skill. The converter
scenario traced the path unprompted in both runs. The OGNL-gadget
scenario traced the parameter hops but left the report's second channel
(tag reflection) untouched and deferred the remaining channels to a
memory note; the first-pass triage in the live session traced nothing.

Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com>
@lukaszlenart
lukaszlenart marked this pull request as ready for review November 5, 2026 10:26
@lukaszlenart
lukaszlenart deleted the docs/triage-request-path-ownership branch November 5, 2026 12:02
@lukaszlenart
lukaszlenart restored the docs/triage-request-path-ownership branch November 5, 2026 12:03
@lukaszlenart lukaszlenart reopened this Nov 5, 2026
@lukaszlenart
lukaszlenart merged commit 36e169f into main Nov 5, 2026
9 checks passed
@lukaszlenart
lukaszlenart deleted the docs/triage-request-path-ownership branch November 5, 2026 13:02
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.

1 participant