---
name: cve-2026-111497-brotli
description: Детерминированный аудит и устранение CVE-2026-111497 (запись за границы буфера в декодере Google Brotli, CVSS 4.0 9.2) на Linux-хостах с apt. Три скрипта — detect.sh, remediate.sh, verify.sh — заменяют ручное исследование хоста и удерживают расход токенов языковой модели минимальным. Загружать при аудите или устранении этой CVE на любом хосте Debian или Ubuntu.
whenToUse: "Когда сервер Debian или Ubuntu нужно проверить на CVE-2026-111497 (Brotli) или устранить её: вердикт об уязвимости, обнаружение пути декодирования, backport из дистрибутива, перезапуск потребителей, проверка достигнутого эффекта."
metadata:
  severity: critical
  cve: CVE-2026-111497
  cwe: CWE-787
  platform: Debian 12, Ubuntu 24.04, Ubuntu 26.04
---

# Агент устранения CVE-2026-111497 (Brotli)

## Назначение

CVE-2026-111497 — запись за границы буфера в декодере Google Brotli. Эксплуатация не требует
аутентификации: специально сформированный поток Brotli приводит к падению процесса, повреждению
памяти и в некоторых конфигурациях — к удалённому выполнению кода.

Этот агент сводит полный аудит и устранение к **трём детерминированным шагам**, каждый из
которых возвращает компактный машиночитаемый вердикт. Модель оркестрирует прогон и читает одну-две
строки; хост вручную она не исследует.

## Порядок работы (минимальный расход токенов)

Подготовка — доставьте скрипты на целевой хост один раз:

```bash
scp src/common.sh src/detect.sh src/remediate.sh src/verify.sh <host>:/root/cve-2026-111497/
```

### Шаг 1 — Аудит (только чтение)

```bash
ssh <host> 'bash /root/cve-2026-111497/detect.sh'
```

Читайте только последнюю строку: вердикт и компактную сводку (около семи строк). JSON-отчёт
записывается в `/var/lib/cve-2026-111497/report.json`.

| Код возврата | Вердикт | Действие |
|---|---|---|
| 0 | SAFE | ничего не делать, задокументировать результат |
| 1 | VULNERABLE | перейти к шагу 2 |
| 3 | NOT_INSTALLED | `libbrotli1` отсутствует — задокументировать |
| 10 | ERROR | прочитать сообщение, эскалировать |

### Шаг 2 — Устранение (только при VULNERABLE)

```bash
ssh <host> 'bash /root/cve-2026-111497/remediate.sh'
```

Скрипт выполняет перечисленное ниже в указанном порядке, без участия модели:

1. Резервное копирование старого `.deb`, текущих файлов `.so` и снимка `dpkg` в
   `/root/cve-2026-111497-fix-<timestamp>/`.
2. **Проверка подлинности** — пакет-кандидат загружается, и его changelog обязан ссылаться на
   `CVE-2026-111497`. Без такой ссылки установка не выполняется.
3. Сухой прогон `apt-get install --only-upgrade`.
4. Установка backport (`libbrotli1`, плюс `libbrotli-dev`, если он был установлен).
5. Перезапуск **серверных** потребителей декодера, определённых по `/proc/*/maps` и cgroup;
   процессы рабочего стола и инфраструктуры (GNOME, NetworkManager, VPN, fwupd) намеренно
   откладываются — они перезагрузят библиотеку при следующем входе или перезагрузке.
6. Проверка, что ни один процесс не сохраняет отображённым старый inode.

### Шаг 3 — Проверка достигнутого эффекта

```bash
ssh <host> 'bash /root/cve-2026-111497/verify.sh'
```

Читайте последнюю строку: `VERIFY: PASS` (код 0) или `VERIFY: FAIL` (код 1).

## Поверхность аудита

- Версия `libbrotli1`, классифицированная по матрице уязвимых выпусков (1.0.3–1.0.9, 1.1.0,
  1.2.0) с учётом backport из дистрибутива.
- Живые потребители декодера (`libbrotlidec`) по `/proc/*/maps`.
- Пути декодирования: libcurl (`brotli/...`), Node.js, Python `Brotli`/`brotlicffi`, расширение
  brotli для PHP, `ngx_brotli`, `mod_brotli`.
- Количество PHP-файлов, использующих `CURLOPT_ENCODING` / `CURLOPT_ACCEPT_ENCODING` —
  автоматическое декодирование `Content-Encoding: br` в WordPress Requests, SimplePie и Guzzle.

## Границы применимости

- Охватывает дистрибутивы с apt (Debian, Ubuntu) и официальный backport в `-security`. Без
  backport скрипт останавливается и требует ручного смягчения (блокировка `Content-Encoding: br`
  на периметре) либо сборки brotli 1.2.1 или новее из исходников.
- Не затрагивает Envoy, Istio, .NET, Bun и Deno — они находятся вне периметра хостов, для
  которых создавался этот агент.

## Правила безопасности (обязательные)

- На целевом хосте требуются права root.
- Никаких изменений, пока не пройдена проверка подлинности кандидата.
- Откат: `dpkg -i <backup>/deb/libbrotli1_*.deb`, затем перезапуск служб, перечисленных в шаге 2.
- После устранения проверьте `systemctl --failed` и доступность размещённых сайтов.
