Jak řešíme bezpečnostní aktualizace
Během jednoho říjnového týdne vydaly Node.js i Next.js závažné bezpečnostní opravy. Co jsme opravili, jak rychle a jak každé nasazení ověřilo, že oprava opravdu běží.
Každý web, který stavíme, běží na dvou open-source projektech: Node.js obsluhuje server a Next.js vykresluje stránky. Ve druhé polovině října 2026 vydaly oba projekty bezpečnostní opravy: Node.js své chyby ohodnotil jako závažné (high), Next.js dvě ze svých jako kritické. Popíšeme, co jsme s nimi udělali, včetně toho, kde jsme byli pozdě.
Node.js 24.22.1, opraveno 22. října
Node.js 21. října vydal bezpečnostní verze 22.23.4, 24.22.1 a 26.12.1. Nejvyšší opravená závažnost byla „high“ a měly ji čtyři chyby:
zápis mimo vyhrazenou paměť v dekodéru Brotli, který umožňuje spustit na serveru cizí kód (CVE-2026-111497);
chyba v DNS se znakem NUL (CVE-2026-105482);
dva způsoby, jak obejít kontrolu názvu serveru v TLS (CVE-2026-105483 a CVE-2026-106069).
Používáme Node 24, takže naše opravená verze je 24.22.1.
Naše servery běží v Docker obrazech postavených na oficiálním obrazu node:24-alpine. Den po vydání jsme znovu sestavili a nasadili každou službu, která běží na Node: API, notifikační službu, administraci a všechny weby klientů.
Při tom jsme našli slabinu ve vlastním procesu. Sestavení mohlo použít základní obraz uložený v mezipaměti stroje, takže „znovu sestaveno“ ještě neznamenalo „sestaveno na opraveném Node“. Do sestavení každé pipeline i do šablony, ze které vznikají nové weby, jsme přidali --pull. Sestavení teď vždy stáhne aktuální základní obraz a v logu je vidět, který použilo. Než jsme práci označili za hotovou, zkontrolovali jsme v logu každého nasazení, že běží opravený obraz.
Next.js 16.4.2, opraveno 23. října
Tým Next.js zveřejnil 14. října tři bezpečnostní zprávy, opravené ve verzi 16.4.1:
dvě kritické, které útočníkovi bez přihlášení dovolí spustit kód na serveru: jedna v cachovaných funkcích, které vracejí typed arrays, druhá v optimalizaci obrázků při použití SVG;
jednu závažnou, která přes Server Actions umožňuje web zahltit (DoS).
Našli jsme je 23. října, devět dní po zveřejnění. Do globální databáze GitHub Advisory se dostaly až 22. října, a to je nejpravděpodobnější důvod, proč je naše automatické aktualizace závislostí nenahlásily dřív. Teď zjišťujeme, proč je náš aktualizační bot přehlédl.
Ještě týž den přešly všechny živé weby, administrace i všechny tři šablony na Next.js 16.4.2, nejnovější verzi. Každá změna se týkala jen balíčků Next.js; před sloučením jsme každý lockfile porovnali s registrem npm. Žádný z našich webů nepovoluje SVG v optimalizaci obrázků, ale všechny používají cachované funkce, takže jsme každý web brali jako zranitelný.
Jak víme, že oprava běží
Sloučená oprava chrání až ve chvíli, kdy běží. Každý web, který nasazujeme přes naši pipeline, odpovídá na adrese /api/version svou verzí a přesným commitem, ze kterého byl sestaven. Po každém nasazení se pipeline živého webu zeptá a sestavení selže, pokud odpověď není nový commit. Každé bezpečnostní nasazení výše touto kontrolou prošlo dřív, než jsme ho označili za hotové.
Jeden starší web se sestavuje v samostatné pipeline, která tuto kontrolu zatím nemá. Byl znovu sestaven a nasazen, jeho živá verze ale automaticky ověřena nebyla.
Co musíte udělat vy
Nic. Pokud váš web běží na CMS Craft, byl aktualizován tak, jak popisujeme výše. Chcete-li se přesvědčit sami, otevřete https://vas-web.cz/api/version a porovnejte datum s tímto článkem.