You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
security(attestation): bound signer receipt file intake before semantic validation #2315
The scientific-validation verifier in #2300 now emits a versioned predicate plus completion manifest and validate_receipt_manifest() strictly validates their semantics. The remaining signer-handoff intake is still a raw-bytes API: a future credentialed signer that reads manifest / predicate files without an owner-provided bounded regular-file boundary can allocate or hash attacker-controlled receipt files before the semantic validator gets a chance to reject them.
This is distinct from the 16 MiB sealed scientific evidence limit. The signer receipt pair is a different trust boundary and #2299 explicitly requires bounded inert-data intake before credentialed attestation authority is used.
RED / acceptance
Add an owner signer-facing receipt reader that:
pins every parent-directory path component without following symlinks;
opens each receipt leaf once with O_NOFOLLOW and O_NONBLOCK, requires a regular inode by descriptor, and reads at most a fixed receipt limit + 1 byte;
rejects oversized manifest or predicate bytes before JSON parsing or digest validation;
rejects the same manifest/predicate path and preserves exact bytes for validate_receipt_manifest() rather than reparsing/re-serializing them;
exposes a stable nonzero CLI result for missing, symlinked, non-regular, oversized, or semantically invalid receipt pairs;
remains uncredentialed and performs no signing, OIDC, psychometric arithmetic, or caller code execution.
Use a documented fixed limit with a quantitative rationale. A 4 MiB per-file ceiling still leaves room for more than 60k 64-hex execution-artifact identities plus JSON overhead while bounding signer memory. Put the new production module and tests under the existing Scientific Validation Evidence Quality 100% owned line/branch/docstring gate.
Do not weaken validate_receipt_manifest(), do not copy product-performance predicate semantics, and do not claim #2299 or TEPP#637 is authenticated until #2164 and the credentialed owner workflow land through normal protected review.
Implemented the issue acceptance on canonical #2300 by ordinary fast-forward commit 18123738410ea5c3bbec1103e5ddaa2606f54b2d (parent 73d64a726d31acee8fba200220640702b53f8608; no force update).
Production: scripts/ci/validate_scientific_validation_receipt.py bounds each signer-handoff manifest/predicate file to 4 MiB + 1-byte refusal, reuses the owner directory-descriptor walk, opens each leaf once with O_NOFOLLOW | O_NONBLOCK, requires a regular inode by descriptor, rejects identical paths, and passes the exact bytes unchanged to validate_receipt_manifest().
Evidence: tests/test_scientific_validation_receipt_intake.py covers valid exact bytes, oversize manifest and predicate before semantic parsing, missing/symlink/directory/FIFO/ancestor-symlink inputs, identical paths, bounded semantic rejection, stable CLI success/failure + executable dispatch, and sibling-verifier bootstrap refusal. The Scientific Validation Evidence Quality workflow now includes the new production/test/docs/CHANGELOG paths and both owner scripts under 100% branch coverage + 100% docstring coverage.
The exact-head generation is live, not GREEN: Scientific Validation Evidence Quality 35549889282 has verifier-quality job 106182546653 queued on exact 18123738... with no assigned runner/steps; CodeQL 35549889177, Security 35549889262, Semgrep 35549889271, and Python Security 35549889260 are also non-terminal. Keep this issue open until exact-head hosted settlement and qualifying review; no predecessor receipt transfers.
Activity
security(attestation): bound signer receipt intake (#2315)
seonghobae commentedon Sep 21, 2026
Implemented the issue acceptance on canonical #2300 by ordinary fast-forward commit
18123738410ea5c3bbec1103e5ddaa2606f54b2d(parent73d64a726d31acee8fba200220640702b53f8608; no force update).Production:
scripts/ci/validate_scientific_validation_receipt.pybounds each signer-handoff manifest/predicate file to 4 MiB + 1-byte refusal, reuses the owner directory-descriptor walk, opens each leaf once withO_NOFOLLOW | O_NONBLOCK, requires a regular inode by descriptor, rejects identical paths, and passes the exact bytes unchanged tovalidate_receipt_manifest().Evidence:
tests/test_scientific_validation_receipt_intake.pycovers valid exact bytes, oversize manifest and predicate before semantic parsing, missing/symlink/directory/FIFO/ancestor-symlink inputs, identical paths, bounded semantic rejection, stable CLI success/failure + executable dispatch, and sibling-verifier bootstrap refusal. The Scientific Validation Evidence Quality workflow now includes the new production/test/docs/CHANGELOG paths and both owner scripts under 100% branch coverage + 100% docstring coverage.The exact-head generation is live, not GREEN: Scientific Validation Evidence Quality
35549889282has verifier-quality job106182546653queued on exact18123738...with no assigned runner/steps; CodeQL35549889177, Security35549889262, Semgrep35549889271, and Python Security35549889260are also non-terminal. Keep this issue open until exact-head hosted settlement and qualifying review; no predecessor receipt transfers.