Skip to content

fix(security-issue-sync): credit scanner findings as tool, not anonymous - #1124

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/scan-credit-tool-not-anonymous
Aug 29, 2026
Merged

fix(security-issue-sync): credit scanner findings as tool, not anonymous#1124
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/scan-credit-tool-not-anonymous

Conversation

@potiuk

@potiuk potiuk commented Aug 29, 2026

Copy link
Copy Markdown
Member

Summary

  • The security-issue-sync anonymise gate contradicts the framework's own bot-credits policy: tools/cve-tool-vulnogram/bot-credits-policy.md says automation that surfaces a real vulnerability is credited type: "tool", but the gate replaces the credit with anonymous.
  • Splits the two concerns the gate conflated — suppressing an un-consenting individual, and withholding a vendor's commercial product name — from a third it never needed to do: erasing the fact that a tool made the discovery.
  • Adds a Public credit name column to the scanner-products.md template so the public-safe name of the scanning tooling is declared separately from the confidential product token.

Motivation

Found while reconciling a downstream adopter's override against the framework default. The adopter had independently rewritten this rule after the anonymous behaviour produced 44 CVE records carrying a bogus anonymous finder credit — findings that a scanning tool had genuinely discovered and that the CVE 5.x schema has an exact category for.

The confidentiality goal is sound and unchanged. The product token still never reaches a public surface, and the audit-trail surfaces (mailing-list thread field, status rollup, mail thread) stay untouched. What changes is only what replaces the suppressed name.

Migration path

Backwards-compatible. The new column is optional: an adopter who leaves it blank keeps today's anonymous behaviour exactly. Adopters opt in by declaring a public credit name per scanner. No skill step is renumbered and no anchor moves.

Test plan

  • prek run --files <the three changed files> — all hooks pass, including markdownlint, check-placeholders, and skill-and-tool-validate.
  • lychee --config .lychee.toml --offline over the changed files — 77 links OK, 0 errors; the in-hook lychee also passes.
  • Anchor check: the three files' cross-references to bot-credits-policy.md resolve, and the Step 5b 1b back-reference from gather.md is unchanged.

🤖 Generated with Claude Code

The anonymise gate contradicted the framework's own bot-credits policy.
`tools/cve-tool-vulnogram/bot-credits-policy.md` states that automation
which surfaces a real vulnerability is credited with `type: "tool"` —
"Scanners, AI agents, and automation that surface a real vulnerability
deserve the credit". But the gate in `security-issue-sync` replaced the
credit with `anonymous`, discarding the discovery attribution entirely.

The gate conflated two separate concerns. Suppressing an individual who
never consented to public credit is correct. Withholding the vendor's
commercial product name is correct. Neither requires erasing the fact
that a tool made the discovery.

Separates them: the scrub now writes the scanner's declared *public
credit name* — emitted with `type: "tool"` per the policy — and keeps
`anonymous` only as the fallback when no public credit name is declared.
Confidentiality is unchanged: the product token still never reaches a
public surface, and the audit-trail surfaces are still untouched.

Adds a `Public credit name` column to the `scanner-products.md` template
so an adopter declares the public-safe name of the tooling that ran the
scan, distinct from the confidential product token. Existing adopters are
unaffected until they fill it in — a blank column keeps today's
`anonymous` behaviour.

Also corrects the template's claim that *Reporter credited as* is always
emitted as `type: finder`; per the policy it is `finder` for a human and
`tool` for automation.

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 40567d6 into apache:main Aug 29, 2026
10 checks passed
potiuk added a commit that referenced this pull request Aug 29, 2026
…anonymous (#1131)

Reconciles #1124 with #1127, as promised in #1127's description.

#1124 made `anonymous` the fallback for a scanner-sourced finding whose
scanner declares no public credit name. #1127 then landed the
finder-credit policy, whose Rule 2 says the opposite: where there is no
named finder, omit the `finder` credit rather than writing a
placeholder. Both are on `main`, so the framework currently contradicts
itself in three places.

Rule 2 wins. It is grounded in an ASF CVE reviewer's feedback on a
published batch — "I'm not sure how helpful it is to credit 'anonymous'
as finder, just leave it out" — and a `credits[]` carrying only the
remediation developer is a complete record, whereas a literal
`anonymous` occupies the space a reader scans for attribution and
answers nothing.

Nothing else about #1124 changes: the scanner's public credit name is
still written when declared, still emitted with `type: "tool"`, and the
confidential product token still never reaches a public surface. Only
the no-name-declared branch changes, from writing a placeholder to
omitting the row.

Grep confirms no `anonymous` fallback remains under skills/, projects/,
or tools/.

Generated-by: Claude Code (Claude Opus 5)
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