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:
-
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.
-
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.
-
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:
- CONFIRM:https://github.com/webmproject/libwebp/releases/tag/v1.3.2
- URL:https://www.debian.org/security/2023/dsa-5496
- URL:https://www.debian.org/security/2023/dsa-5497
- URL:https://www.debian.org/security/2023/dsa-5498
- URL:https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/PYZV7TMKF4QHZ54SFJX54BDN52VHGGCX/
- URL:https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/6T655QF7CQ3DYAMPFV7IECQYGDEUIVVT/
- URL:https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/WHOLML7N2G5KCAZXFWC5IDFFHSQS5SDB/
- URL:https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/OZDGWWMJREPAGKWCJKSCM4WYLANSKIFX/
- URL:https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/FYYKLG6CRGEDTNRBSU26EEWAO6D6U645/
- URL:https://security.gentoo.org/glsa/202309-05
- MISC:https://adamcaudill.com/2023/09/14/whose-cve-is-it-anyway/
- MISC:https://bugzilla.suse.com/show_bug.cgi?id=1215231
- MISC:https://en.bandisoft.com/honeyview/history/
- MISC:https://github.com/webmproject/libwebp/commit/902bc9190331343b2017211debcec8d2ab87e17a
- MISC:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-4863
- MISC:https://news.ycombinator.com/item?id=37478403
- MISC:https://security-tracker.debian.org/tracker/CVE-2023-4863
- MISC:https://stackdiary.com/critical-vulnerability-in-webp-codec-cve-2023-4863/
- MISC:https://www.bleepingcomputer.com/news/google/google-fixes-another-chrome-zero-day-bug-exploited-in-attacks/
- MISC:https://www.mozilla.org/en-US/security/advisories/mfsa2023-40/
- MISC:https://chromereleases.googleblog.com/2023/09/stable-channel-update-for-desktop_11.html
- URL:https://chromereleases.googleblog.com/2023/09/stable-channel-update-for-desktop_11.html
- MISC:https://crbug.com/1479274
- URL:https://crbug.com/1479274
- URL:https://lists.debian.org/debian-lts-announce/2023/09/msg00015.html
- URL:https://lists.debian.org/debian-lts-announce/2023/09/msg00016.html
- URL:https://lists.debian.org/debian-lts-announce/2023/09/msg00017.html