# CVE-2026-111497 — Brotli निवारण एजेंट

**CVE-2026-111497** के लिए एक नियतात्मक डिटेक्टर, निवारक और सत्यापनकर्ता — यह Google Brotli
डिकोडर (`c/dec/decode.c`, CWE-787) में out-of-bounds write है। तीन shell स्क्रिप्ट पूरा ऑडिट
करती हैं और संक्षिप्त निर्णय लौटाती हैं; भाषा मॉडल होस्ट को हाथ से खोजने के बजाय केवल एक पंक्ति
पढ़कर संचालन करता है।

<!-- md-i18n:switcher -->
**अन्य भाषाओं में:** [English](README.md) · [Deutsch](README.de.md) · [中文](README.zh.md) · हिन्दी · [Español](README.es.md) · [Русский](README.ru.md)

[![CI](https://github.com/paulmann/CVE-2026-111497/actions/workflows/ci.yml/badge.svg)](https://github.com/paulmann/CVE-2026-111497/actions/workflows/ci.yml)
[![Release](https://img.shields.io/github/v/release/paulmann/CVE-2026-111497)](https://github.com/paulmann/CVE-2026-111497/releases)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Shell: bash](https://img.shields.io/badge/shell-bash-4EAA25.svg)](#आवश्यकताएँ)
[![Platform: Debian/Ubuntu](https://img.shields.io/badge/platform-Debian%20%7C%20Ubuntu-A80030.svg)](#आवश्यकताएँ)

![CVE-2026-111497 — Brotli उपचार एजेंट](assets/social-preview.svg)

## विषय-सूची

- यह क्यों मौजूद है
- एक्सपोज़र मॉडल
- त्वरित शुरुआत
- निर्णय और exit-code अनुबंध
- ऑडिट क्या कवर करता है
- रिपॉज़िटरी लेआउट
- आवश्यकताएँ
- सीमाएँ
- दस्तावेज़ीकरण
- भाषाएँ
- योगदान
- लाइसेंस

[Wiki](https://github.com/paulmann/CVE-2026-111497/wiki) · [Changelog](CHANGELOG.md) · [Security](SECURITY.md) · [English](README.md)

## यह क्यों मौजूद है

पूर्ण Brotli ऑडिट कोई संस्करण-जाँच नहीं है। इसके लिए प्रत्येक होस्ट पर चार प्रश्नों के उत्तर
चाहिए: कौन-सा पैकेज संस्थापित है, क्या चालू प्रक्रियाएँ अब भी भेद्य डिकोडर को मैप करती हैं,
कौन-से एप्लिकेशन पथ वास्तव में अविश्वसनीय Brotli डिकोड करते हैं, और क्या distro backport
वास्तविक फ़िक्स है, न कि कोई असंबंधित rebuild।

हाथ से उत्तर देने पर इन प्रश्नों की कीमत प्रति होस्ट कई दर्जन tool calls होती है, और परिणाम ऐसा
गद्य बनता है जिसे दोबारा जाँचा नहीं जा सकता। यहाँ इनका उत्तर ऐसी स्क्रिप्ट देती हैं जिनका
exit-code अनुबंध स्थिर है:

| कमांड | होस्ट पर प्रभाव | एजेंट के लिए आउटपुट |
|---|---|---|
| `detect.sh` | केवल-पठन | `VERDICT: SAFE\|VULNERABLE\|NOT_INSTALLED` |
| `remediate.sh` | परिवर्तन का एकमात्र बिंदु | `REMEDIATED: <old> -> <new>` |
| `verify.sh` | केवल-पठन | `VERIFY: PASS\|FAIL` |

## एक्सपोज़र मॉडल

भेद्य कोड **डिकोडर** है, एनकोडर नहीं। जो सेवाएँ केवल Brotli से प्रतिक्रियाएँ संपीडित करती हैं,
वे आक्रमण-सतह नहीं हैं; जो सेवाएँ अविश्वसनीय Brotli डीकंप्रेस करती हैं, वे हैं।

| पहुँचने योग्य डिकोड पथ | सामान्य वाहक |
|---|---|
| HTTP अनुरोध निकाय | एप्लिकेशन को भेजा गया `Content-Encoding: br` |
| आउटबाउंड HTTP क्लाइंट | `fetch()`, libcurl जिसमें `CURLOPT_ENCODING` खाली है (सभी स्वीकार) |
| प्रॉक्सी से आने वाली प्रतिक्रियाएँ | Envoy/Istio HTTP विडीकंप्रेसर |
| अपलोड या डाउनलोड किए गए आर्काइव | एप्लिकेशन-स्तरीय Brotli स्ट्रीमिंग |
| साथ बंडल किए गए रनटाइम | Node.js, Bun, Python `Brotli`/`brotlicffi`, .NET अनुरोध विडीकंप्रेशन |

भेद्य upstream रिलीज़ **1.0.3 से 1.2.0** तक हैं। फ़िक्स वाली रिलीज़ **1.0.10, 1.1.1 और 1.2.1**
हैं (21 अक्टूबर 2026 को जारी), साथ ही हर वह distribution backport जो अपने पैकेजित changelog में
इस CVE का उल्लेख करता है।

## त्वरित शुरुआत

```bash
# 1. Deliver the scripts once (host is an SSH alias from ~/.ssh/config)
scp src/common.sh src/detect.sh src/remediate.sh src/verify.sh <host>:/root/cve-2026-111497/

# 2. Audit — read-only
ssh <host> 'bash /root/cve-2026-111497/detect.sh'          # exit 0/1/3/10

# 3. Remediate — only when the verdict is VULNERABLE
ssh <host> 'bash /root/cve-2026-111497/remediate.sh'

# 4. Verify the actual effect
ssh <host> 'bash /root/cve-2026-111497/verify.sh'          # VERIFY: PASS|FAIL
```

## निर्णय और exit-code अनुबंध

| कोड | निर्णय | अर्थ | अगला कदम |
|---:|---|---|---|
| 0 | `SAFE` | संस्थापित रिलीज़ भेद्य सीमा से बाहर है, या distro backport पहले से लागू है | दर्ज करें और बंद करें |
| 1 | `VULNERABLE` | संस्थापित upstream रिलीज़ भेद्य सीमा में है और कोई backport मौजूद नहीं | `remediate.sh` चलाएँ |
| 3 | `NOT_INSTALLED` | `libbrotli1` होस्ट पर अनुपस्थित है | दर्ज करें; Brotli आने पर पुनः जाँचें |
| 10 | `ERROR` | पूर्व-शर्त या invariant का उल्लंघन | संदेश पढ़ें, ऊपर भेजें, बाध्य न करें |
| 1 (`verify.sh`) | `FAIL` | निवारण का प्रभाव नहीं पड़ा | बंद होने की घोषणा से पहले जाँच करें |

`remediate.sh` सिस्टम को छूने से पहले code 10 के साथ रुक जाती है, जब apt candidate संस्थापित
संस्करण के बराबर हो, या जब candidate का changelog `CVE-2026-111497` का उल्लेख न करता हो।

## ऑडिट क्या कवर करता है

| जाँच | तंत्र | यह क्यों महत्वपूर्ण है |
|---|---|---|
| संस्थापित रिलीज़ और upstream संस्करण | `dpkg-query`, epoch और revision हटाकर | distro revisions upstream संस्करण छिपा देते हैं |
| लागू backport | पैकेजित `changelog.Debian.gz` जिसमें CVE का नाम है | प्रामाणिक संकेत, संस्करण स्ट्रिंग नहीं |
| Apt candidate | `apt-get update` फिर `apt-cache policy` | तय करता है कि कोई समर्थित फ़िक्स है ही या नहीं |
| जीवित उपभोक्ता | `libbrotlidec` के लिए `/proc/<pid>/maps` की स्कैन | पैच की गई फ़ाइल चालू प्रक्रिया को पैच नहीं करती |
| डिकोड सतह | libcurl Brotli फ़ीचर, Node/Bun/Python/PHP मॉड्यूल, `ngx_brotli`, `mod_brotli` | डिकोड पथों को केवल-संपीडन वाले पथों से अलग करता है |
| एप्लिकेशन डिकोड प्रिमिटिव | `CURLOPT_ENCODING` / `CURLOPT_ACCEPT_ENCODING` वाली PHP फ़ाइलों की गिनती | WordPress, SimplePie और Guzzle हर encoding स्वीकार करते हैं, `br` सहित |
| पैच-पूर्व inode स्नैपशॉट | वास्तविक `.so` पर `find -type f -printf '%i'` | symlink का inode एक झूठा आधार है |

## रिपॉज़िटरी लेआउट

```text
src/
  common.sh      logging, version parsing, classification matrix, state_get
  detect.sh      read-only audit: verdict, JSON report, before-state
  remediate.sh   backup, authenticity gate, dry-run, install, restart, inode check
  verify.sh      version, CVE reference, stale mappings, failed units, round-trip
docs/
  THREAT-MODEL.md  decode-path exposure model and attack surface
  PLAYBOOK.md      phase-by-phase procedure for a human auditor
  FIELD-REPORT.md  anonymised results from three production hosts
wiki/             operator documentation, field cases, advisory digest
SKILL.md          agent skill: the minimal orchestration playbook
AGENTS.md         repository rules and invariants
```

## आवश्यकताएँ

- लक्ष्य होस्ट: Debian 12, Ubuntu 24.04 या Ubuntu 26.04, `apt` के साथ, SSH कुंजी से root।
- `bash` 5.x, `dpkg`, `apt-get`, `systemd`; `curl` और `brotli` वैकल्पिक हैं और केवल
  कार्यात्मक round-trip का दायरा बढ़ाते हैं।
- distribution पैकेज mirrors के अतिरिक्त टूलींग से कोई नेटवर्क पहुँच नहीं।
- आउटपुट स्थिति: `/var/lib/cve-2026-111497/` (`report.json`, `state.before`, `state.after`)।
- बैकअप: `/root/cve-2026-111497-fix-<timestamp>/`, जिसमें पुराना `.deb`, वर्तमान `.so` और एक
  `dpkg` स्नैपशॉट रहता है।

## सीमाएँ

- **केवल apt.** rpm-आधारित होस्ट, Alpine और कंटेनर बेस इमेज दायरे से बाहर हैं; classification
  matrix पोर्टेबल है, पर निवारण पथ नहीं।
- **static-linking का पता नहीं चलता।** किसी बाइनरी या कंटेनर इमेज में संकलित Brotli प्रतिलिपि
  `dpkg` को दिखाई नहीं देती। डिटेक्टर केवल वही रनटाइम संस्करण बताता है जिन्हें वह पढ़ सकता है,
  उससे अधिक कुछ नहीं।
- **कोई orchestration परत नहीं।** Envoy, Istio, .NET, Bun और Deno थ्रेट मॉडल में वर्णित हैं,
  पर स्क्रिप्ट उनका निवारण नहीं करतीं।
- **डेस्कटॉप और इन्फ्रास्ट्रक्चर उपभोक्ता स्थगित रहते हैं, पुनः चालू नहीं होते।** फ़ॉन्ट और GUI
  स्टैक freetype के माध्यम से `libbrotlidec` मैप करते हैं; उन्हें पुनः चालू करने से सत्र टूट
  जाता। उन्हें `deferred` के रूप में दर्ज किया जाता है और वे अगले लॉगिन या रीबूट पर पैच की गई
  लाइब्रेरी लोड कर लेते हैं।
- **`needrestart` पहले कार्य कर सकता है।** Ubuntu 24.04 पर पैकेज hook संस्थापन के दौरान सर्वर
  सेवाएँ पुनः चालू कर देता है, इसलिए restart अनुभाग को वैध रूप से कुछ शेष न मिले।
- **फ़ील्ड डेटा तीन होस्ट का है।** यह रिपोर्ट एक नमूना है, पूरे फ़्लीट की गणना नहीं।

## दस्तावेज़ीकरण

| दस्तावेज़ | विषय-वस्तु |
|---|---|
| [`docs/THREAT-MODEL.hi.md`](docs/THREAT-MODEL.hi.md) | एक्सपोज़र मॉडल, डिकोड-पथ सूची, गंभीरता का तर्क |
| [`docs/PLAYBOOK.hi.md`](docs/PLAYBOOK.hi.md) | वह प्रक्रिया जिसे स्क्रिप्ट लागू करती हैं, मानव ऑडिटर के लिए |
| [`docs/FIELD-REPORT.hi.md`](docs/FIELD-REPORT.hi.md) | तीन होस्ट, फ़ील्ड में मिले नौ दोष, सत्यापन का प्रमाण |
| [Wiki](https://github.com/paulmann/CVE-2026-111497/wiki) | मूल कारणों सहित फ़ील्ड प्रकरण, advisory सार, संचालन runbook |

## भाषाएँ

अंग्रेज़ी canonical है: बिना भाषा-प्रत्यय वाला दस्तावेज़ सत्य का स्रोत है। प्रत्येक अनुवाद अपनी
भाषा का प्रत्यय रखता है और canonical फ़ाइल की ओर लिंक करता है।

| भाषा | फ़ाइलें |
|---|---|
| अंग्रेज़ी (canonical) | `README.md`, `AGENTS.md`, `SKILL.md`, `docs/*.md` |
| रूसी | `*.ru.md` |
| जर्मन | `*.de.md` |
| स्पेनिश | `*.es.md` |
| चीनी | `*.zh.md` |
| हिन्दी | `*.hi.md` |

## योगदान

फ़िक्स और नए distro backports का स्वागत है। पहले [`CONTRIBUTING.md`](CONTRIBUTING.md) पढ़ें:
exit-code अनुबंध, परिवर्तन-से-पहले-बैकअप नियम और authenticity gate पर कोई समझौता नहीं है।
सुरक्षा रिपोर्ट [`SECURITY.md`](SECURITY.md) के अनुसार दें।

## लाइसेंस

MIT. यह टूल रक्षात्मक है; इसमें कोई क्रेडेंशियल, कोई इन्फ्रास्ट्रक्चर पहचानकर्ता और कोई
लक्ष्य पता नहीं है।
