Bezpečnost

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.

· 5 zhlédnutí

Ferris, kreslený krab jako maskot programovacího jazyka Rust
Ferris, neoficiální maskot programovacího jazyka Rust, ve kterém je zlib-rs napsaná. Foto: Looobay, Wikimedia Commons (CC BY-SA 4.0)

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.

Bezpečnost

Diskuse

Zatím tu nikdo nediskutuje.

Diskutovat mohou přihlášení čtenáři – přihlaste se nebo si založte účet.

← zpět na výpis