Skip to content

security(attestation): cross-bind receipt manifest claims to exact predicate semantics #2311

Open

Description

@seonghobae

Finding

#2309 makes the unsigned completion manifest self-describing and binds it to the exact predicate bytes with predicate_sha256. The manifest also duplicates policy-relevant fields from those predicate bytes (source_repository, source_sha, workflow_run_id, predicate type, artifact metadata, evidence SHA, ordered execution-artifact identities), but validate_receipt_manifest() currently validates those manifest fields only for syntax. It does not prove that the duplicated values equal the values inside the predicate whose SHA it verifies.

An unsigned manifest can therefore be altered to another syntactically valid repository/run/artifact/execution identity while retaining the correct predicate_sha256. A future signer that consults the manifest for policy and signs the predicate bytes can observe two contradictory representations of the same receipt pair.

This is an owner-contract ambiguity. It does not authorize TEPP psychometric decisions in .github and does not make the unsigned pair authenticated provenance.

Acceptance

  • Strictly parse the exact predicate bytes before accepting the completion marker.
  • Fail closed on predicate schema/type drift relevant to the signer handoff.
  • Cross-bind every manifest field that duplicates predicate/evidence content to the exact value represented by the predicate bytes: source repository/SHA/run, predicate type, artifact digest/id/name, evidence filename/SHA, and ordered execution-artifact identities.
  • Preserve predicate_sha256 recomputation as the primary byte-identity check.
  • Keep attestation_claim = origin_and_integrity_only and the current explicit does_not_prove boundary; no RMSE/bias/construct/estimator authority in .github.
  • Add hostile RED for a syntactically valid but semantically contradictory manifest and 100% owned branch/docstring coverage.

Refs #2299 #2300 #2307 #2309 ContextualWisdomLab/TEPP#637.

Activity

  1. added
    area: ci-cdCI, GitHub Actions, checks, release, or supply chain
    area: securitySecurity boundary, hardening, or vulnerability prevention
    status: triagedOpen issue has an organization taxonomy assignment
    on Sep 20, 2026
  2. seonghobae commented on Sep 20, 2026

    @seonghobae
    ContributorAuthor

    Implemented on canonical verifier PR #2300. Source-level RED 924fcf99c0c90ca0b892177e930c2880fa92890c proves that the predecessor accepts a syntactically valid manifest whose source_repository or ordered execution identities contradict the exact predicate bytes while retaining a correct predicate_sha256. Causal repair b8b3cb1d39a7b75c470576d4f031c0188e421a97 strictly parses the committed predicate, preserves the origin_and_integrity_only / explicit does_not_prove boundary, and cross-binds duplicated repository/run/predicate/artifact/evidence/execution fields. Coverage follow-up 05f0d4f4fdc201d63281141a08e6abd9ac2f334b exercises scientific-boundary drift and non-object predicate evidence. CHANGELOG f05905f5..., doctoring a78873c6.... Hosted exact-head gates and independent review are still required; this issue remains open rather than being source-closed.

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

    area: ci-cdCI, GitHub Actions, checks, release, or supply chainarea: securitySecurity boundary, hardening, or vulnerability preventionstatus: triagedOpen issue has an organization taxonomy assignment

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions