A Qualys Threat Research Unit (TRU) nemrégiben négy jelentős sebezhetőséget tárt fel a GNU C könyvtárban, amely alapvető alkotóeleme számtalan alkalmazásnak a Linux környezetben.
Mielőtt belemerülnénk a Qualys Threat Research Unit által felfedezett sebezhetőségek részleteibe a GNU C könyvtárban, fontos megérteni ezek eredményeinek szélesebb hatásait és fontosságát. A GNU C könyvtár, vagy röviden glibc, lényeges komponense szinte minden Linux alapú rendszernek, szolgálva az alkalmazások és a Linux kernel közötti alapvető interfészül. A legutóbbi sebezhetőségek felfedezése nem csupán műszaki aggály, hanem széleskörű biztonsági következményekkel járó ügy is.
A glibc a syslog és a qsort funkcióiban azonosított sebezhetőségek kritikus szoftverbiztonsági aspektusokra hívják fel a figyelmet: még a legátfogóbb és legmegbízhatóbb komponensek sem mentesek a hibáktól. Ezeknek a sebezhetőségeknek a következményei messze túlnyúlnak az egyes rendszereken, számos alkalmazást és potenciálisan milliókat érintve világszerte. Ez a cikk azt tűzte ki célul, hogy világossá tegye ezeknek a sebezhetőségeknek a konkrét jellegét, potenciális hatásaikat és azokat a lépéseket, amelyeket a csökkentésük érdekében tettek.
Az első sebezhetőség esetében (CVE-2023-6246) egy jelentős biztonsági hibát azonosítottak a GNU C könyvtár __vsyslog_internal() funkciójában, amely a syslog() és vsyslog() funkciókat érinti. Ez a heap-alapú puffertúlcsordulási sebezhetőség véletlenül került be a glibc 2.37-be (2022. augusztus), majd visszamenőlegesen bekerült a glibc 2.36-ba is, miközben egy másik, kevésbé súlyos sebezhetőséget kezelt (CVE-2022-39046). A Debian (12. és 13. verziók), az Ubuntu (23.04 és 23.10) és a Fedora (37-től 39-ig) nagy Linux disztribúciók megerősítették sebezhetőségüket. Ez a hiba lehetővé teszi a helyi jogosultságemelést, amivel egy nem jogosult felhasználó teljes gyökérhozzáférést szerezhet, ahogy azt a Fedora 38 példája is mutatja.
Elemzésünk során ugyanezen a CVE-2023-6246 által érintett funkción belül két további, bár kisebb sebezhetőséget is azonosítottunk:
- CVE-2023-6779 (glibc): Ez a sebezhetőség az __vsyslog_internal() funkcióban érintett egy-egy helyi puffertúlcsordulást jelent. Ezt a függvényt a syslog és a vsyslog függvények hívják. Ez a probléma akkor jelentkezik, ha ezeket a függvényeket INT_MAX bájtnál nagyobb üzenettel hívják meg, ami az üzenet tárolásához szükséges puffer méretének helytelen kiszámításához vezet, ami az alkalmazás összeomlásához vezet. Ez a probléma a glibc 2.37 és újabb verziókat érinti.
- CVE-2023-6780 (glibc): Ez egy egész túlcsordulási probléma az __vsyslog_internal() funkcióban. Ezt a függvényt a syslog és a vsyslog függvények hívják. Ez a probléma akkor jelentkezik, ha ezeket a függvényeket nagyon hosszú üzenettel hívják meg, ami az üzenet tárolására szolgáló puffer méretének helytelen kiszámításához vezet, ami meghatározatlan viselkedést eredményez. Ez a probléma a glibc 2.37 és újabb verziókat érinti.
Elemzésünk alapján ezeknek a sebezhetőségeknek a kiváltása valószínűleg nehezebb, mint a CVE-2023-6246 esetében. Ezenkívül azok hatékony kihasználása valószínűleg összetettebb.
A cikk további részében a negyedik sebezhetőségre is kitér, amely a GNU C könyvtár qsort() funkciójában található memóriakorrupciós probléma. Ez a hiba hiányzó határellenőrzést okoz, és a qsort() egy olyan esetben válik veszélyessé, amikor egy nem-transzitív összehasonlítási funkciót (például cmp(int a, int b) visszaadva (a - b)) és egy támadó által irányított, jelentős számú elemet használ. Ez a sebezhetőség a glibc 1992. szeptemberi (1.04-es verzió) változatától érinti az összes későbbi kiadást (2.38-as verzióval bezárólag). A glibc fejlesztői már megoldották ezt a problémát egy frissítés során, miután egy másik forrásból származó felfedezés történt a qsort() újratervezése közben. A glibc biztonsági csapata tisztázta, hogy a sebezhetőség oka azoknak az alkalmazásoknak az használata, amelyek nem transzitív összehasonlítási funkciókat alkalmaznak, és nem felelnek meg a POSIX és az ISO C szabványoknak.
A GNU C könyvtár sebezhetőségeinek felfedezése súlyos biztonsági aggodalmakat vet fel. A syslog sebezhetősége, egy heap-alapú puffertúlcsordulás, lehetővé teheti a helyi felhasználók számára a teljes root hozzáférést, súlyosan érintve a legnépszerűbb Linux disztribúciókat. Hasonlóképpen, a qsort sebezhetősége, ami a hiányzó határellenőrzésből adódó memóriakorrupciót eredményezi, valamennyi glibc programkönyvtárat használó eszközt érinti.
A Qualys Threat Research Unit felfedezése rávilágít a szoftverfejlesztés szigorú biztonsági intézkedéseinek kritikus szükségességére, különösen azokban a magjelentőségű könyvtárakban, amelyek széles körben használatosak számos rendszerben és alkalmazásban. Az ilyen alapvető komponensek sebezhetőségeinek az azonosítása és az azokra való reagálás kulcsfontosságú a biztonságos és megbízható informatikai környezetek fenntartásához.