Skip to content

fix(deps): upgrade anyio to 4.15.1 and add a >=4.14.2 floor (VULN-120002) - #281

Open
etserend wants to merge 3 commits into
mainfrom
fix/vuln-120002-anyio
Open

etserend wants to merge 3 commits into
mainfrom
fix/vuln-120002-anyio

Conversation

@etserend

@etserend etserend commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes CVE-2026-63374 in anyio (fixed in 4.14.2): upgrades the locked version from 4.10.0 to 4.15.1 and adds a direct anyio >=4.14.2 floor so installs of the published package also get the fix.

Before 4.14.2, connect_tcp() and TLSStream.wrap() can validate internationalized host names after they were converted with IDNA 2003 instead of IDNA 2008. If a connection to a non-ASCII domain is hijacked or redirected, an attacker can obtain a legitimate certificate for the different ASCII hostname that IDNA 2003 produces, and the client accepts it.

splunk-ao does not call these functions directly, but httpx's async path reaches both through its anyio backend (httpcore/_backends/anyio.py).

Changes

  • pyproject.toml: add anyio = ">=4.14.2" under [tool.poetry.dependencies], as a security-floor-only entry with the same comment style as the existing cryptography floor. The published wheel will list Requires-Dist: anyio (>=4.14.2), the same way the existing pyjwt, idna and requests floors appear today.
  • poetry.lock: anyio 4.10.0 -> 4.15.1, and the content-hash for the pyproject.toml change.
  • typing-extensions 4.14.1 -> 4.16.0 in the lock. anyio 4.15.1 itself requires typing_extensions >=4.16.0, and typing-extensions is a direct dependency of splunk-ao (>=4.5.0), so the new version is within its existing constraint. This is a forced side effect of the anyio upgrade, not a separate change.

Test plan

  • poetry check --lock: passes
  • tests/test_deployment.py: 32 passed
  • Full unit suite with anyio 4.15.1: 24 failed, 6 errors, 2211 passed. The same suite with anyio 4.14.2 gives the identical set of failing test IDs, so the change adds and fixes none of them. These failures are present on main today.
  • invoke type-check: no issues in 118 source files
  • CI

Not verified: a built wheel from this branch (the Requires-Dist claim above is based on how the released 0.5.0 wheel treats the other floors in the same block). ruff check src tests reports existing findings in files this PR does not touch.

Example apps

Example manifests that pinned vulnerable anyio versions are updated in the same PR:

  • examples/agent/startup-simulator-3000/requirements.txt (4.9.0), examples/rag/elastic-chatbot-rag-app/requirements.txt (4.9.0) and examples/logging-samples/openai-responses/requirements.txt (4.12.1) now pin anyio==4.14.2. This is the fixed release that still works with the older typing-extensions pins in those files (4.15.1 would require typing-extensions>=4.16.0).
  • examples/agent/langgraph-fsi-agent/before/poetry.lock: anyio 4.9.0 -> 4.15.1 and the forced typing-extensions 4.14.1 -> 4.16.0, generated with poetry update anyio --lock (content-hash unchanged).

Checked with pip install --dry-run before and after: startup-simulator-3000 resolves both times. elastic-chatbot-rag-app (no halo==0.0.31 on PyPI) and openai-responses (galileo-core==3.84.0 conflicts with splunk-ao) fail identically before and after, so those failures are not caused by this change and are left alone.

🤖 Generated with Claude Code

etserend and others added 2 commits October 20, 2026 18:58
anyio before 4.14.2 can validate internationalized host names after they were
converted with IDNA 2003 instead of IDNA 2008 in connect_tcp() and
TLSStream.wrap() (CVE-2026-63374). httpx reaches both through its anyio backend.

Update the lockfile only: anyio 4.10.0 -> 4.15.1. Poetry also refreshes the
updated package's own dependency, typing-extensions 4.14.1 -> 4.16.0.

Co-Authored-By: Claude Code <noreply@anthropic.com>
The lockfile bump only fixes this repository's resolved environment. Add a
direct floor so installs of the published splunk-ao wheel also require
anyio >= 4.14.2 (CVE-2026-63374), matching the existing security-floor entries
for cryptography, pyjwt, idna and requests.

poetry.lock only changes its content-hash; resolved versions are unchanged.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@etserend etserend changed the title fix(deps): upgrade anyio to 4.15.1 (VULN-120002) fix(deps): upgrade anyio to 4.15.1 and add a >=4.14.2 floor (VULN-120002) Oct 21, 2026
@etserend
etserend marked this pull request as ready for review October 21, 2026 00:44

@etserend etserend left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 This review was generated by the Astra agent (claude-opus-5-5). It may contain mistakes.

Verdict: approve — The lock upgrade and the direct floor fix CVE-2026-63374 for the root package, and I found no conflicting constraints or broken dependencies.

Follow-ups

Suggested follow-up work that could be tracked as Jira tickets:

  • examples/agent/startup-simulator-3000/requirements.txt:2-2: Three example apps still pin vulnerable anyio versions:
  • examples/agent/startup-simulator-3000/requirements.txt:2 pins anyio==4.9.0.
  • examples/rag/elastic-chatbot-rag-app/requirements.txt:15 pins anyio==4.9.0.
  • examples/logging-samples/openai-responses/requirements.txt:5 pins anyio==4.12.1.
    All three are below the 4.14.2 fix. FOSSA can raise new tickets for them. Users who copy these examples also get the vulnerable version. Bump the pins to >=4.14.2 in a separate change.

Bump anyio in the example requirements files to 4.14.2 (4.15.1 would force
typing-extensions>=4.16.0, which conflicts with their existing pins) and
refresh the langgraph-fsi-agent "before" poetry.lock (anyio 4.15.1,
typing-extensions 4.16.0).

Co-Authored-By: Claude Code <noreply@anthropic.com>

@etserend etserend left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

🤖 This review was generated by the Astra agent (claude-opus-5-5). It may contain mistakes.

Verdict: approve — The lock upgrade, the direct anyio floor and the example pins all move anyio past 4.14.2, and I found no conflicting constraints.

This branch has not been deployed

No deployments
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.

1 participant