# Pekelný patch week: Proč už čísla verzí nic neznamenají a záplata bez restartu je jen iluze

- Autor: Ing. Filip Lang, DBA
- Vydáno: 2026-10-27, aktualizováno: 2026-10-27
- Kategorie: Aktuality
- Zdroj: https://ictnwt.cz/blog/pekelny-patch-week-proc-uz-cisla-verzi-nic-neznamenaji-a-zaplata-bez-restartu-je-jen-iluze

Pokud jste měli minulý týden pocit, že administrátoři a bezpečáci nespí, nebyl to klam. Mezi středou 21. a nedělí 25. října 2026 proběhla smršť bezpečnostních incidentů, která v plné nahotě ukázala realitu dnešní správy zranitelností.

Během pouhých pěti dnů se postupně otřásly základy webového provozu (PHP), důvěra v certifikační autority (PKI), nízkoúrovňová dekomprese (Brotli), Zero Trust sítě (Tailscale) a na závěr vývojářská infrastruktura (GitLab).

Zde je ohlédnutí za uplynulým týdnem, technická podstata jednotlivých krizí a hlavně praktická ponaučení pro správu infrastruktury.

## Chronologie bouře: Od PHP2Shell po desítkový GitLab

### 1. Středa 21. října: PHP2Shell a první noční klepání na dveře

Všechno odstartovalo ve středu v 16:00 SELČ, kdy PHP Security Team po předchozím úniku na sociálních sítích narychlo vydal opravy pro dvě kritické chyby: **CVE-2026-109618** a **CVE-2026-109619** (komunitou překřtěné na [php2shell](/blog/kriticke-zranitelnosti-v-jadre-php-php2shell-opravy-dnes-v-16-00-selc-pripravte-se-uz-ted), CVSS v4.0 9.2). Obě umožňují neautentizované spuštění kódu (RCE) pouhým HTTP požadavkem.

Reakční doba útočníků? V noci na čtvrtek, zhruba v 02:30 ráno – pouhých 10,5 hodiny po vydání záplat – zaznamenaly první servery pokusy o exploitaci. První zmínky jsou dokonce 4 dny před zveřejněním. Kdo čekal na čtvrteční ranní kávu, měl zpoždění.

### 2. Čtvrtek 22. října: PKI v plamenech (Když je privátní klíč číslo 4)

Zatímco se dohasínalo PHP, v plné síle udeřil problém certifikační autority eMudhra. Ta vygenerovala osm mezilehlých (intermediate) TLS CA certifikátů se slabými privátními klíči – u jednoho z nich měl privátní klíč doslova hodnotu „4“.

Všechny tyto certifikáty byly křížově podepsány autoritou Sectigo (AAA Certificate Services), což útočníkovi v pozici Man-in-the-Middle (MITM) umožňovalo vystavit platný certifikát pro libovolnou doménu. Následovala lavina out-of-band záplat:

- **Java (CVE-2026-91403):** Mimořádný update OpenJDK a Oracle.
- **Go (CVE-2026-111943):** Hardcoded blokace v crypto/x509 ve verzích 1.27.3 a 1.26.10.
- Aktualizace systémových trust storů napříč OS, Node.js i Pythonem.

### 3. Pátek 23. října: Node2Shell (Brotli) a PHP bez patche

V pátek se naplno projevil dominový efekt dodavatelského řetězce:

- **Node2Shell (CVE-2026-111497, CVSS 9.2):** Out-of-bounds zápis v dekodéru Google Brotli (verze 1.0.3 až 1.2.0), nahlášený OpenAI Codex Security. Zranitelný byl kdekdo: Node.js, Bun, Python (brotli/brotlicffi), Envoy i Istio. V Expressu nebo při volání externích webhooků stačí hlavička Content-Encoding: br a proces zapisuje za alokovanou paměť.
- **PHP Session Progress (CVE-2026-115560):** Jako by jedno PHP nestačilo, tým ohlásil možnost spuštění kódu přes session.upload_progress a specifické nastavení session.serialize_handler. Háček? Pro tuto zranitelnost neexistoval okamžitý patch, dodavatel oznámil opravu až v dalším plánovaném vydání.

### 4. Víkendové finále: Tailworm a jedenáctiletý GitLab

**Sobota (Tailworm):** Publikována série 11 zjištění proti Tailscale (1.104.2) a Headscale (0.29.5). Démon tailscaled běží jako root; při povoleném port forwardingu přes Tailscale SSH prováděl forwarding unixových socketů přímo root proces. Cílení na /var/run/docker.sock znamenalo okamžité převzetí hostitele bez sudo a hesel. Opět situace bez patche, řešitelná pouze úpravou ACL.

**Neděle (GitLab CVE-2026-110264, CVSS 10.0):** Absolutní tečka týdne. Neautentizované RCE v srdci vývoje, které v kódu tiše spalo od verze 7 vydané v roce 2015. Závažnost donutila GitLab vydat backport i pro staré nepodporované řady.

## Čtyři tvrdé lekce z uplynulého týdne

### Lekce 1: Číslo verze v CLI je lež (Ubuntu backport paradox)

Když po vydání záplaty na PHP spustíte na Ubuntu příkaz php -v, terminál vám hrdě nahlásí například: PHP 8.5.4 (cli) (built: Oct 19 2026 14:35:18)

Oficiální upstream bulletin přitom říká: Bezpečné verze jsou 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Zdánlivě jste osm verzí pozadu a zranitelnostní skenery začnou okamžitě červeně blikat.

Realita? Balíček je plně opravený. Distribuce jako Debian, Ubuntu nebo RHEL běžně backportují pouze konkrétní bezpečnostní záplatu do své stabilní verze balíčku (zde 8.5.4-0ubuntu1.5). Navíc časové razítko ukazuje, že distribuce měly patch zkompilovaný s předstihem.

> **Pravidlo:** Nevěřte číslu verze v CLI. Důvěřujte pouze revizi balíčku (apt changelog php8.5-fpm, dpkg -l) a bezpečnostnímu trackeru své distribuce.

### Lekce 2: Nainstalovaný balíček nerovná se opravený systém

Klasická chyba: administrátor spustí apt upgrade, uvidí stažený balíček a odchází spát.

Kód na disku sice odpovídá záplatě, ale worker procesy v paměti (php-fpm, apache2, Node servery, Java aplikace) drží otevřené původní sdílené knihovny a běží v nezáplatovaném stavu. Pokud neresetujete aplikační proces, systém je pro útočníka stále otevřený.

### Lekce 3: Trust story jsou roztříštěné

Krize kolem eMudhra certifikátů ukázala naivní představu, že stačí v systému zaktualizovat balíček ca-certificates.

- **Java:** Každý nástroj (Jenkins, Elasticsearch, Keycloak) mívá vlastní bundled JRE s vlastním souborem cacerts, který systémové certifikáty ignoruje.
- **Go:** Blokace certifikátů byla zakompilována přímo do runtimu Go. Pokud máte Go binárku nebo statický distroless kontejner zkompilovaný před opravou, systémový trust store vám nepomůže. Musí proběhnout rekompilace.
- **Python a Node:** Využívají vlastní vendoring certifikátů (certifi, vestavěný cert bundle v Node.js).

### Lekce 4: Když není patch, vládne konfigurace a Zero Trust

Případy zranitelností u PHP (upload progress) a Tailscale potvrdily, že spoléhat se výhradně na záplaty od dodavatele je slepá ulička:

- Pokud patch neexistuje, musíte znát konfiguraci natolik, abyste rizikovou funkci odstřihli direktivou (php_admin_flag).
- V případě Tailscale nebyla chybou samotná síť, ale příliš benevolentní ACL a důvěra v démona s právy roota.

## Checklist: Co zkontrolovat a nastavit hned teď

### PHP infrastruktura

- Ověřte revizi balíčků v distribuci, nikoliv jen výstup php -v.
- Vynucte restart FPM workerů: systemctl restart php*-fpm.
- Pro eliminaci CVE-2026-115560 zakažte upload progress natvrdo v konfiguraci FPM poolu: php_admin_flag[session.upload_progress.enabled] = off (hodnoty php_admin_* nelze z kódu přepsat funkcí ini_set).

### Dekomprese a závislosti (Brotli / Node2Shell)

- Povyšte Node.js (26.12.1 / 24.22.1 / 22.23.4) a Bun (1.4.4).
- Přestavte Docker kontejnery se staršími bázemi.
- V Pythonu zkontrolujte závislosti: pip list | grep -i brotli a aktualizujte brotli i brotlicffi na verze 1.2.1+.
- Aktualizujte Envoy (1.40.0+) a Istio.

### Revize PKI a trust storů

- Aktualizujte systémový balíček ca-certificates.
- Vyhledejte zapomenuté JRE prostředí na serverech: find / -path '*lib/security*' -name cacerts 2>/dev/null a aplikujte záplaty OpenJDK.
- Překompilujte kritické interní Go nástroje pomocí Go 1.27.3 nebo 1.26.10.

### Tailscale / Headscale ACL

- Zakažte port forwarding v pravidlech Tailscale SSH ACL, pokud není nezbytný.
- Zkontrolujte a zablokujte přístup k citlivým unixovým socketům (především /var/run/docker.sock).
- Zapněte Tailnet Lock a expiraci klíčů.
- Pokud máte podezření na kompromitaci uzlu, nespoléhejte na reinstalaci stroje – smažte uzel v admin konzoli.

### GitLab (CVE-2026-110264)

- Pokud provozujete self-hosted GitLab dostupný do internetu, aktualizujte bez odkladu na nejnovější bezpečnostní vydání.
- Pokud upgrade nelze provést ihned, okamžitě instanci stáhněte za firemní VPN nebo omezte přístup na IP whitelist.

Minulý týden byl ukázkovou lekcí: moderní bezpečnost není o sledování čísel verzí na titulních stránkách, ale o pochopení toho, jak systém skládá závislosti, které procesy skutečně běží v paměti a jak rychle dokážete omezit útočný povrch dřív, než dorazí oficiální balíček.
