# CVE-2026-111497 remediation agent — wiki

Operator documentation for the deterministic remediation agent of **CVE-2026-111497**, an
out-of-bounds write in the Google Brotli decoder. The repository ships three bash scripts, a skill for
an agent runtime, and the documentation you are reading.

This wiki exists because the interesting part of a Brotli audit is not the patch: it is the
difference between "the package is updated" and "no reachable process decodes attacker-controlled
Brotli with the vulnerable library". That difference produced nine defects in the tool during its
first field run, each documented on the [field cases](04-Field-Cases) page with its root cause.

## The exposure rule

**Compression is not exposure. Decompression is exposure.** A workload is exposed when it
decompresses Brotli that an attacker can influence: an inbound `Content-Encoding: br` body, an
outbound response decoded by `fetch()` or libcurl, an uploaded archive, a gateway decompressor, or a
copy of the library compiled into a binary or an image. Serving Brotli-compressed responses alone is
not exposure. The full path inventory is in the [ecosystem matrix](06-Ecosystem-Matrix).

## Start here

| Step | Page | Why |
|---|---|---|
| 1 | [Why this exists](01-Why) | what an audit owes, and why a version check is not one |
| 2 | [Deployment](02-Install) | deliver the scripts and prove the verdict contract |
| 3 | [Repository contract](03-Repository-Contract) | exit codes, state files, invariants |
| 4 | [Field cases](04-Field-Cases) | nine defects, what was fixed where, and how each was found |
| 5 | [Advisory digest](05-Advisory-Digest) | identifiers, root cause, timeline, open questions, sources |
| 6 | [Ecosystem matrix](06-Ecosystem-Matrix) | which component is affected and what fixes it |
| 7 | [Inventory](07-Inventory) | commands that find every copy before anything is decided |
| 8 | [Remediation playbooks](08-Remediation-Playbooks) | patch procedures per runtime, priority P0–P3, closure evidence |
| 9 | [Interim mitigations](09-Interim-Mitigations) | 415 at the edge, framework defaults, isolation, detection signals |
| 10 | [Operating runbook](10-Operations) | pre-flight, run, post-checks, verification checklist, rollback |
| 11 | [Traps](11-Traps) | environment, tool and publishing traps that cost a run |

## What the agent does

| Step | Command | Output read by the model |
|---|---|---|
| Audit | `detect.sh` | `VERDICT: SAFE\|VULNERABLE\|NOT_INSTALLED` |
| Remediate | `remediate.sh` | `REMEDIATED: <old> -> <new>` |
| Verify | `verify.sh` | `VERIFY: PASS\|FAIL` |

Exit codes: `0` safe, `1` vulnerable (or verification failed), `3` not installed, `10` error.

The tool covers the Debian and Ubuntu package path. Node.js, Bun, Python, .NET, Envoy, Istio, static
copies and container images are outside it by design — the matrix page names what covers each.

## Facts behind this documentation

| Fact | Value | Where it was measured |
|---|---|---|
| Hosts exercised in the field | 3 (Debian 12, Ubuntu 24.04, Ubuntu 26.04) | field report |
| Defects found by the field run | 9, all fixed before release | [field cases](04-Field-Cases) |
| PHP files with outbound decode primitives on the largest host | 164 | `grep` over `/var/www` for `CURLOPT_ENCODING` and `CURLOPT_ACCEPT_ENCODING` |
| Sites checked after remediation on that host | 10 of 10 answered HTTP 200 | `curl --resolve` loop |
| Stale server mappings after remediation | 0 on all three hosts | `/proc/*/maps` inode scan |

## Links

- [Repository](https://github.com/paulmann/CVE-2026-111497)
- [Releases](https://github.com/paulmann/CVE-2026-111497/releases)
- [Issues](https://github.com/paulmann/CVE-2026-111497/issues)

> [!NOTE]
> The wiki is written in English for a senior IT security operator: one register, one set of terms,
> no parallel tree to keep in sync. The repository itself carries translations — `README.de.md`,
> `README.es.md`, `README.hi.md`, `README.zh.md`, `README.ru.md` and the same suffixes for the other
> documents — and every translation links back to the canonical English file.
