Knihovna zlib-rs, cílená na bezpečnost, opravila use-after-free ve vlastním kódu
Projekt zlib-rs, rustová náhrada klasické céčkové knihovny zlib financovaná organizací za Let's Encrypt, vydal 3. srpna 2026 verzi 0.6.7. Oprava se týká chyby use-after-free, kterou nezávislý výzkumník našel ve funkci <code>set_level</code> – navzdory tomu, že volající kód nemusí napsat jediný řádek nebezpečného Rustu. Release zároveň přidal optimalizace pro čínskou architekturu LoongArch.

Projekt zlib-rs vydal 3. srpna 2026 verzi 0.6.7. Podle poznámek k vydání přináší hlavně dvě věci: opravu chyby use-after-free ve funkci set_level a sadu optimalizací pro architekturu LoongArch. Nezávisle o vydání informoval i server Phoronix.
Bezpečnější náhrada starého céčkového zlib
Zlib je desítky let stará knihovna pro kompresi dat ve formátu DEFLATE, napsaná v jazyce C. Používá ji obrovské množství software – od archivátorů přes formát PNG až po síťové protokoly. Zlib-rs je její přepis do jazyka Rust se stejným rozhraním, takže jde nasadit jako náhradu beze změny volajícího kódu. Podle vlastního popisu projektu na GitHubu stojí za jeho vznikem organizace Internet Security Research Group (ISRG), tedy nezisková organizace, která provozuje i certifikační autoritu Let's Encrypt, v rámci svého programu Prossimo na přepisování klíčové internetové infrastruktury do paměťově bezpečných jazyků. Vývoj dál financuje Trifecta Tech Foundation. Podle stránky projektu na GitHubu knihovnu používá přes jedenáct tisíc repozitářů, nejsnáz se do rustových projektů dostává přes balíček flate2.
Chyba, která obchází bezpečnost Rustu
Rust hlídá při překladu, že se program nesahá na paměť, která už byla uvolněná – tahle třída chyb (use-after-free) je v jazycích jako C nebo C++ jedním z nejčastějších zdrojů zranitelností. Kontrola ale platí jen pro takzvaně bezpečný Rust; jakmile knihovna uvnitř sáhne po surových ukazatelích (raw pointers) v bloku označeném unsafe, hlídání se vypne a odpovědnost za správnost přebírá autor kódu.
Přesně to se stalo ve funkci compress_uninit: podle popisu chyby, který zveřejnil uživatel kimjy0126, si tahle funkce uloží surové ukazatele na vstupní a výstupní vyrovnávací paměť, aniž by jejich životnost svázala se strukturou Deflate. Když si volající kód pak nechá zaniknout původní buffery a zavolá funkci set_level pro změnu úrovně komprese, sáhne se přes ty už neplatné ukazatele – to je use-after-free. V přiloženém ukázkovém kódu volající program nepoužívá jediné nebezpečné (unsafe) volání a přesto chybu spolehlivě vyvolá, protože nebezpečná část je schovaná uvnitř samotné knihovny.
Bez bezpečnostního dopadu, tvrdí autoři
Nálezce nahlásil chybu nejdřív soukromě přes bezpečnostní kontakt projektu a teprve po domluvě ji zveřejnil jako běžný issue. Hlavní vývojář Folkert de Vries v diskusi napsal, že tým chybu nepovažuje za bezpečnostní riziko: způsob použití, který ji spouští, je podle něj v praxi extrémně vzácný, a program, který by na něj narazil, by beztak fungoval špatně už předtím – chyběla by mu část dat, protože se nestihla zapsat. Opravu přinesla oprava v pull requestu #552, kterou tým zároveň pokryl novým testem a spuštěním pod adresním sanitizérem (AddressSanitizer) v automatických testech, aby se podobná chyba příště odhalila dřív.
Zrychlení pro čínskou architekturu LoongArch
Kromě opravy přidala verze 0.6.7 podle Phoronixu dvě optimalizace pro instrukční sadu LSX (Loongson SIMD eXtension) čínské architektury LoongArch: novou implementaci funkce compare256 s přírůstkem rychlosti kolem 4 % v jednom testu a širší načítání a ukládání dat při dekompresi (inflate), které v tomtéž měření zrychlilo až o 10 %. LoongArch je architektura procesorů čínské firmy Loongson, kterou si vývojáři zlib-rs postupně přidávají do podporovaných cílů vedle x86, ARM a RISC-V.
Zlib-rs není jediný rustový projekt, který se snaží nahradit klíčovou céčkovou infrastrukturu – podobným směrem jde třeba gccrs, rustový frontend pro překladač GCC, který testuje překlad přímo linuxového jádra. Rozdíl je v tom, že zlib-rs už dnešní verzi zlib v produkčním provozu skutečně nahrazuje, zatímco gccrs teprve dohání funkčnost potřebnou ke spuštění jádra.