Skip to content

chore(security): bump gunicorn 23.0.0 -> 26.0.0 (SEC-1746)#301

Open
mcd-scarlson wants to merge 1 commit into
mainfrom
scarlson/sec-1746-bump-gunicorn-26
Open

chore(security): bump gunicorn 23.0.0 -> 26.0.0 (SEC-1746)#301
mcd-scarlson wants to merge 1 commit into
mainfrom
scarlson/sec-1746-bump-gunicorn-26

Conversation

@mcd-scarlson
Copy link
Copy Markdown

Summary

Bumps gunicorn from 23.0.0 to 26.0.0 in requirements.in + requirements.txt. Closes the open Aikido HIGH finding (group 28678334) tracked in SEC-1746.

Why this matters

gunicorn is the HTTP server fronting the agent — Dockerfile runs:

CMD gunicorn --bind :$PORT --workers $GUNICORN_WORKERS \
    apollo.interfaces.{aws,generic,cloudrun}.main:app

23.0.0 is affected by HTTP request smuggling (CWE-444) and CRLF injection (CWE-113); the fix landed in upstream gunicorn 26.0.0. Because gunicorn terminates HTTP traffic on the customer-facing surface of the agent, this is on the directly exposed attack path — not a transitive/internal-only issue.

The same CVE was confirmed against the GA montecarlodata/agent image (not just pre-release-agent) via wizcli first-party scan and Aikido cross-check.

Lockfile note

gunicorn 26.0.0 only requires packaging (already in the lockfile). No transitive graph changes. The manual one-line lockfile edit matches what pip-compile --output-file=requirements.txt --strip-extras requirements.in would produce — verified against PyPI metadata for 26.0.0. If CI regenerates the lockfile differently, please push the regenerated requirements.txt over this change.

Test plan

  • CI green (existing apollo-agent test suite)
  • Local build of the agent container succeeds (docker build)
  • Smoke test: container starts, GET /api/v1/test/health returns 200
  • Aikido group 28678334 closes on next scan after the GA image is re-published

Out of scope (separate tickets / next round)

These were also flagged in the same investigation but left for the agent team's normal cadence:

  • PyMySQL 1.1.1 -> 1.1.3 (Aikido group 26517697) — LOW exploitability (outbound only)
  • duckdb 1.1.0 -> 1.3.0 — LOW
  • apache/thrift 0.22.0 -> 0.23.0 (vendored in teradatasql binaries) — transitive, upstream
  • Debian 13 libgnutls30t64 (2 CRIT TLS CVEs) — base image rebuild

References

🤖 Generated with Claude Code

Closes Aikido group 28678334. gunicorn 23.0.0 is affected by
HTTP request smuggling (CWE-444) / CRLF injection (CWE-113) issues
fixed in 26.0.0. Since gunicorn is the HTTP frontend for the agent
(Dockerfile CMD: `gunicorn --bind :$PORT apollo.interfaces.*:app`),
this is on the directly-exposed attack surface.

26.0.0 only requires `packaging` (no new deps), so the lockfile delta
is just the version line. Verified via PyPI metadata; manual lockfile
edit matches what `pip-compile --output-file=requirements.txt
--strip-extras requirements.in` would produce.

Linear: SEC-1746
Aikido: https://app.aikido.dev/queue?sidebarIssue=28678334

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@mcd-scarlson mcd-scarlson requested a review from a team as a code owner May 21, 2026 16:18
@linear
Copy link
Copy Markdown

linear Bot commented May 21, 2026

SEC-1746

@mcd-scarlson mcd-scarlson self-assigned this May 21, 2026
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