Odpravili 20 let starega hrošča

Matej Huš

28. jun 2014 ob 11:40:43

Implementacija algoritma za stiskanje podatkov LZO (Lempel-Ziv-Oberhumer), ki jo najdemo v Linuxovem jedru in številnih projektih, recimo OpenVPN, MPlayer2, Libav, FFmpeg in drugih, je kar 20 let vsebovala hrošča, ki je omogočal ranljivost. Luknja je bila sicer precej specifična in je terjala natančno poznavanje implementacije, a kdor jo je poznal, bi lahko v teoriji pripravil niz podatkov, ki bi povzročil prekoračitev obsega celih števil (integer overflow).

Ker je implementacija algoritma iz leta 1994, ki jo je napisal Markus Oberhumer, veljala za robustno, učinkovito in varno, so jo uporabljali v številnih programih. To je med drugim povzročilo, da jo najdemo celo v roverjih, ki vozita po Marsu, čeprav tam ni nikogar, ki bi jo zmogel zlorabiti. A imata mikrokrmilnike, ki so ranljivi.

O ranljivosti piše Don A. Bailey iz podjetja Lab Mouse Security, že lani pa jo je odkril razvijalec uTorrenta Ludwig Strigeus. Kot pojasnjuje Yann Collet, so praktične zlorabe ranljivosti praktično nemogoče, ker so omejene na 32-bitni sistem (s čimer odpadejo vsi strežniki) in ker bi potrebovali več kot 16 MB dolge bloke stisnjenih podatkov, ki bi jih bral dekoder, kar je v nasprotju z izpeljanim standardom LZ4 (najdemo ga na primer v ZFS), ki je v teoriji tudi ranljiv.

Vseeno so ranljivost sedaj zakrpali, ker to ne uničuje združljivosti za nazaj in bi v nasprotnem primeru lahko v prihodnosti povzročila težave. V verziji LZO 2.07 je napaka odpravljena. Zanimiva je zlasti zaradi svoje dolgoživosti, medtem ko se po resnosti in posledicah ne more meriti, denimo, s Heartbleedom.