fix: close dependency security gaps - #170
Conversation
Agent Permission Diff
Gate DecisionNo findings were produced. FindingsNo agent-facing permission findings. Permission Changes
|
|
@codex review Use light reasoning. Review exact head |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e9c7bdf567
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex review Use light reasoning. Re-review exact repaired head |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Summary
Closes MCPAudit's three live HIGH runtime dependency alerts and the actionable
mutable-action supply-chain findings. The package now excludes vulnerable MCP
Python SDK versions from both locked development installs and downstream
distribution resolution, while every external GitHub Action is bound to an
immutable reviewed commit.
Changes
mcp>=1.27.0tomcp>=1.28.1and refreshuv.lock.GHSA-hvrp-rf83-w775 with the smallest common patched SDK version.
PyPI publishing actions to immutable release commits.
reference that differs from the explicitly reviewed action, release, and
commit tuple.
mcp1.28.1 floor.[Unreleased].Checklist
uv run pytest,uv run ruff check,uv run mypy .)[Unreleased]Security implications
Before this change, the checked-in lock selected
mcp1.27.0 and the publishedrequirement allowed 1.27.x. MCPAudit imports the SDK's client and FastMCP server
surfaces, so vulnerable transport/task code could be installed even where the
default CLI path did not exercise every affected server mode.
The required invariant is now:
1.28.1; and
different action revision through a mutable tag.
The 1.28.1 upgrade preserves Python 3.11–3.13 support. Upstream deprecations in
1.28.x affect WebSocket and experimental task APIs that MCPAudit does not call.
Connector, FastMCP server, complete-suite, and installed-package verification
all pass.
Live alert disposition
commit pins, including the composite action's dependencies.
repository currently has one human contributor/collaborator, so requiring a
second-person approval would deadlock all changes. Required CI, administrator
enforcement, conversation resolution, CodeQL, and independent automated
review remain in place, but they do not substitute for human review.
maturity findings. They are not evidence of the three runtime
vulnerabilities and are outside this bounded dependency repair.
Test plan
uv lock --checkuv run pytest -q— 1,010 passeduv run pytest -q tests/test_proof_before_action.py— 124 passeduv run pytest -q tests/test_connector.py tests/test_server.py— 56 passeduv run pytest -q tests/test_supply_chain_policy.py— 2 passeduv run mypy .— cleanmcp==1.28.1selected and wheel metadata requires
mcp>=1.28.1anchored; wrong root, report tampering, malformed declaration, and image-ID
mismatch all fail closed; offline HTML remains script-free with restrictive
CSP; incomplete observation remains
unknownIndependent review repairs
The exact-head Codex review of
e9c7bdf567raised two P2 findings. Both arefixed on the current head:
action→release→commit allowlist, including shorthand
- uses:steps.The full and focused parent gates were rerun after those repairs.
An exact-head Codex re-review was requested for
16009272b4but returned ausage-limit response. That response is recorded as UNKNOWN, not approval.
Final-head fallback review evidence consists of green CodeQL, agent-permission
diff with zero findings, all ten required CI checks, resolved prior review
threads, the reviewed action-release allowlist, and the complete local
acceptance gates above.
Limitations and rollback
Proof Before Action retains its documented partial-observer and trust-authority
limitations. This PR does not publish a package or release, change output
schemas, alter detector scoring, or deploy anything.
Rollback is a normal revert of this PR, but doing so would reopen the three HIGH
dependency vulnerabilities and mutable-action risk; rollback should therefore
be paired with an alternative patched SDK constraint and immutable action pins.
Related issues
Supersedes Dependabot PR #168, whose lock-only update did not raise the published
runtime floor.