Skip to content

fix(deps): pin patched Starlette for CVE-2026-48710 - #35068

Closed
EvolvingSoftwareAgent wants to merge 1 commit into
NousResearch:mainfrom
EvolvingSoftwareAgent:fix/badhost-starlette-pin
Closed

EvolvingSoftwareAgent wants to merge 1 commit into
NousResearch:mainfrom
EvolvingSoftwareAgent:fix/badhost-starlette-pin

Conversation

@EvolvingSoftwareAgent

Copy link
Copy Markdown

Summary

  • Pin Starlette 1.2.0 directly in the web, mcp, computer-use, and dev extras.
  • Regenerate uv.lock so locked installs resolve Starlette 1.2.0 instead of the vulnerable pre-1.0.1 line.
  • Keeps Hermes' exact-pin policy while preventing FastAPI/MCP transitive installs from resolving a vulnerable Starlette for CVE-2026-48710 / BadHost.

Security context

Starlette versions before 1.0.1 are affected by CVE-2026-48710 ("BadHost"), where crafted Host headers can poison reconstructed URL paths used by path-based authorization checks. Hermes already has Host-header and defense-in-depth work in the dashboard path, but installs should also avoid vulnerable Starlette versions at dependency resolution time.

References:

Closes #35067

Test plan

  • uv lock --check
  • Python dependency assertions for starlette==1.2.0 in dev, mcp, computer-use, and web extras
  • scripts/run_tests.sh tests/hermes_cli/test_web_server_host_header.py

Pin Starlette 1.2.0 for extras that expose FastAPI/MCP surfaces so installs do not resolve a vulnerable pre-1.0.1 Starlette for CVE-2026-48710 (BadHost). Regenerate uv.lock.
@EvolvingSoftwareAgent
EvolvingSoftwareAgent requested a review from a team May 30, 2026 01:15
@alt-glitch alt-glitch added type/security Security vulnerability or hardening P1 High — major feature broken, no workaround comp/gateway Gateway runner, session dispatch, delivery area/config Config system, migrations, profiles labels May 30, 2026
@teknium1

Copy link
Copy Markdown
Collaborator

Superseded by #35118 (merged as 0437137), which closes the same CVE-2026-48710 (BadHost) — thanks for catching this and filing both the issue (#35067) and a fix so fast, @EvolvingSoftwareAgent.

We landed #35118 as the canonical fix because it carries the same Starlette pin across all four server-surface extras (web/mcp/computer-use/dev) plus two things this PR didn't: it mirrors the pin into tools/lazy_deps.py tool.dashboard (otherwise an on-demand hermes dashboard install would re-resolve Starlette unpinned), and it adds two CVE-floor regression guards in tests/test_packaging_metadata.py so a future dropped pin or stale lock fails in CI.

On the version: we pinned ==1.0.1 rather than 1.2.0. 1.0.1 is the advisory's named fix floor and the oldest patched release (~8 days of bake time vs ~1 day for 1.2.0) — our supply-chain policy prefers the most-baked patched release over the newest, since the newest is exactly the window a fresh malicious upload would land in. Both fully close the auth-bypass; the difference is bake time, not coverage.

Closing as superseded — the substance of your fix shipped.

@teknium1 teknium1 closed this May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/config Config system, migrations, profiles comp/gateway Gateway runner, session dispatch, delivery P1 High — major feature broken, no workaround type/security Security vulnerability or hardening

Projects

None yet

Development

Successfully merging this pull request may close these issues.

security: pin patched Starlette for CVE-2026-48710 BadHost

3 participants