<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>aio-libs</title><link href="/" rel="alternate"/><link href="https://aio-libs.org/feeds/atom.xml" rel="self"/><id>/</id><updated>2026-08-17T00:00:00+00:00</updated><entry><title>How we handle security at aio-libs</title><link href="/news/2026/security-at-aio-libs/" rel="alternate"/><published>2026-08-17T00:00:00+00:00</published><updated>2026-08-17T00:00:00+00:00</updated><author><name/></author><id>tag:None,2026-08-17:/news/2026/security-at-aio-libs/</id><summary type="html">&lt;p&gt;&lt;a href="/projects/aiohttp/"&gt;aiohttp&lt;/a&gt; and the wider aio-libs family sit underneath a big slice of the Python ecosystem, which means our bugs become everyone else&amp;rsquo;s bugs.
Security has always been part of the job, but the last year has seen a run of dedicated work on it - two external audits, a funded …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;a href="/projects/aiohttp/"&gt;aiohttp&lt;/a&gt; and the wider aio-libs family sit underneath a big slice of the Python ecosystem, which means our bugs become everyone else&amp;rsquo;s bugs.
Security has always been part of the job, but the last year has seen a run of dedicated work on it - two external audits, a funded security program, and a lot of new processes.&lt;/p&gt;
&lt;h2 id="the-day-to-day-process"&gt;The day-to-day process&lt;/h2&gt;
&lt;p&gt;Everything starts with the reporting pipeline described in our organisation-wide &lt;a class="external" href="https://github.com/aio-libs/.github/blob/master/SECURITY.md"&gt;security policy&lt;/a&gt;.
We typically receive several reports per month and try to act on them promptly.
You can read how we handle these reports in our &lt;a class="external" href="https://docs.aiohttp.org/en/stable/contributing-admins.html#incident-response"&gt;incident response plan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We typically issue CVEs for anything that could plausibly affect users, which means we may allocate more CVEs than some similar projects.
Additionally, aiohttp is a complex project and we must consider security relating to networking, HTTP parsing, general web framework and client code.
Most similar projects only deal with one of these areas.&lt;/p&gt;
&lt;p&gt;On the supply-chain side, releases are published with PyPI trusted publishing (so there are no long-lived tokens to steal) and signed with &lt;a class="external" href="https://www.sigstore.dev/"&gt;Sigstore&lt;/a&gt;, CodeQL and Dependabot run on the repositories, and aiohttp&amp;rsquo;s parsers have been fuzzed continuously by &lt;a class="external" href="https://github.com/google/oss-fuzz/tree/master/projects/aiohttp"&gt;OSS-Fuzz&lt;/a&gt; since 2022.&lt;/p&gt;
&lt;h2 id="a-security-audit-via-nlnet"&gt;A security audit, via NLnet&lt;/h2&gt;
&lt;p&gt;In 2025, &lt;a class="external" href="https://nlnet.nl/"&gt;NLnet&lt;/a&gt; funded development work on aiohttp - &lt;a class="external" href="https://nlnet.nl/project/Aiohttp-typecheck/"&gt;improving the type annotations&lt;/a&gt; - through the NGI Zero Commons Fund, backed by the European Commission&amp;rsquo;s Next Generation Internet programme.
NGI Zero grants come with more than money though: projects also get access to &lt;a class="external" href="https://nlnet.nl/NGI0/services/"&gt;support services&lt;/a&gt;, including a professional security audit.&lt;/p&gt;
&lt;p&gt;Ours was performed by &lt;a class="external" href="https://www.radicallyopensecurity.com/"&gt;Radically Open Security&lt;/a&gt; - particular thanks to Thomas Rinsma - and its findings resulted in five CVEs: denial-of-service vectors like resource exhaustion via large payloads and an infinite loop when Python runs with assertions disabled, a brute-forceable path disclosure in static file handling, and parsing discrepancies around Unicode digits.
The fixes shipped in &lt;a class="external" href="https://github.com/aio-libs/aiohttp/releases/tag/v3.13.3"&gt;aiohttp 3.13.3&lt;/a&gt; in January, &lt;a class="external" href="https://www.openwall.com/lists/oss-security/2026/01/05/14"&gt;disclosed in a coordinated batch of eight advisories&lt;/a&gt; together with three issues from independent reporters.
Our thanks to NLnet for funding both the audit and the development time spent fixing the findings.&lt;/p&gt;
&lt;p&gt;One of those reports is worth calling out explicitly: a high-severity decompression bomb (&lt;a class="external" href="https://github.com/aio-libs/aiohttp/security/advisories/GHSA-6mq8-rvhq-8wgg"&gt;CVE-2025-69223&lt;/a&gt;), where a tiny compressed message inflates into a huge one when aiohttp decompresses it automatically.
It also wasn&amp;rsquo;t ours to fix alone - the &lt;a class="external" href="https://github.com/google/brotli"&gt;brotli&lt;/a&gt; library had no way to cap how much data a decompression call could produce - so the issue was disclosed to Google and we waited for them to provide a fix in brotli 1.2 before we could resolve it.
Due to architectural difficulties, the initial fix capped decompressed output at 32 MiB per call, which also blocked some legitimate highly-compressed payloads, so &lt;a class="external" href="https://github.com/aio-libs/aiohttp/releases/tag/v3.14.0"&gt;aiohttp 3.14.0&lt;/a&gt; followed up with an overhaul of the decompression code that processes payloads incrementally in bounded chunks, safely handling any valid payload.
The final fix also reduced the amount of data in memory from 32 MiB to 256 KiB, matching most memory assumptions in the rest of the aiohttp code.
Coordinated disclosure sometimes has to run up the dependency chain as well as down it.&lt;/p&gt;
&lt;h2 id="the-github-secure-open-source-fund"&gt;The GitHub Secure Open Source Fund&lt;/h2&gt;
&lt;p&gt;In April we joined Session 4 of the &lt;a class="external" href="https://github.com/open-source/github-secure-open-source-fund"&gt;GitHub Secure Open Source Fund&lt;/a&gt;, alongside 49 other projects (including friends from the Python ecosystem).
The program pairs $10,000 of funding through GitHub Sponsors with a three-week security sprint - threat modeling, secure coding, vulnerability management and AI security, with a curriculum from GitHub Security Lab - and check-ins over the following year.&lt;/p&gt;
&lt;p&gt;The funding is welcome, but the bigger value for us was momentum: a structured push, with security experts on hand, to clear a backlog of security process work.
While we found that we were already doing most of the recommendations covered in the program, we still found plenty of things to take our security to the next level.
So far, we have fixed up license files, written an incident response plan and a detailed threat model, plugged a gap in aiohttp&amp;rsquo;s SBOM, and ran an AI-assisted audit over all our codebases.&lt;/p&gt;
&lt;p&gt;The &lt;a class="external" href="https://docs.aiohttp.org/en/stable/threat_model.html"&gt;threat model&lt;/a&gt; is the biggest piece: a STRIDE analysis of aiohttp covering nineteen subsystems, from the HTTP/1 parser through cookies and DNS resolution to the build and release supply chain.
For each one it records what we trust, what can go wrong, and which mitigations exist or are still wanted - including the mitigations that are the responsibility of applications built on aiohttp, which are explicitly marked as such.
We&amp;rsquo;re still reviewing and publishing the remaining chapters, but expect to complete this over the next few months.
It&amp;rsquo;s a living document: our incident-response process now ends with feeding each new advisory back into it.
This is really important in the age of AI-generated security reports; this is a tool that AI agents can use to verify if their report is actually valid and in scope, reducing the number of false positives getting reported to us.&lt;/p&gt;
&lt;p&gt;The &lt;a class="external" href="https://docs.aiohttp.org/en/stable/contributing-admins.html#incident-response"&gt;incident response plan&lt;/a&gt; writes down what used to be tribal knowledge: severity tiers, the advisory-to-release runbook, the disclosure and notification procedures, and - hopefully never needed - playbooks for a compromised release pipeline, maintainer account or CI.&lt;/p&gt;
&lt;p&gt;The SBOM work fixes a blind spot: aiohttp vendors the &lt;a class="external" href="https://github.com/nodejs/llhttp"&gt;llhttp&lt;/a&gt; parser as a git submodule, which GitHub&amp;rsquo;s dependency graph can&amp;rsquo;t see.
A &lt;a class="external" href="https://github.com/aio-libs/aiohttp/blob/master/.github/workflows/dependency-submission.yml"&gt;workflow&lt;/a&gt; now registers the vendored llhttp version with the dependency graph on every push, so it appears in the exported SBOM and gets Dependabot alerts like any other dependency.&lt;/p&gt;
&lt;p&gt;And the AI-assisted audit, run with GitHub Security Lab&amp;rsquo;s &lt;a class="external" href="https://github.com/GitHubSecurityLab/seclab-taskflows"&gt;taskflow agent&lt;/a&gt;, found one more minor vulnerability in aiohttp - and, more usefully, several issues across other aio-libs projects that haven&amp;rsquo;t seen the same level of scrutiny yet.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s still more planned from the program: achieving &lt;a class="external" href="https://baseline.openssf.org/"&gt;OpenSSF Baseline&lt;/a&gt; level 3, reviewing several new tools and configuration of existing ones, bringing the OSS-Fuzz integration into our repo, and generating runtime SBOMs to ship in the wheels.&lt;/p&gt;
&lt;h2 id="patch-the-planet"&gt;Patch the Planet&lt;/h2&gt;
&lt;p&gt;In June, aiohttp was one of the first projects taken through &lt;a class="external" href="https://openai.com/index/patch-the-planet/"&gt;Patch the Planet&lt;/a&gt;, an OpenAI initiative built with &lt;a class="external" href="https://blog.trailofbits.com/2026/06/22/introducing-patch-the-planet/"&gt;Trail of Bits&lt;/a&gt; that points AI-assisted vulnerability research - validated by human security engineers - at critical open source projects, at no cost to the maintainers.&lt;/p&gt;
&lt;p&gt;Trail of Bits privately reported a cluster of 10 issues (resulting in 8 CVEs) across our client and server code, including cookies that could regain a broader scope after a save and reload, digest credentials that would answer a challenge from the wrong origin, and resource limits that ran only after attacker-controlled buffering.
All fixes were written, reviewed and merged a couple of days later and shipped in &lt;a class="external" href="https://github.com/aio-libs/aiohttp/releases/tag/v3.14.1"&gt;aiohttp 3.14.1&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="keeping-it-going"&gt;Keeping it going&lt;/h2&gt;
&lt;p&gt;None of this makes aiohttp bug-free - every audit above found something, which is exactly why we keep inviting them.
Each round of fresh eyes turns into fixes, regression tests and threat model updates, and each program leaves the process a little stronger than it found it.
Our thanks to NLnet, Radically Open Security, GitHub, OpenAI, Trail of Bits, and every reporter credited in our advisories.&lt;/p&gt;
&lt;p&gt;If you believe you&amp;rsquo;ve found a vulnerability in any aio-libs project, please report it privately by following our &lt;a class="external" href="https://github.com/aio-libs/.github/blob/master/SECURITY.md"&gt;security policy&lt;/a&gt;.
And if your business relies on this work, consider &lt;a class="internal" href="/sponsorship/"&gt;sponsoring aio-libs&lt;/a&gt; - almost everything above was done by volunteers.&lt;/p&gt;</content><category term="aio-libs"/><category term="aiohttp"/></entry><entry><title>Introducing aiohttp</title><link href="/news/2026/introducing-aiohttp/" rel="alternate"/><published>2026-05-18T00:00:00+00:00</published><updated>2026-05-18T00:00:00+00:00</updated><author><name/></author><id>tag:None,2026-05-18:/news/2026/introducing-aiohttp/</id><summary type="html">&lt;p&gt;Most of you reading this already know &lt;a href="/projects/aiohttp/"&gt;aiohttp&lt;/a&gt; as the longest-running asynchronous HTTP client for Python&amp;rsquo;s &lt;a class="external" href="https://docs.python.org/3/library/asyncio.html"&gt;asyncio&lt;/a&gt;.
What is less widely known is that the same package also ships a full-featured web server and framework, available under &lt;code&gt;aiohttp.web&lt;/code&gt;.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Most of you reading this already know &lt;a href="/projects/aiohttp/"&gt;aiohttp&lt;/a&gt; as the longest-running asynchronous HTTP client for Python&amp;rsquo;s &lt;a class="external" href="https://docs.python.org/3/library/asyncio.html"&gt;asyncio&lt;/a&gt;.
What is less widely known is that the same package also ships a full-featured web server and framework, available under &lt;code&gt;aiohttp.web&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As a &lt;a class="external" href="https://docs.aiohttp.org/en/stable/client.html"&gt;client&lt;/a&gt;, aiohttp offers an ergonomic API for concurrent HTTP and WebSocket traffic, with &lt;a class="external" href="https://docs.aiohttp.org/en/stable/client_advanced.html#client-middleware"&gt;middlewares&lt;/a&gt; to customise request and response processing and &lt;a class="external" href="https://docs.aiohttp.org/en/stable/tracing_reference.html"&gt;tracing hooks&lt;/a&gt; for observability.&lt;/p&gt;
&lt;p&gt;As a &lt;a class="external" href="https://docs.aiohttp.org/en/stable/web.html"&gt;web server and framework&lt;/a&gt;, &lt;code&gt;aiohttp.web&lt;/code&gt; covers what you&amp;rsquo;d expect from a modern framework - WebSockets, middlewares, and an extensive ecosystem of &lt;a class="external" href="https://docs.aiohttp.org/en/stable/third_party.html"&gt;first and third party libraries&lt;/a&gt; extending the core functionality.
Rarer is its optional &lt;a class="external" href="https://docs.aiohttp.org/en/stable/web_advanced.html#web-handler-cancellation"&gt;handler cancellation&lt;/a&gt; when a client disconnects, sparing long-running handlers from finishing work no one is waiting for.
It has been quietly powering production services for years and is the backbone of Home Assistant.&lt;/p&gt;
&lt;p&gt;Sharing client and server in a single, well-tested dependency keeps things simple when you&amp;rsquo;re building services that both consume and serve HTTP, and aiohttp&amp;rsquo;s focus on performance means you rarely have to reach for something else as traffic grows.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll be posting more about aiohttp here over time - new releases, deep dives, and behind-the-scenes notes from the maintainers.
If you&amp;rsquo;d like to follow along, subscribe to the &lt;a class="external" href="https://aio-libs.org/feeds/aiohttp.atom.xml"&gt;aiohttp tag feed&lt;/a&gt;.&lt;/p&gt;</content><category term="aio-libs"/><category term="aiohttp"/></entry><entry><title>Welcome to the aio-libs site</title><link href="/news/2026/new-site/" rel="alternate"/><published>2026-02-18T00:00:00+00:00</published><updated>2026-02-18T00:00:00+00:00</updated><author><name/></author><id>tag:None,2026-02-18:/news/2026/new-site/</id><summary type="html">&lt;p&gt;We&amp;rsquo;ve just launched the new home page for aio-libs.&lt;/p&gt;</summary><content type="html">&lt;p&gt;We&amp;rsquo;ve just launched the new home page for aio-libs.&lt;/p&gt;
&lt;p&gt;This is where we&amp;rsquo;ll share updates and behind-the-scene looks at the work we&amp;rsquo;ve been doing across our projects.&lt;/p&gt;
&lt;p&gt;You can subscribe to the &lt;a class="external" href="https://aio-libs.org/feeds/atom.xml"&gt;Atom feed&lt;/a&gt; to get the latest updates as we post them.
The &lt;a class="external" href="https://aio-libs.org/feeds/aio-libs.atom.xml"&gt;aio-libs&lt;/a&gt; tag will be used to discuss general updates around the
group and introduce new projects. More tags will be added later to cover other areas.&lt;/p&gt;</content><category term="aio-libs"/></entry></feed>