build(deps): require aiohttp >=3.14.3 for security advisories - #254
Conversation
The dependency floor was >=3.8.5, which permitted downstream installs to resolve to aiohttp versions carrying 14 known advisories in the HTTP parsers — including a high-severity out-of-bounds heap read in the C response parser (CVE-2026-69244). Because this project ships as a library with no committed lockfile, the declared range is the only version signal downstream consumers receive. An open-ended floor also gives Dependabot's security updater nothing to patch: the range already allowed the fixed version, so no PR was ever raised and the alerts accumulated unaddressed. Raise the floor to the first version clear of all outstanding advisories and document the constraint so it isn't lowered inadvertently. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
@Olen I don't feel these points are correct:
That is not what requirements bounds for a library are intended to do - they are requisites for the functionality of the library*. It is up to consumers to choose (pin) exact requirement versions within those bounds, based on e.g. the specific impact of vulnerabilities on their application. The author of a library can't know this, and it's wrong to assume all vulnerabilities are relevant to all consumers.
A lockfile can be included in a repo for a library, for reproducible builds in dev + CI. But it doesn't affect the locking of package versions by consumers at all. So it can never be a 'version signal' to them. [*admittedly, the lower bound of the dependency is usually adjusted to the floor which has been tested, or was the current version at initial release] |
Summary
Raises the
aiohttpdependency floor from>=3.8.5to>=3.14.3, closing all 14 open Dependabot alerts on this repository.Why the alerts were stuck
Every open security alert on the repo is aiohttp — 1 high, 8 medium, 5 low. None of them ever produced a Dependabot PR, and that is a consequence of how the constraint was written rather than an oversight in configuration (the
pipecosystem is enabled in.github/dependabot.yml).Dependabot's security updater only opens a PR when the manifest forbids the patched version.
>=3.8.5already permitted 3.14.3, so there was no edit for it to make — while simultaneously telling every downstream consumer that resolving to a vulnerable aiohttp is acceptable. With no committed lockfile (poetry.lockis gitignored, correct for a library), this declared range is the only version signal consumers get.The highest-severity item is CVE-2026-69244: an out-of-bounds heap read in the C HTTP response parser when handling a malformed chunked response, exploitable by a server the client talks to. Practical exposure for this library is limited, since it speaks only to
api.spond.com— but that safety rests on trusting that endpoint and the network path to it, which is not something worth encoding as a dependency floor.Compatibility
The floor moves a long way, so it is worth being explicit about who it affects: the package already requires Python >=3.11 and CI covers 3.11–3.14, all of which aiohttp 3.14.3 supports. The constraint is a lower bound only, so consumers already on a recent aiohttp are unaffected. Consumers deliberately pinned below 3.14.3 will need to upgrade.
The floor is commented in
pyproject.toml, matching the file's existing convention of documenting non-obvious constraints, so it isn't lowered inadvertently later.Testing
Full CI sequence run locally under Poetry, against the newly resolved aiohttp 3.14.3:
poetry install→ resolves aiohttp 3.14.3poetry run ruff check→ all checks passedpoetry run ruff format --check --diff→ 13 files already formattedpoetry run pytest→ 30 passedOne note: the suite emits an
Unclosed client sessionwarning. I verified this is pre-existing test hygiene and unrelated to this change by re-running the suite against aiohttp 3.13.3, which produces the identical warning. Not addressed here.🤖 Generated with Claude Code