chore: bump to 0.4.0 and make the CI security audit actually run - #470
Merged
Conversation
#469 added gateway.attestation_evidence so the verifier has something to check the TPM quote against. GatewayAddenda is extra="forbid", so any verifier built before that field rejects the claim as CLAIM_MALFORMED, and verify_trace_claim never reads cmcp_version so there is no negotiation path. That is a wire-format change older readers reject, so it is a minor bump, not a patch. Claims carrying no evidence serialize byte-identically to 0.3.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pip-audit with no arguments audits the whole environment, including the editable install of cmcp-runtime itself, and fails with "Dependency not found on PyPI and could not be audited" whenever the local version is not published. That makes every version-bump PR unmergeable: the bump to 0.4.0 in this PR failed all six test jobs on it. --skip-editable drops the local package and keeps auditing every real dependency. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3 tasks
Unmasked by the pip-audit fix in the previous commit. 48.0.1 carries three advisories, two of which land on exactly what this package does with attacker-supplied certificates: CVE-2026-69249 duplicate self-signed intermediates cause exponential path building, and a claim's cert_chain is untrusted input to verify_ak_ek_chain CVE-2026-69248 the X.509 verifier accepts wildcard DNS names and escapes permittedSubtrees name constraints Both fixed in 49.0.0, which is reachable under the upstream <50 caps. The third, CVE-2026-69247, is a Bleichenbacher oracle in PKCS#7 EnvelopedData decryption and needs 50.0.0. We never decrypt PKCS#7: the only use is load_*_pkcs7_certificates in tee/tpm.py parsing a bundle from an AIA URL, so the oracle is unreachable. 50.0.0 is also blocked by agent-governance-toolkit-core (<50.0) and agent-manifest (<50). Ignored in CI with that reasoning recorded, tracked in #471. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Raising the floor to 49.0 makes the dependency set unresolvable, so the previous commit traded a reported vulnerability for a failed install. The real shape of the problem, now recorded in #471: agt-core 4.0.0 / 4.1.0 cryptography<49.0 <- caps us at 48.x agt-core 5.0.0 cryptography<50.0 <- would allow 49 agentrust-trace<0.3.0 <- but we need >=0.5 The only agt-core release that permits a non-vulnerable cryptography is incompatible with the agentrust-trace this package requires. So the two reachable advisories cannot be fixed from this repository at all, and pretending otherwise with an unsatisfiable pin helps nobody. Also drops the CVE-2026-69247 ignore. Suppressing findings while the reachable ones stay unfixed is a risk-acceptance call that belongs to the project lead, not to a dependency-bump PR. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CVE-2026-69247 is a Bleichenbacher oracle in PKCS#7 EnvelopedData decryption. Nothing here decrypts PKCS#7: the only use is load_*_pkcs7_certificates in tee/tpm.py, parsing a bundle fetched from an AIA URL. Suppressing it keeps the audit output about real exposure. CVE-2026-69249 and CVE-2026-69248 stay unsuppressed on purpose. Both are reachable through the untrusted cert_chain a claim carries into verify_ak_ek_chain and verify_vcek_chain, so this step stays red until cryptography>=49.0 becomes installable. #471 tracks the agt-core pin that blocks it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…muted pip-audit stays red on CVE-2026-69249 and CVE-2026-69248 because agt-core 4.1.0 declares cryptography<49.0 and a plain resolve lands on 48.0.1. Both advisories are reachable through the untrusted cert_chain a claim carries into verify_ak_ek_chain / verify_vcek_chain, so suppressing them was rejected: a security product should not silence findings that reach real code paths to get a green tick. Instead the CI job installs cryptography 49 over the declared cap. That is safe rather than reckless: #471 records a clean-venv run of agt-core 4.1.0 against cryptography 49.0.0 with the full suite passing (1041) and CedarBackend evaluating unchanged, so the cap is stale metadata rather than a real incompatibility. pip's conflict warning is expected. HONEST LIMIT, stated in the workflow itself: this fixes what CI tests, not what users get. Until agt-core 4.1.1 ships the cap lift (microsoft/agent-governance-toolkit#3614), `pip install cmcp` still resolves cryptography 48.x. The step carries removal instructions for when 4.1.1 lands, and the audit goes red again if it is removed early. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
imran-siddique
added a commit
that referenced
this pull request
Aug 5, 2026
imran-siddique
added a commit
that referenced
this pull request
Aug 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #469, which is the decision that PR correctly left open. What started as a version bump turned up two more problems, and the third one needs your call before this can merge.
1. Version bump to 0.4.0
#469 put signed platform evidence in
gateway.attestation_evidenceso the verifier has something to check the TPM quote against.GatewayAddendaisextra="forbid", so a verifier built before that field rejects the claim asCLAIM_MALFORMED, andverify_trace_claimnever readscmcp_version, so there is no negotiation path.trace.runtimeis still read as a fallbackCLAIM_MALFORMEDongateway.attestation_evidenceA wire-format addition older readers reject, so minor rather than patch. Claims with no evidence serialize byte-identically to 0.3.0.
cmcp_verify.__version__is untouched, since it ships inside thecmcp-runtimedistribution.2. No version-bump PR could ever have passed CI
All six test jobs failed on the security scan with:
pip-auditwith no arguments audits the whole environment including this package's own editable install, and fails whenever the local version is not yet published.--skip-editabledrops it and keeps auditing every real dependency.3. That fix made the audit run for the first time, and it fails
This repository has been carrying a vulnerable
cryptographypin behind an audit that never got far enough to report it.permittedSubtreesThe first two are reachable in the way that matters most here: a TRACE claim carries
cert_chainas untrusted input, andverify_ak_ek_chainandverify_vcek_chainbuild paths from it.And it cannot be fixed from this repository. I tried the floor bump and reverted it, because it produces
ResolutionImpossiblerather than a secure install:Full analysis in #471, including the upstream ask: agt-core 5.0.0's
agentrust-trace<0.3.0pin looks like a packaging oversight, and lifting it is what unblocks a non-vulnerablecryptographyhere.What is in this PR now
pyproject.tomlandcmcp_runtime.__version__, plus the CHANGELOG entry for the verifier breakpip-audit --skip-editablecryptographypin recording why it cannot move yetWhy it is red, and the decision
The audit now reports honestly, so CI fails on findings that are real. Two ways forward, and it is a risk-acceptance call rather than a technical one:
--ignore-vulnall three with the reasoning in the workflow file and Fix two reachable cryptography CVEs: needs an agt-core 4.1.1 with the cap lift backported #471. CI goes green, and two reachable advisories are accepted as known-unfixed.agentrust-tracepin raised and released, then takecryptography>=49.0with nothing suppressed. CI stays red until that lands.I have deliberately not suppressed anything. Accepting a reachable vulnerability in the certificate-path code of an attestation verifier is a project-lead decision, not something a bump PR should quietly do.
🤖 Generated with Claude Code