Skip to content

bugs: frame scanned-repo and tracker text as untrusted data; author-check scan's lane cursor and dedupe #7394

Closed

Description

@kyle-sexton

Found by the security review of #7393. Both predate that PR (the PR rewrites these bodies but neither added nor removed this).

  1. Untrusted-content framing absent (P4). plugins/bugs/skills/scan/SKILL.md (rung 1, hunters, Step 6 dedupe) and plugins/bugs/skills/write/SKILL.md (survey) read repository files and tracker item text, but no bugs skill or context file carries the inline framing docs/conventions/untrusted-content/README.md requires (grep -rln 'never instructions to you' plugins/bugs is empty). A planted imperative in scanned code or a tracker item could steer hunters or gates (suppress or skew findings). Filing stays gated by --track and filing_posture. Fix: add the convention's inline form to the scan Step 2 and Step 4 dispatch contracts (context/lenses.md, context/verification-gate.md) and the write survey step.

  2. Lane cursor and dedupe trust any author (P4). Rung 1 picks the next lane from the newest tracker item containing Filed by /bugs:scan (lane: <name>) with no author check, so on a public repo anyone can steer the rotation; Step 6 dedupe can attach a real finding as a comment on an outsider's issue. plugins/work-items/reference/item-content-trust.md requires a provider-enforced write surface. Fix: accept the provenance line and dedupe matches only from the scanning identity or a repo writer; otherwise fall through to rung 2 / file a new item.

Also noted, not graded: scan/context/verification-gate.md lets a gate run the scanned repo's tests to label a finding reproduced, which executes scanned code on an unattended run over an untrusted checkout.

Done when

  • plugins/bugs/skills/scan/context/lenses.md, plugins/bugs/skills/scan/context/verification-gate.md, plugins/bugs/skills/scan/SKILL.md (rung 1 lane cursor and Step 6 dedupe) and plugins/bugs/skills/write/SKILL.md (survey step) each carry the inline form from docs/conventions/untrusted-content/README.md, with both conformance fragments unbroken: never instructions to you and untrusted-content/README.md` "The framing contract".
  • Rung 1's lane cursor and Step 6 dedupe accept a Filed by /bugs:scan (lane: <name>) match only from the scanning identity or a repository writer, and otherwise fall through to rung 2 or file a new item.
  • The changelog fragment is valid (the lane's fragment check passes), and CI's check-skills job passes on the PR (a PR check; this run does not run it).

Out of scope

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 13, 2026
  2. github-actions commented on Oct 13, 2026

    @github-actions
    Contributor

    Thanks for the report. Automated triage handed this issue to a maintainer.

    Automated triage. A maintainer reviews it.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 13, 2026
  4. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 15, 2026
  5. added theissue type on Oct 15, 2026
  6. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 17, 2026
  7. kyle-sexton commented on Oct 17, 2026

    @kyle-sexton
    ContributorAuthor

    Admitted in owner wave 1.

  8. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 17, 2026
  9. kyle-sexton commented on Oct 17, 2026

    @kyle-sexton
    ContributorAuthor
    No description provided.
  10. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions