Skip to content

fix(security-issue-import): require a positive GHSA query on every scan - #1128

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/import-positive-ghsa-query
Aug 29, 2026
Merged

fix(security-issue-import): require a positive GHSA query on every scan#1128
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/import-positive-ghsa-query

Conversation

@potiuk

@potiuk potiuk commented Aug 29, 2026

Copy link
Copy Markdown
Member

Summary

The skill already says not to exclude notifications@github.com wholesale, because that sender carries both tracker-mirror chatter and GHSA-relayed inbound reports. That rule is correct, but it is negative — and negative rules are not self-enforcing.

Adds a positive counterpart that every import scan runs alongside the candidate-listing query:

from:notifications@github.com newer_than:<window>
  (GHSA OR "Report a vulnerability" OR "security advisory")

Motivation

An exclusion added anywhere for noise reduction — in the candidate query, a project override, a hand-edited one-off — removes the entire GHSA intake channel. The resulting miss is invisible: nothing reports that a report was filtered out, so the scan looks clean and the advisory is simply never seen.

A downstream adopter lost an incomplete-fix follow-up advisory to exactly this, and caught it only because the operator independently knew the report existed. That is not a control — it is luck.

Because the new query does not depend on the other query's filter list, the GHSA channel is checked by construction and cannot be filtered away by an exclusion elsewhere. Cost is one extra search per scan.

Also

Documents the 404 case on the advisory record API. A 404 there means the operator is not yet a collaborator on that specific advisory — an access state, not a missing advisory — and the fix is an admin hand-off (someone with advisory-admin rights adds the operator) before the record API and the reporter-reply path work. That distinction is easy to misread as "no such advisory" and abandon.

Test plan

prek run --files passes on both files. The in-hook lychee confirms the new cross-reference anchor (#security-issue-import--ghsa-advisory-query-mandatory-second-pass) resolves against the doctoc-generated TOC, and check-placeholders confirms the added text uses only <upstream> / <GHSA> / <window> placeholders.

🤖 Generated with Claude Code

The skill already says not to exclude `notifications@github.com`
wholesale, because that sender carries both tracker-mirror chatter and
GHSA-relayed inbound reports. That rule is correct but negative, and
negative rules are not self-enforcing.

An exclusion added anywhere for noise reduction — in the candidate
query, in a project override, in a hand-edited one-off — removes the
entire GHSA intake channel. The resulting miss is invisible: nothing
reports that a report was filtered out, so the scan looks clean and the
advisory is simply never seen. A downstream adopter lost an
incomplete-fix follow-up advisory to exactly this, and caught it only
because the operator independently knew the report existed.

Adds a positive counterpart that every import scan runs alongside the
candidate-listing query:

    from:notifications@github.com newer_than:<window>
      (GHSA OR "Report a vulnerability" OR "security advisory")

Because it does not depend on the other query's filter list, the GHSA
channel is checked by construction and cannot be filtered away by an
exclusion elsewhere. Cost is one extra search per scan.

Also documents the 404 case on the advisory record API: it means the
operator is not yet a collaborator on that specific advisory — an
access state, not a missing advisory — and names the admin hand-off
needed before the record API and reporter-reply path work.

Generated-by: Claude Code (Claude Opus 5)
@potiuk potiuk added family:security security-* skills capability:intake Import external signal + sync tracker state labels Aug 29, 2026
@potiuk
potiuk merged commit 61db7bd into apache:main Aug 29, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

capability:intake Import external signal + sync tracker state family:security security-* skills

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant