---
name: cve-2026-111497-brotli
description: Auditoría y remediación deterministas de CVE-2026-111497 (escritura fuera de límites en el decodificador de Google Brotli, CVSS 4.0 9.2) en hosts Linux basados en apt. Tres scripts — detect.sh, remediate.sh, verify.sh — sustituyen la exploración manual del host y mantienen mínimo el gasto de tokens del modelo de lenguaje. Cárguela al auditar o remediar este CVE en cualquier host Debian o Ubuntu.
whenToUse: Cuando un servidor Debian o Ubuntu debe comprobarse o remediarse frente a CVE-2026-111497 (Brotli): veredicto de vulnerabilidad, descubrimiento de rutas de decodificación, backport de la distribución, reinicio de consumidores, verificación del efecto logrado.
metadata:
  severity: critical
  cve: CVE-2026-111497
  cwe: CWE-787
  platform: Debian 12, Ubuntu 24.04, Ubuntu 26.04
---

# Agente de remediación para CVE-2026-111497 (Brotli)

## Propósito

CVE-2026-111497 es una escritura fuera de límites en el decodificador de Google Brotli. La
explotación no requiere autenticación: un flujo Brotli manipulado hace caer el proceso, corrompe la
memoria y, en algunas configuraciones, logra ejecución remota de código.

Este agente reduce una auditoría y una remediación completas a **tres pasos deterministas**, cada
uno de los cuales devuelve un veredicto compacto legible por máquina. El modelo orquesta la
ejecución y lee una o dos líneas; no explora el host a mano.

## Procedimiento operativo (consumo mínimo de tokens)

Preparación: entregue los scripts al host de destino una sola vez:

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

### Paso 1 — Auditoría (solo lectura)

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

Lea solo la última línea: el veredicto y un resumen compacto (unas siete líneas). Se escribe un
informe JSON en `/var/lib/cve-2026-111497/report.json`.

| Código de salida | Veredicto | Acción |
|---|---|---|
| 0 | SAFE | no hacer nada, documentar el resultado |
| 1 | VULNERABLE | continuar al paso 2 |
| 3 | NOT_INSTALLED | `libbrotli1` ausente — documentar |
| 10 | ERROR | leer el mensaje, escalar |

### Paso 2 — Remediación (solo con VULNERABLE)

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

El script realiza lo siguiente, en este orden, sin intervención del modelo:

1. Copia de seguridad del `.deb` antiguo, de los archivos `.so` actuales y de una instantánea de
   `dpkg` en `/root/cve-2026-111497-fix-<timestamp>/`.
2. **Puerta de autenticidad** — se descarga el paquete candidato y su changelog debe mencionar
   `CVE-2026-111497`. Sin esa referencia no se instala nada.
3. Simulación de `apt-get install --only-upgrade`.
4. Instalación del backport (`libbrotli1`, más `libbrotli-dev` si estaba instalado).
5. Reinicio de los consumidores de **servidor** del decodificador, resueltos desde `/proc/*/maps` y
   el cgroup; los procesos de escritorio e infraestructura (GNOME, NetworkManager, VPN, fwupd) se
   difieren deliberadamente: recargan la biblioteca en el siguiente inicio de sesión o reinicio.
6. Comprobación de que ningún proceso mantiene mapeado un inodo antiguo.

### Paso 3 — Verificación del efecto logrado

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

Lea la última línea: `VERIFY: PASS` (código de salida 0) o `VERIFY: FAIL` (código de salida 1).

## Superficie de auditoría

- Versión de `libbrotli1`, clasificada frente a la matriz de versiones vulnerables (1.0.3–1.0.9,
  1.1.0, 1.2.0) teniendo en cuenta los backports de la distribución.
- Consumidores activos del decodificador (`libbrotlidec`) mediante `/proc/*/maps`.
- Rutas de decodificación: libcurl (`brotli/...`), Node.js, `Brotli`/`brotlicffi` de Python, la
  extensión brotli de PHP, `ngx_brotli`, `mod_brotli`.
- Recuento de archivos PHP que usan `CURLOPT_ENCODING` / `CURLOPT_ACCEPT_ENCODING` — decodificación
  automática de `Content-Encoding: br` en WordPress Requests, SimplePie y Guzzle.

## Límites de alcance

- Cubre distribuciones con apt (Debian, Ubuntu) y un backport oficial en `-security`. Sin backport,
  el script se detiene y exige una mitigación manual (bloquear `Content-Encoding: br` en el borde) o
  compilar brotli 1.2.1 o posterior desde las fuentes.
- No toca Envoy, Istio, .NET, Bun ni Deno — quedan fuera del perímetro de los hosts para los que se
  construyó este agente.

## Reglas de seguridad (obligatorias)

- Se requiere root en el host de destino.
- Ningún cambio antes de que pase la puerta de autenticidad del candidato.
- Reversión: `dpkg -i <backup>/deb/libbrotli1_*.deb` y después reiniciar los servicios indicados en
  el paso 2.
- Tras la remediación, comprobar `systemctl --failed` y la disponibilidad de los sitios alojados.
