Képlékeny biztonság: frissítsd a böngésződet, a képszerkesztődet, a rendszeredet!

kami911 képe

Napvilágot látott egy új sérülékenység, amely egy rosszindulatú WebP-kép megnyitásának hatására puffer túlcsorduláshoz vezethet a tartalomfeldolgozásban. Tudomásunk van arról, hogy ezt a problémát más termékekkel szemben már aktívan ki is használják a támadok – így a mielőbbi frissítés javasolt…

A leggyengébb láncszem ezúttal a libwebp alkalmazáskönytár volt, amelyben az Apple Security Engineering and Architecture (SEAR) és a The Citizen Lab biztonsági kutatói fedeztek fel a CVE-2023-4863 néven jegyzett hibát. A WebP egy képformátum, amit a Google fejlesztett ki, és célja a képek hatékony tömörítése és átvitele az interneten. A WebP a veszteséges és veszteségmentes tömörítési módszereket is támogatja, ami azt jelenti, hogy a képek minősége csökkenhet a tömörítés során, de kisebb fájlméreteket eredményez. A WebP formátumot különösen a weboldalak sebességének növelése érdekében alkalmazzák, mivel azáltal csökkenthető a képek letöltési ideje, ami javíthatja a felhasználói élményt.

A libwebp programkönyvtárat a WebP képformátum kezelésére használják számos különböző alkalmazásban és rendszerben. A libwebp egy nyílt forráskódú projekt, és lehetővé teszi a fejlesztők számára, hogy WebP képeket olvassanak és írjanak alkalmazásaikban. Néhány példa azokra az alkalmazásokra és platformokra, amelyek használják a libwebp-t:

  1. Webböngészők: Néhány webböngésző használja a libwebp-t a WebP képek megjelenítéséhez és tömörítéséhez. Például a Google Chrome támogatja a WebP formátumot, így a weboldalak gyorsabban betölthetők.

  2. Képnéző és képszerkesztő szoftverek: Képnézők és képszerkesztők is használják a libwebp-t, hogy támogassák a WebP formátumot, így a felhasználók könnyen megtekinthetik és szerkeszthetik ezeket a képeket.

  3. Operációs rendszerek: Az operációs rendszerek bizonyos részei is használhatják a libwebp-t a WebP képek kezelésére. Például, ha egy operációs rendszer támogatja a WebP formátumot, akkor a rendszergrafikus felhasználói felülete is képes lehet megjeleníteni ezeket a képeket.

Ennek megfelelően a frissítendő alkalmazások köre igen széles, a webböngészőktől kezdve, a képszerkesztő és irodai csomagokon át, az operációs rendszerig. A probléma tehát önmagában nem a Chrome vagy akár a Chromium részéről van, hanem a libwebp programkönyvtárban, amelyet a Chromium és számos más projekt is használ. A könyvtárat a WebM Project gondozza, amely a Google és számos más vállalat közös erőfeszítése. A Firefox például szintén a libwebp-t használja, és ez a sebezhetőség érinti ennek megfelelően a Firefox, a Firefox ESR és a Thunderbird termékeket is – akárcsak a többi ismertebb Chromium alapú grafikus böngészőt is (Edge, Brave, Opera), illetve a TOR böngészőt is. Számos operációs rendszer is érintett (hiszen a legtöbb Linux terjesztés [Debian, Suse, Fedora] is, és az Android is szállítja ezt a programkönyvtárat), továbbá a Electron és a Flutter alapú appok, a Visual Studio Code IDE, a Signal üzenetküldő, a Slack üzenetküldő, a Teams és a Telegram üzenetküldős is. Továbbá a Gimp, Inkscape, Godot, FFMPEG, GThumb, Darktable, Mapnik, és a WebKit alapú böngészőket is érinti a hibajavítás. Továbbá az Apple termékek esetében is hasonló hibákat javítottak (CVE-2023-41064 és CVE-2023-41061).

A fejlesztők a hibát az 1.3.2-es verzióban javították, így érdemes ezt a javított verziót keresni, telepíteni.

A legjobb tanács jelenleg az, hogy frissítsen mindent.

Hogy mi is történik – egyszerűen elmagyarázva

Képzeld el, hogy van egy polcod, amely csak 5 könyvet tud befogadni. Ez a polc pontosan erre az 5 könyvre való, és nem többre. Most mi történik, ha megpróbálsz erőszakkal elhelyezni egy 6. könyvet? A polc eltörhet, vagy a 6. könyv kiszoríthat egy másik könyvet a polcról, igaz? Ez a „túlcsordulás” lényege – megpróbálsz többet betenni valamibe, mint amennyire azt tervezték.

A számítógépek a memóriának egy „heap” („halom”) nevű területét használják bizonyos típusú adatok tárolására. Ha egy program nem jól kezeli ezt a memóriát, és megpróbál több adatot betömni egy „heap-pufferbe” (mint a mi polcunk), mint amennyit az elbír, azt heap-puffer túlcsordulásnak nevezzük.

Visszatérve a polc analógiához, képzeld el, hogy van egy huncut barátod. Minden alkalommal, amikor túl sok könyvet próbálsz a polcra pakolni, a barátod eldöntheti, hogy melyik könyv kerüljön ki a polcról. Talán lecseréli a kedvenc regényedet egy olyan könyvre, amit utálsz. Számítógépes szempontból a túlcsorduló adatok más fontos adatokat vagy utasításokat írhatnak felül úgy, hogy az a támadó számára előnyös legyen.

Ha valaki tudja, hogy egy programban van egy heap-puffer túlcsordulási sebezhetőség, képes lehet elküldeni neki speciálisan kialakított adatokat, amelyek hatására a program váratlan módon viselkedik. Például potenciálisan rosszindulatú kódot futtathat, vagy jogosulatlan hozzáférést szerezhet a rendszerhez.

A kodek olyan, mint egy fordító, amely segít a számítógépnek megérteni és megjeleníteni a WebP-képeket (a JPEG-hez vagy PNG-hez hasonló formátum). Ha ez a kodek heap-puffer túlcsordulással rendelkezik, egy támadó képes lehet rosszindulatú WebP-képet készíteni, amely megtekintése esetén kihasználja ezt a sebezhetőséget, és kárt okozhat a számítógépében vagy információt lophat.

Mennyire rossz a helyzet? Nagyon!

Ha egy támadó ki tudja használni a heap-puffer túlcsordulását, akkor képes lehet átvenni az irányítást a rendszer felett, adatokat lopni, vagy rosszindulatú programot behozni. Az ilyen sebezhetőségek elleni védelem kulcsfontosságú.

Mi volt a probléma a WebP könyvtárban?

A probléma gyökere a „BuildHuffmanTable” függvényben rejlik, amelyet először 2014-ben vezettek be, a függvényt arra használják, hogy ellenőrizzék, hogy az adatok pontosak-e. A sebezhetőség akkor léphet fel, ha több memóriát rendelnek hozzá, ha a táblázat nem elég nagy az érvényes adatokhoz. A javítást bevezető kódbeküldés itt látható.

Az eredeti kód egy Huffman-dekódert optimalizált, amely egy gyakori technikát használ: több bitet előre olvas, hogy meghatározza, hány bitet kell fogyasztani és milyen szimbólumot kell dekódolni. A régebbi verzió a rövid szimbólumokhoz keresőtáblákat használt, míg a hosszabbakhoz bonyolultabb gráfáttörésre volt szükség. Az újabb verzió ezt a folyamatot egyszerűsítette a keresőtáblák tömbjének alkalmazásával. E táblázat minden egyes bejegyzése bitekre és értékekre vonatkozó adatokat tartalmaz, és ha a bitek száma meghalad egy bizonyos határt, az értéket másképp értelmezi.

Az új verzió a bejegyzések maximális számát a szimbólumok számolásával határozta meg. Mivel azonban a Huffman-fa nem megbízható forrásból származik, előfordulhatnak olyan helyzetek, amikor a bitek száma túl nagy. A VP8 Lossless legfeljebb 15 bitet engedélyez, ami azt jelenti, hogy a legnagyobb táblázatban is sok bejegyzés lehet, több, mint kellene. Érdekes módon, bár a kódban volt egy olyan mód, amely csak a táblázat méretét számította ki, ezt nem használták, és fix méretet feltételeztek, ami potenciális túlcsorduláshoz vezetett.

A változtatások oka a Huffman dekódolási lépés optimalizálása volt, ami a tömörítési formátumok döntő fontosságú és számításigényes része. Bár az optimalizálási technika elismert, a hosszabb kódok általában nem élveznek prioritást, mivel nem gyakran fordulnak elő. Az eredeti kódfrissítés ezzel a vélekedéssel szemben érvelt, és azt elfogadták.

A kiemelt probléma nem olyasmi, amit pusztán egy memóriabiztos nyelv használatával meg lehetne előzni. Ez egy olyan egyedi forgatókönyv, ahol a túlcsordulási ellenőrzések elkerülése kívánatos. Bár a tényleges megoldás nem változtatta meg a ReadSymbol függvényt, a szoros hurok biztonságának biztosítása továbbra is kritikus fontosságú. Az ilyen biztonsági intézkedések helytelen indoklása problémákhoz vezethet.

Javítást tartalmazó verziók:

  • Google Chrome 117.0.5938.88 (Linux és Mac) [megelőzőleg], továbbá 117.0.5938.88/89 (Windows) [megelőzőleg: 116.0.5845.187/188]
  • Microsoft Edge (116.0.1938.81) és iOS 116.1938.79
  • Firefox 117.0.1
  • Firefox ESR 102.15.1
  • Firefox ESR 115.2.1
  • Thunderbird 102.15.1
  • Thunderbird 115.2.2
  • Opera 102.0.4880.46
  • Vivaldi 6.2.3105.47
  • Brave 116.0.5845.188
  • 1Password for Mac frissítés 2023/09/14
  • ChromeOS 108.0.5359.243 (Platform Version: 15183.106.0)

Biztonsági tájékoztatók: