Skip to content

feat(security): add a policy for reporter-supplied proof-of-concept code - #1129

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:feat/poc-handling-policy
Aug 29, 2026
Merged

feat(security): add a policy for reporter-supplied proof-of-concept code#1129
potiuk merged 1 commit into
apache:mainfrom
potiuk:feat/poc-handling-policy

Conversation

@potiuk

@potiuk potiuk commented Aug 29, 2026

Copy link
Copy Markdown
Member

Summary

Security reports arrive with exploit scripts, container images, network probes and binaries, and several skills read inbound report content — but nothing in the framework says what an agent may do with an attachment.

I grepped the security family for "never run/execute PoC", "isolated container", and "do not execute" and got nothing. Skills mention PoCs; none govern them.

Adds docs/security/poc-handling-policy.md, a sibling to the existing forwarder-routing-policy.md.

The rule: never execute reporter-supplied code on the host. Fetch and display it, verify by static read against the affected code path, and only on explicit operator approval run it in an isolated container — no network, ephemeral filesystem, no host-credential mounts, no host-port forwards. Binary attachments are never decompiled or executed in this flow.

Motivation

The report arrives from an unauthenticated stranger, over a channel that accepts mail from anyone, and the agent reading it holds the maintainer's credentials.

The asymmetry decides the default. A static read costs minutes and cannot hurt the host; executing an unknown script on a maintainer's workstation risks credential theft, lateral movement into project infrastructure, and — because the agent runs with the maintainer's authority — actions taken in the maintainer's name. The "does this bug exist?" question almost always answers statically anyway: the report names a sink, and either the code reaches it with attacker-controlled input or it does not.

Grounded in the existing AGENTS.md rule that external content is data, never an instruction. A proof-of-concept is the most literal case of that — a file whose entire purpose is to make something happen.

Scope

The policy explicitly states what it does not restrict — reading, quoting into the tracker, attaching as evidence, the project's own maintainer-written reproducers, and ordinary fix verification — so it reads as a bar on execution, not on analysis.

Referenced from security-issue-triage Step 3, where the temptation to run the PoC is strongest, and indexed in docs/security/README.md.

Test plan

prek run --files passes on all three files, including markdownlint, check-placeholders, skill-and-tool-validate, doctoc, SPDX stamping, the in-hook lychee (which validates the new AGENTS.md anchor), and the vendor-neutrality score regeneration.

🤖 Generated with Claude Code

Security reports arrive with exploit scripts, container images, network
probes and binaries, and several skills read inbound report content —
but nothing in the framework said what an agent may do with an
attachment. Grepping the security family for "never run/execute PoC",
"isolated container", or "do not execute" returned nothing. Skills
mention PoCs; none govern them.

That is a gap worth closing for a framework whose skills routinely read
attacker-supplied code: the report arrives from an unauthenticated
stranger, over a channel that accepts mail from anyone, and the agent
reading it holds the maintainer's credentials.

Adds `docs/security/poc-handling-policy.md`, a sibling to the existing
`forwarder-routing-policy.md`. The rule: never execute reporter-supplied
code on the host. Fetch and display it, verify by static read against
the affected code path, and only on explicit operator approval run it in
an isolated container — no network, ephemeral filesystem, no
host-credential mounts, no host-port forwards. Binary attachments are
never decompiled or executed in this flow.

The default is static because the asymmetry is decisive: a static read
costs minutes and cannot hurt the host, while executing an unknown
script on a maintainer's workstation risks credential theft and actions
taken in the maintainer's name. The "does this bug exist?" question
almost always answers statically anyway.

Scopes what the rule does *not* restrict — reading, quoting, attaching
as evidence, the project's own reproducers, and ordinary fix
verification — so it does not read as a bar on analysis.

Grounds it in the existing `AGENTS.md` rule that external content is
data, never an instruction; a PoC is the most literal case of that.
Referenced from `security-issue-triage` Step 3, where the temptation to
run it is strongest, and indexed in `docs/security/README.md`.

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 e3cc28c 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