Skip to content

fix(deps): floor anyio at >=4.14.2 for CVE-2026-63374 / CVE-2026-64847 - #271

Merged
nicknacnic merged 1 commit into
dns-aid:mainfrom
IngmarVG-IB:fix/anyio-cve-floor
Sep 20, 2026
Merged

nicknacnic merged 1 commit into
dns-aid:mainfrom
IngmarVG-IB:fix/anyio-cve-floor

Conversation

@IngmarVG-IB

@IngmarVG-IB IngmarVG-IB commented Sep 20, 2026 •

Copy link
Copy Markdown
Collaborator

Why

anyio 4.12.1 in uv.lock is affected by CVE-2026-63374 and CVE-2026-64847, both fixed in 4.14.2.

Dependency Audit is a required status check under the main-protection ruleset, and that ruleset has strict_required_status_checks_policy: true — so branches must be up to date with main to merge. The net effect today: the audit fails on main's own lock, so every open PR fails a required check as soon as it syncs. #266 already shows this (approved, up to date, audit red). The other open PRs only show Dependency Audit = SUCCESS because they are BEHIND and last ran against an older main.

This PR fixes it at the root so the unblock doesn't depend on reviewing any larger change.

What

  • Add anyio>=4.14.2 to the core dependencies, with the CVE reference, following the existing floor-comment convention (pyjwt, python-multipart, urllib3, pygments).
  • Re-resolve the lock with uv lock --upgrade-package anyio → anyio 4.15.1.

Why core dependencies and not the mcp extra

httpx is a core dependency and pulls anyio (uv.lock also shows mcp, starlette and sse-starlette depending on it). A plain pip install dns-aid is therefore in the affected tree. Putting the floor behind [mcp] would leave the base install resolvable to a vulnerable anyio.

Incidental, both intended

  • typing-extensions 4.15.0 → 4.16.0 — anyio 4.15.1 widens that marker to python_full_version < '3.15'.
  • uv.lock's requires-dist recorded mcp>=1.28.1,<2.0.0 while pyproject.toml already declared <3.0.0. That pre-existing lock/manifest drift self-corrects on re-resolve. No ceiling was changed by hand.

Verification

Ran the exact invocation from .github/workflows/security.yml, same five documented --ignore-vuln suppressions:

$ uv run --with pip-audit pip-audit --ignore-vuln CVE-2025-8869 ... --ignore-vuln CVE-2026-3219
No known vulnerabilities found

Full unit suite, compared in clean /tmp worktrees to isolate local config:

result
main 6 failed, 2837 passed, 49 skipped
this branch 6 failed, 2837 passed, 49 skipped

Identical — no regressions. The 6 pre-existing failures are all Akamai/.edgerc tests that pick up a real ~/.edgerc on my machine; they pass on CI runners, which have none.

Also green locally: ruff check (clean), mypy src/dns_aid (87 files, no issues). ruff format --check flags 3 files under examples/, unchanged here and identically flagged on main.

Suggested merge order

Landing this first turns Dependency Audit green repo-wide, after which the remaining PRs only need a sync + review: #266 (already approved) → #262 → #265 → #269 → #270.

Note #268 also carries an anyio>=4.14.2 floor, but scoped to the [mcp] extra. If this lands first, that hunk can drop from #268 and it stays focused on the bearer-auth normalization; if #268 lands first, the base-install path is still uncovered and this floor should move to core.

anyio 4.12.1 is affected by CVE-2026-63374 and CVE-2026-64847, both fixed
in 4.14.2. Dependency Audit is a required status check, so the vulnerable
pin in uv.lock currently fails that check on every PR once it syncs with
main -- the failure is main's, not the PR's.

The floor goes on the core `dependencies` rather than the `mcp` extra:
httpx is a core dependency and pulls anyio, so a base `pip install dns-aid`
is in the affected tree too. Placing it behind an extra would leave that
path resolvable to a vulnerable version.

Lock re-resolved with `uv lock --upgrade-package anyio`, which also picks
up typing-extensions 4.15.0 -> 4.16.0 (anyio's marker now spans <3.15) and
corrects pre-existing drift where uv.lock's requires-dist still recorded
`mcp>=1.28.1,<2.0.0` while pyproject.toml already declared `<3.0.0`.

Verified locally with the exact CI invocation from security.yml:
"No known vulnerabilities found".

Signed-off-by: Ingmar <ivanglabbeek@infoblox.com>
@nicknacnic
nicknacnic requested review from nicknacnic and removed request for iracic82 September 20, 2026 21:27

@nicknacnic nicknacnic left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean fix. All CI green, dep-audit flips from red to green repo-wide. Floor belongs in core deps (not the mcp extra) for the reason stated — httpx pulls anyio into the base install. Lock re-resolve looks correct; incidental typing-extensions bump and mcp ceiling drift are expected and benign. Good suggested merge order in the description. Approving.

@nicknacnic
nicknacnic merged commit a4eb912 into dns-aid:main Sep 20, 2026
20 checks passed
IngmarVG-IB added a commit to nicknacnic/dns-aid-core that referenced this pull request Sep 20, 2026
Resolves the uv.lock conflict introduced by dns-aid#271, which floored anyio at
>=4.14.2 on the core `dependencies` for the same two CVEs this branch was
addressing via the `[mcp]` extra.

Resolution: took main's lock and re-resolved with `uv lock` against the
auto-merged pyproject.toml. Both floors now coexist -- the only lock delta
against main is anyio appearing as an explicit member of the `mcp` and
`all` extras, which is what the extra-scoped floor on this branch implies.
No version changed; this branch's lock delta (anyio 4.12.1 -> 4.15.1,
typing-extensions 4.15.0 -> 4.16.0) was already identical to what dns-aid#271
landed, so nothing was dropped.

The `anyio>=4.14.2` entry in the `[mcp]` extra is now redundant with
main's core floor and can be dropped if preferred; left in place rather
than editing the author's intent.

Verified: pip-audit (CI invocation) clean, ruff clean, mypy clean,
tests/unit 2838 passed / 6 pre-existing local .edgerc failures.

Signed-off-by: Ingmar <ivanglabbeek@infoblox.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants