A technológia gyors fejlődése nagy keresletet teremtett a képzett fejlesztők iránt. A nyílt forráskódú szoftverek (OSS) létfontosságú eszközzé váltak e növekvő munkaerő számára. Ma már több százezer jól bevált OSS csomag létezik különböző programozási nyelveken. A fejlesztők több mint 90%-a használja ezeket a nyílt forráskódú komponenseket saját fejlesztésű alkalmazásaiban, ami rávilágít az OSS hatékonyságára és értéknövelő hatására. Fontosságát tovább hangsúlyozza, hogy az OSS globális piaca 2030-ra várhatóan eléri a 80,7 milliárd dollárt, ami évi 16,7%-os növekedési ütemet jelent.
Az OSS széles körű elterjedése azonban a komplexitás egy új rétegét is bevezeti: a biztonsági sebezhetőségeket. Az egymással összekapcsolt OSS-összetevők nagy száma szélesebb támadási felületet teremt a rosszindulatú szereplők számára. A különböző OSS-csomagok közötti függőségek kezelése összetett lehet, ami megnehezíti a sebezhetőségek gyors azonosítását és javítását. Emellett az OSS biztonsága gyakran a fejlesztői közösség éberségén és hozzájárulásán múlik. Ez a sebezhetőségek javításának késedelméhez vezethet, különösen a kevésbé népszerű projektek esetében.
Ebben a cikkben OPSWAT diplomás ösztöndíjasai a CVE-2023-33733 biztonsági hibát vizsgálják, amelyet a népszerű nyílt forráskódú ReportLab könyvtárban fedeztek fel. Elemzésüket egy szimulált támadással párosítják, amely kihasználja a MetaDefender Core a Software Bill of Materials (SBOM) képességek segítségével azonosítja a sebezhetőségeket az alkalmazás függőségeiben, beleértve a sebezhető ReportLab könyvtárat is.
Reportlab Könyvtár Bevezetés
A ReportLab, egy hatékony és nyílt forráskódú Python-könyvtár, amely lehetővé teszi a felhasználók számára, hogy Python-kódból funkciókban gazdag PDF-eket hozzanak létre. A fejlesztőknek nyerő kombinációt kínál: rugalmasságot, egyszerű használatot és széleskörű testreszabási lehetőségeket a dinamikus dokumentumok létrehozásához. A könyvtár a fejlesztők számára fokozott ellenőrzést biztosít a PDF-jeik felett, lehetővé téve a szöveg, képek, táblázatok és diagramok aprólékos pontossággal történő beépítését. Ez a testreszabási szint teszi a ReportLabot értékes eszközzé a dinamikus dokumentumok, például számlák és adatvezérelt jelentések létrehozásához.
CVE-2023-33733 Háttér
A CVE-2023-33733 a ReportLab könyvtárban található biztonsági résre hívja fel a figyelmet, amely a ReportLab könyvtár több verzióját is érinti.
- A ReportLab 3.6.13 verzió előtti verziókról kiderült, hogy sebezhetőek a sandbox megkerülésével szemben, különösen a
'rl_safe_eval'
funkció. A kihasználás a HTML-címkék szín attribútumán keresztül történt, amelyet közvetlenül Python-kifejezésként értékeltünk ki, aeval()
funkciót, ami végül távoli kódfuttatáshoz vezet. - Az NVD elemzői 7,8 HIGH CVSS pontszámot adtak a CVE-2023-33733-nak.
A ReportLab biztonsági sebezhetőségének elemzése
OPSWAT diplomás ösztöndíjasai mélyreható elemzést végeztek a ReportLab munkafolyamatáról, és azonosították a CVE-2023-33733 biztonsági rés kiváltó okát.
A ReportLab lehetővé teszi a fejlesztők számára a PDF-ek hatékony létrehozását. A könyvtár lehetővé teszi a könnyed integrációt: importálja a könyvtárat, határozza meg a HTML-tartalmat, és egyetlen sor kóddal generálja a PDF-et az eredményfüggvény segítségével.
Végzett ösztöndíjasaink felfedtek egy 5 lépésből álló folyamatot, amelynek segítségével a ReportLab segítségével HTML-ből PDF-eket készíthetünk.
A ReportLab segítségével HTML-ből PDF-eket készítő 5 lépéses folyamaton belül három fő folyamat emelkedik ki: a bekezdésfeldolgozás, a paraparser-feldolgozás és a HTML-kezelési folyamat.
Ahogy a fenti ábra is mutatja, a ReportLab HTML-kezelési folyamata a eval()
funkciót kifejezetten a szín attribútumra. A rosszindulatú kód fókuszpontjaként szolgálva a rosszindulatú kód végrehajtásához, a eval()
funkció arra ösztönzi a kutatókat, hogy az alkalmazás kihasználása érdekében keressék a bemenet feletti ellenőrzést. Ez azonban kihívást jelent a homokozó által kikényszerített sandbox miatt. __rl_safe_eval__
funkciót a ReportLabban.
A ReportLab bevezetett egy sandbox nevű __rl_safe_eval__
. Ez a homokozó kizárja az összes beépített Python függvényt, és számos felülírt beépített függvényt tartalmaz. Ez a korlátozás lehetővé teszi a biztonságos kód végrehajtását a könyvtáron belül, miközben megakadályozza a veszélyes függvényekhez és könyvtárakhoz való hozzáférést, amelyek rosszindulatú célokra használhatók (pl. fájlrendszer-hozzáférés, hálózati kommunikáció).
A rl_safe_eval
sandbox függvény különböző feltételeket valósít meg annak biztosítására, hogy a meghívott attribútum biztonságos legyen, mielőtt a Python beépített getattr()
függvényt, hogy lekérje és visszaadja az eredményt.
A safe eval funkció célja a környezet védelme a veszélyes funkciók kizárásával és a rosszindulatú műveletek megakadályozásával. Ha azonban módot találunk arra, hogy megkerüljük a feltételeit, és hozzáférjünk egy erős beépített függvényhez, akkor ez kihasználható.
Erre az ötletre építve a biztonsági kutatók megpróbálták megkerülni a korlátozásokat. Kezdetben objektum injekciót használtak ki a type()
függvény egy objektum létrehozására és attribútumainak és metódusainak újradefiniálására, hogy megkerülje az ellenőrzéseket a __rl_safe_eval__
. Továbbá, mivel a ReportLab könyvtár felülírja a beépített függvényeket, és azokat globálisan az eval kontextusba helyezi, a kutató kihasználhatja ezt a megvalósítást, hogy hozzáférjen az eredeti beépített függvények egyikéhez. Ez lehetővé teheti a sandbox környezet megkerülését és rosszindulatú kód futtatását.
A hasznos terhet a következőképpen készítik elő:
Mindazonáltal egy többsoros kifejezés végrehajtása eval-kontextusban nem lehetséges. Azonban egy listamegértési trükköt lehet alkalmazni, és a CVE kihasználásához szükséges hasznos teher a következő:
ReportLab Exploitation szimuláció
A kutatók a CVE-2023-33733-ra vonatkozó Proof of Conceptet (POC) tettek közzé, amely bemutatja, hogy a ReportLab sebezhető verzióival épített alkalmazások kibertámadásoknak lehetnek kitéve. E potenciális fenyegetés felmérése érdekében az OSPWAT diplomás ösztöndíjasai szimulált támadást hajtottak végre egy webes alkalmazás ellen. A MetaDefender Core SBOM képességekkel használták fel az alkalmazás szoftverfüggőségein belüli biztonsági sebezhetőségek azonosítására, beleértve az érintett ReportLab könyvtár jelenlétét is.
E kihasználás valós forgatókönyvként történő szimulálása érdekében OPSWAT diplomás ösztöndíjasai Python és a ReportLab könyvtár sebezhető verziójának felhasználásával webes alkalmazást fejlesztettek ki. Ez az alkalmazás egy tipikus felhasználási esetet imitál: a felhasználók feltölthetnek egy HTML-fájlt, és átalakíthatják azt PDF-fájllá.
Egy támadó rosszindulatú HTML fájlt készíthet, amely a következő kódot tartalmazza 33733. Ez a kód megkerülheti a homokozót és kompromittálhatja a webkiszolgálót a fordított shell indításával a eval()
funkció.
A rosszindulatú fájl sikeres feltöltése lehetővé tenné a támadó számára, hogy átvegye az irányítást az alkalmazáskiszolgáló felett az elavult ReportLab könyvtár sebezhetőségének köszönhetően.
A SBOM és a proaktív biztonság fontossága
Az OPSWAT diplomás ösztöndíjasainak a CVE-2023-33733-mal kapcsolatos kutatása kiemeli az OSS-sel kapcsolatos potenciális biztonsági kockázatokat. Bár az OSS tagadhatatlan előnyöket kínál a fejlesztés hatékonysága és költséghatékonysága szempontjából, a ReportLabban talált sérülékenységekhez hasonló sebezhetőségek kiszolgáltatottá tehetik a szervezeteket a kibertámadásoknak.
OPSWAT SBOM a forráskód és a konténerek átfogó komponensleltárának biztosításával biztosítja a szoftverellátási láncot. Több mint 10 nyelvet támogat, köztük a Java, JavaScript, Go, PHP és Python nyelveket, több mint 5M+ harmadik féltől származó nyílt forráskódú szoftverkomponenseket, és egy több mint 17K sebezhetőséget tartalmazó adatbázist használ, amely a National Vulnerability Database (NVD) és a GitHub (GHSA) adatbázisából származik.
Az OPSWAT MetaDefender Core integrált SBOM funkcióival képessé teszi a szervezeteket arra, hogy proaktívan kezeljék ezeket a kockázatokat. A MetaDefender Core átvizsgálja a szoftveralkalmazásokat és függőségeket, és azonosítja az olyan ismert sebezhetőségek jelenlétét, mint a CVE-2023-33733 a felsorolt összetevőkben. Ez lehetővé teszi a fejlesztők és a biztonsági csapatok számára a javítási erőfeszítések rangsorolását és a biztonsági kockázatok mérséklését, mielőtt azok kihasználhatók lennének.
Záró gondolatok
Az OPSWAT diplomás ösztöndíjasainak a ReportLab sebezhetőséggel (CVE-2023-33733) kapcsolatos kutatása értékes emlékeztetőül szolgál a proaktív biztonsági intézkedések fontosságára a szoftverfejlesztés életciklusában. Az olyan eszközök, mint az OPSWAT MetaDefender Core kihasználásával a szervezetek döntő fontosságú betekintést nyerhetnek szoftverfüggőségeikbe, és azonosíthatják a potenciális sebezhetőségeket, mielőtt azokat a támadók kihasználnák.
Az OPSWAT emellett a sebezhetőségi vizsgálatokon túlmenően átfogó kiberbiztonsági megoldásokat is kínál. Ezek a megoldások valós idejű fenyegetésérzékelést, adatbiztonságot és végpontvédelmet biztosítanak, megvédve a szervezeteket a kiberfenyegetések széles körétől. A MetaDefender Core hasonló eszközöket is tartalmazó többszintű biztonsági megközelítés elfogadásával a szervezetek kihasználhatják az OSS előnyeit, miközben minimalizálhatják a kapcsolódó biztonsági kockázatokat.