feat: WIP-106 tokens generation & circuits - #852
Conversation
| run: | ||
| working-directory: ./crates/proof/noir/authenticator-attestation | ||
| steps: | ||
| - uses: actions/checkout@v6 |
There was a problem hiding this comment.
Semgrep identified an issue in your code:
The actions/checkout@v6 step uses a mutable version tag that can be silently repointed by attackers, enabling supply-chain attacks where malicious code runs in your CI/CD pipeline.
More details about this
The uses: actions/checkout@v6 step uses a mutable version tag instead of a pinned commit SHA. The v6 tag is a floating reference that the action maintainers can update at any time without warning. If an attacker compromises the actions/checkout repository or GitHub's infrastructure, they could repoint the v6 tag to a malicious version that runs arbitrary code in your workflow.
Here's a realistic attack scenario:
- Attacker gains access to the
actions/checkoutrepository on GitHub (e.g., through a compromised maintainer account). - Attacker updates the
v6tag to point to a new commit containing malicious code that exfiltrates secrets or modifies your build output. - Your workflow runs and pulls the tag
@v6without knowing it now resolves to the attacker's malicious commit. - The attacker's code executes with full access to your repository secrets, environment variables, and ability to push commits.
Notice that the noir-lang/noirup action in the same file is already pinned to a full commit SHA (7dbe69ccc78877f0200ffa5a40836c953d2cfd8f), so actions/checkout should follow the same pattern.
To resolve this comment:
✨ Commit fix suggestion
- Replace each mutable GitHub Action tag with a full 40-character commit SHA in the
uses:field. - Update
actions/checkout@v6to a pinned commit SHA for theactions/checkoutrelease you want to keep. For example, change it touses: actions/checkout@<40-character-commit-sha> # v6. - Apply the same change to every occurrence in this workflow, including both
ownership-proofandauthenticator-attestation, so noactions/checkout@v6reference remains. - Keep the version comment after the SHA, such as
# v6, so it is clear which release the pinned commit corresponds to. Pinning to a commit SHA prevents the action owner from silently moving the referenced version tag to different code.
💬 Ignore this finding
Reply with Semgrep commands to ignore this finding.
/fp <comment>for false positive/ar <comment>for acceptable risk/other <comment>for all other reasons
Alternatively, triage in Semgrep AppSec Platform to ignore the finding created by github-actions-mutable-action-tag.
You can view more details about this finding in the Semgrep AppSec Platform.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit cf5aaad. Configure here.

Note
Medium Risk
New cryptographic token formats and in-circuit signature/CBOR verification are security-sensitive, though largely additive/WIP with extensive KAT coverage and no change to embedded ownership-proof artifacts yet.
Overview
Adds WIP-106 authenticator attestation end-to-end: Rust helpers to mint Trust Anchor Key Tokens (BabyJubJub EdDSA over a Poseidon2 claim digest) and Authenticator Assertion Tokens (ES256 over COSE
Sig_structure, with the TAKT embedded undersubmods.takt), plus a new Noirauthenticator-assertionlibrary that checks the same chain in-circuit (verify_takt,verify_aat).The Noir side rebuilds deterministic CBOR at fixed offsets (TAKT reserialization, AAT
Sig_structure), enforces expiry and claim encoding constraints, and uses pure Noir P-256 ECDSA (not stdlib black boxes) with an explicitr != 0guard. Known-answer tests in Rust and Noir pin digests, serialization, and signatures.CI splits Noir into separate jobs for
ownership-proofandauthenticator-assertion. Workspace deps addcosetandp256onworld-id-proof; the module is exported asauthenticator_attestation(marked WIP in docs).Reviewed by Cursor Bugbot for commit e3ceb19. Bugbot is set up for automated code reviews on this repo. Configure here.