Repository navigation
fix(deps): floor anyio at >=4.14.2 for CVE-2026-63374 / CVE-2026-64847 - #271
Merged
Merged
Conversation
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
requested review from
nicknacnic
and removed request for
iracic82
September 20, 2026 21:27
nicknacnic
approved these changes
Sep 20, 2026
nicknacnic
left a comment
Collaborator
There was a problem hiding this comment.
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.
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>
This was referenced Sep 20, 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.
Why
anyio 4.12.1inuv.lockis affected by CVE-2026-63374 and CVE-2026-64847, both fixed in 4.14.2.Dependency Auditis a required status check under themain-protectionruleset, and that ruleset hasstrict_required_status_checks_policy: true— so branches must be up to date withmainto merge. The net effect today: the audit fails onmain'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 showDependency Audit = SUCCESSbecause they areBEHINDand last ran against an oldermain.This PR fixes it at the root so the unblock doesn't depend on reviewing any larger change.
What
anyio>=4.14.2to the coredependencies, with the CVE reference, following the existing floor-comment convention (pyjwt,python-multipart,urllib3,pygments).uv lock --upgrade-package anyio→anyio 4.15.1.Why core
dependenciesand not themcpextrahttpxis a core dependency and pullsanyio(uv.lockalso showsmcp,starletteandsse-starlettedepending on it). A plainpip install dns-aidis therefore in the affected tree. Putting the floor behind[mcp]would leave the base install resolvable to a vulnerableanyio.Incidental, both intended
typing-extensions 4.15.0 → 4.16.0—anyio 4.15.1widens that marker topython_full_version < '3.15'.uv.lock'srequires-distrecordedmcp>=1.28.1,<2.0.0whilepyproject.tomlalready 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-vulnsuppressions:Full unit suite, compared in clean
/tmpworktrees to isolate local config:mainIdentical — no regressions. The 6 pre-existing failures are all Akamai/
.edgerctests that pick up a real~/.edgercon 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 --checkflags 3 files underexamples/, unchanged here and identically flagged onmain.Suggested merge order
Landing this first turns
Dependency Auditgreen 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.2floor, 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.