Repository navigation
fix(OMN-16112): bump mcp >=1.28.1 — CVE-2026-59950 - #2085
Conversation
mcp 1.28.0 (transitive via omnibase-infra, omninode-memory) is vulnerable to CVE-2026-59950 / SFTY-20260716-50488 (Improper Input Validation, missing Host header validation), affected spec <1.28.1. Pre-existing on dev, not introduced by any in-flight PR — confirmed by reproducing the identical `safety check` finding directly against dev's own uv.lock/pyproject.toml. Surfaced by omnimarket#2084's security-scan.yml pull_request trigger (OMN-16001), which is the first time PR content was ever scanned; out of scope for that PR by its own stated boundary (CI-gate-enforcement only). `uv lock --upgrade-package mcp` resolves to 1.29.0 with a single-package diff (no cascade). Both mcp-consuming packages (omnibase_infra, omnimemory) import cleanly at the new pin. Evidence-Ticket: OMN-16112
|
Important Review skippedReview was skipped due to path filters ⛔ Files ignored due to path filters (1)
CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
✅ Architectural Review — PASSEDErrors: 0 What this checks
No architectural violations found. Static architectural lint — no model inference (OMN-14176). |
|
OCC autobind did not mint a companion for this PR: no changed-file candidate could be proven RED against the merge base, and emitting a PR-existence probe instead would be non-falsifiable evidence (OMN-15247). Hand-authored evidence is required. |
✅ Hostile Reviewer — PASSEDBlocking findings (critical/error): 0 Gate semantics
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524) |
…6589) * evidence(OMN-16112): author OCC companion for OmniNode-ai/omnimarket#2085 The autobind writer never minted a companion for this product PR (verified live: no OCC PR, no branch, no contract entry references it) — its diff is a single-package uv.lock bump (mcp 1.28.0 -> 1.29.0, CVE-2026-59950) with no RED-derivable source file, which is outside autobind's current derivation surface. That gap is tracked separately as OMN-16118. Authored by hand on the occ#6573/OMN-10221 manual-companion precedent per controller authorization. Adds a net-new contract + two dod_evidence entries and their receipts, mirroring the #6573 template field-for-field: dod-OmniNode-ai-omnimarket-pr-2085 gh pr view 2085 --json number,state dod-OmniNode-ai-omnimarket-pr-2085-ci gh pr view 2085 --json files Both probes were executed live against omnimarket#2085's real head (2b4fac8076f5667c1ac44a3e87cdcac0c2efd51f); probe_stdout is the byte-exact capture, emitted as a literal block scalar so the yamlfmt v0.21.0 folded-scalar rewrite (OMN-15479) cannot touch it. Receipts carry both contract_sha256 (whole-file) and contract_entry_sha256 (per-entry, OMN-13888) computed via the canonical validator_receipt_gate hashers after a first yamlfmt pass stabilized the contract bytes. runner/verifier are this lane's own handles rather than the writer's (node_pr_lifecycle_fix_effect / occ-evidence-source-autobind) — this companion was not machine-minted and must not claim to have been. Local `validator_occ_merge_eligibility` run against omnimarket#2085's live title/branch/commit-sha with this commit's on-disk contract+receipts as the evidence source returns eligible:true. STILL REQUIRED before this can pass occ-preflight on its own PR: the occ-self-bind-pr-<N> entry + receipt, which cannot exist until the PR number does — same two-commit shape as the merged #6573/#903 companions. Evidence-Ticket: OMN-16112 * evidence(OMN-16112): occ-self-bind-pr-6589 Appends the mandatory self-bind evidence item for OCC companion PR #6589, per the merged #903/#6492/#6573 pattern (OMN-14650). This item cannot exist before the PR number does, so it lands as a second commit after opening #6589. Uses contract_entry_sha256 (per-entry, OMN-13888) rather than the legacy whole-file scheme #6573 used: appending this entry left the two existing receipts' own per-entry hashes byte-identical (verified via the canonical validator_receipt_gate hashers), so neither needed re-stamping. Only the whole-file contract_sha256 changed (file grew); both existing receipts carry contract_entry_sha256, which the gate treats as authoritative over contract_sha256, so they remain valid unmodified. Local verification, all green: - validator_occ_append_only --ticket-id OMN-16112 (in-repo, base = merge-base with origin/dev) -> ok:true. - validator_occ_merge_eligibility run twice: once as onex_change_control's own in-tree PR (#6589, its own title/branch/commit) -> eligible:true, and once simulating omnimarket#2085's real body with a live 'Evidence-Source: OCC#6589' line appended -> eligible:true. - check-receipt-honesty, check-contract-substance-floor, check-contract-shape-v1, check-dod-authoring-hygiene, check-receipt-hardening all Passed locally. Evidence-Ticket: OMN-16112 * fix(OMN-16112): replace PR-existence probes with admissible content reads OCC#6589's own Contract Compliance Check BLOCKed: both PR-scoped dod_evidence items used bare `gh pr view <n> --json ...`, which the OMN-15309 evidence-admissibility predicate treats as the paradigm "PR-existence probe" anti-pattern -- not falsifiable, proves only that a PR object exists. Bare `gh` is not in the admissible-command vocabulary (only the compound `gh api` token is), and the module's own comment names `gh pr view/list/status` as "trivially true via almost every ticket's own generated self-bind check" -- exactly the shape both merged precedents this companion was modeled on (occ#6573, occ#6583) also used. Neither precedent's Contract Compliance Check ever actually ran on its head (confirmed live: absent entirely from both PRs' check-runs, ~100 runs each) -- apparently because the job needs the ci:ready label to fire for real, which this companion has and the autobind-minted/earlier precedents evidently didn't at authoring time. So this is the first time this exact companion shape has been checked for real, and it fails honestly. Replaced two of the three items with genuinely admissible probes (EXECUTED, FALSIFIABLE, OUTSIDE ITS OWN DIFF per the predicate): dod-OmniNode-ai-omnimarket-pr-2085: reads uv.lock content at #2085's pinned head ref via `gh api .../contents/uv.lock?ref=<sha>` and asserts mcp==1.29.0 -- proves the CVE-2026-59950 fix actually landed in the file, not just that a PR exists. RED-verified against the vulnerable 1.28.0 string. dod-OmniNode-ai-omnimarket-pr-2085-ci: reads the actual diff via `gh api .../pulls/2085/files` (admitted per the module's own BLOCK-message guidance -- "/pulls/<n>/files ... returns the actual diff") and asserts the file list is exactly ["uv.lock"]. RED-verified against a fabricated two-file list. occ-self-bind-pr-6589 is left unchanged and stays individually INADMISSIBLE (WARN, not BLOCK) -- self-bind is structurally incapable of being "outside its own diff" (the predicate's own module comment acknowledges this class exists), and `_has_effective_check` only requires ONE admissible item across the contract, not all three, to avoid the hard BLOCK. Locally verified via `onex_change_control.validation.evidence_admissibility.classify_evidence` directly: both new items -> ADMISSIBLE; self-bind -> still NOT_EXECUTED as expected. contract_entry_sha256 recomputed for the two changed items via the canonical validator_receipt_gate hashers; occ-self-bind-pr-6589's own per-entry hash is byte-identical (unaffected, confirming the append-immunity property). validator_occ_append_only re-run against the origin/dev merge-base: ok:true (this ticket still diffs as pure 'A' -- the whole OMN-16112 corpus is net-new to dev). Local validator_occ_merge_eligibility re-run for omnimarket#2085's real Evidence-Source binding: eligible:true, unchanged. Evidence-Ticket: OMN-16112
Summary
Bumps
mcpfrom1.28.0to1.29.0(satisfies>=1.28.1), fixing CVE-2026-59950 /SFTY-20260716-50488— Improper Input Validation due to missingHost/related header validation in the MCP Python SDK (affected spec:<1.28.1).mcpis a transitive dependency (pulled in viaomnibase-infraandomninode-memory, both git-pinned) — omnimarket does not declare it directly.uv lock --upgrade-package mcpresolves cleanly to1.29.0with a single-package diff (no cascade to any other pin).Provenance
Surfaced by #2084's (OMN-16001)
security-scan.ymlpull_requesttrigger — the first time PR content was ever scanned by this job (previously schedule/push-only). Confirmed pre-existing ondev, not introduced by any in-flight PR:devtip's ownuv.lockpins the same vulnerablemcp==1.28.0, and running the identicalsafety checkcommand CI runs againstdev's own lockfile reproduces the identical finding. Out of scope for #2084 by its own stated boundary (CI-gate-enforcement only) — this is the recommended standalone follow-up.Verification
uv lock --upgrade-package mcp→uv.lockdiff is exactly themcppackage block (version, sdist URL/hash, wheel URL/hash) — no other package touched.uv sync→ clean install,mcp==1.28.0 -> mcp==1.29.0.import omnibase_infra,import omnimemory(theomninode-memorypackage's actual import name).pre-commit run --files uv.lock→ all applicable hooks green (Dependency health gate, Validator Requirements Fleet Gate, Pre-commit fail-loud meta-gate, etc.).Ticket
OMN-16112
dod_evidence: single-package uv.lock diff, clean uv sync, clean downstream imports, pre-commit all-green, full governed pre-push suite green.
Evidence-Ticket: OMN-16112
Evidence-Source: OCC#6589