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. A nyílt forráskódú szoftverek 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.
A Software világszerte szerves részét képezik az üzleti tevékenységeknek, ezért gyakran kerülnek a fenyegetések célpontjai közé. Az alkalmazásbiztonságra fordított kiadások 2023-ban megközelítőleg 5,76 milliárd dollárt tettek ki, és az előrejelzések szerint 2024-ben elérik a 6,67 milliárd dollárt. Az AppSec-en belül a szoftverellátási lánc biztonsága az elmúlt három évben egyre nagyobb hangsúlyt kapott, és a leggyorsabban növekvő támadási kategóriát képviseli, a nagyobb szabálysértések és kihasználások rendszeresen a címlapokra kerülnek.
A szervezetek gyakran feltételezik, hogy a legtöbb kockázat a nyilvános webes alkalmazásokból ered. Ez a szemlélet azonban az elmúlt években megváltozott. Mivel minden alkalmazásban több tucat apró komponens található, a kockázatok ma már a kódbázis bármely pontjáról eredhetnek. Minden eddiginél fontosabb, hogy a szervezetek megismerkedjenek a szoftverfejlesztés életciklusában meglévő és felmerülő biztonsági hibákkal. Ebben a blogbejegyzésben diplomás ösztöndíjasaink közelebbről megvizsgálják a CVE-2023-23924-et, egy kritikus biztonsági hibát, amelyet a széles körben használt dompdf könyvtárban fedeztek fel - egy olyan hatékony PHP-eszközben, amely lehetővé teszi a PDF-dokumentumok dinamikus generálását HTML- és CSS-ből.
Átfogó elemzésen keresztül feltárjuk ennek a sebezhetőségnek a technikai részleteit, a kapcsolódó technológiákat, amelyek döntő szerepet játszanak, valamint a kihasználási folyamat szimulációját. Azt is megvizsgáljuk, hogy OPSWAT MetaDefender Core, különösen annak Software Bill of Materials (SBOM) motorja, felhasználható e sebezhetőség felismerésére és csökkentésére, lehetővé téve a szoftverfejlesztők és a biztonsági csapatok számára, hogy egy lépéssel a potenciális fenyegetések előtt járjanak.
A CVE-2023-23924 háttere
A dompdf 2.0.1-es verziójában biztonsági rést fedeztek fel, amelyet 2023 elején hoztak nyilvánosságra:
- A dompdf 2.0.1 URI-érvényesítés megkerülhető az SVG elemzése során, ha átadjuk a
<image>
címkék nagybetűkkel. Ez lehetővé teszi a támadó számára, hogy tetszőleges URL-eket hívjon meg tetszőleges protokollokkal, ami tetszőleges objektum unializálásához vezet a 8.0.0 előtti PHP verziókban. A PHAR URL wrapper-en keresztül ez a sebezhetőség tetszőleges fájl törlést és akár távoli kódfuttatást is okozhat, az elérhető osztályoktól függően. - Az NVD elemzői 9,8 CRITICAL CVSS pontszámot adtak a CVE-2023-23924-hez.
A Dompdf sebezhetőség megértése
A dompdf-ben található CVE-2023-23924 sebezhetőség teljes megértéséhez elengedhetetlen, hogy megismerkedjünk két, egymással szorosan összefüggő technológiával: Scalable Vector Graphics (SVG) és PHAR fájlok.
Az SVG (Scalable Vector Graphics, skálázható vektorgrafika) egy sokoldalú képformátum, amely széles körű népszerűségre tett szert, mivel képes kiváló minőségű grafikákat megjeleníteni a weben, miközben könnyű és skálázható marad. A raszteres képekkel ellentétben az SVG-k XML-jelölésen alapulnak, ami lehetővé teszi az olyan elemek, mint a vonalak, alakzatok és szöveg pontos vezérlését. Az SVG-k egyik legfontosabb előnye, hogy zökkenőmentesen méretezhetők a képminőség romlása nélkül, így ideálisak a reszponzív webdesignhoz és a nagy felbontású kijelzőkhöz.
A PHAR (PHP Archive) a JAR-fájl koncepcióhoz hasonló, de a PHP számára. Egyszerű telepítést tesz lehetővé azáltal, hogy az összes PHP kódot és erőforrásfájlt egyetlen archív fájlba csomagolja.
A PHAR fájl 4 szakaszból áll:
- Stubs: tartalmazza az archívum bootstrapeléséhez szükséges kódot.
- Manifest: az archívum metaadatait tartalmazza. A metaadatokat szerializált formátumban tárolja, ami felhasználható a PHP deserializált támadás kiváltására egy rosszindulatú PHAR fájlban.
- Fájltartalom: az archívum tartalmát tartalmazza, beleértve a PHP-kódot, erőforrásfájlokat.
- Aláírás (nem kötelező): a fájl sértetlenségét igazoló adatokat tartalmazza.
Mivel a metaadatokat szerializált formátumban tárolják, a PHAR wrapper és a PHAR fájl metaadatainak kombinációja potenciálisan deserializációs támadást válthat ki, amikor a PHP függvények bemenetként használják, mint például a file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
vagy filesize()
. Ez a biztonsági hiányosság lehetővé teheti a támadók számára, hogy távoli kódot hajtsanak végre egy PHAR fájlon keresztül.
Hogyan generál a Dompdf PDF fájlt
az OPSWAT diplomás ösztöndíjasai elemzéssel azonosították, hogy a dompdf-en a konvertálási folyamat három szakaszból áll. Egy HTML-fájl PDF-formátumba való konvertálásához a dompdf könyvtár először a bemeneti fájlt egy DOM-fává elemzi, és tárolja az egyes objektumok pozicionálási és elrendezési információit. Ezután a CSS stíluselemek elemzése és alkalmazása következik minden egyes objektumra. Végül az objektumok átrendeződnek, hogy illeszkedjenek az oldalra, és megjelenítik a végleges PDF-fájlban.
A biztonság fokozása érdekében a dompdf validálást hajt végre az URI-bemenetek biztonságának biztosítása érdekében, mielőtt a következő lépésre lépne. Ez az érvényesítési folyamat nyilvánvaló az SVG fájl feldolgozása során az értéken belül a xlink:href
attribútum.
Ha az SVG bemeneti fájl tartalmazza a <image>
címke alatt a <svg>
címke, egy olyan feltétel van bevezetve, amely csak bizonyos protokollokat engedélyez, mint például a http://
, https://
és file://
, a xlink:href
mező.
A resolve_url()
függvény validálja az URI-t, mielőtt feldolgozza a drawImage()
funkció. Ha az URI-ban szereplő séma nem szerepel az engedélyezett protokollok között, a resolve_url()
függvény egy kivételt küld vissza az alkalmazásnak.
Ha az URI átmegy az érvényesítésen, akkor az átadásra kerül a drawImage()
függvény, amely a file_get_contents()
függvényt az URI érték kezelésére a xlink:href
attribútum. A biztonsági sebezhetőség ezen a ponton merül fel: PHAR deserializációs támadás indulhat, ha a támadó megkerülheti az érvényesítést, és egy PHAR wrappert adhat át az URI-ban.
Az elemzés után kiderült, hogy az érvényesítés csak a pontos névképet tartalmazó címkékre érvényes.
Következésképpen ez könnyen megkerülhető, ha egy vagy több karaktert nagybetűvel írunk a címke nevében, például Image. Ennek eredményeképpen egy speciálisan kialakított SVG fájl, amely Image helyett Image-t használ, megkerülheti ezt az érvényesítést.
A következő lépésben a drawImage()
függvényt hívja meg, átadva az URI-t az SVG fájlból a file_get_contents()
funkció. Ezért az érvényesítés megkerülése és a PHAR-fájl deserializációs támadásának kombinációja lehetővé teszi a támadó számára, hogy távoli kódvégrehajtást hajtson végre. Ez a sebezhetőség megnyitja a lehetőséget egy rosszindulatú támadó számára, hogy egy SVG-fájlon keresztül veszélyeztesse az alkalmazáskiszolgálót, ha azt a dompdf sebezhető verziója kezeli.
Dompdf Exploitation szimuláció
az OPSWAT végzős ösztöndíjasai egy valós forgatókönyvként szimulálták ezt a kihasználást, és kifejlesztettek egy webes alkalmazást, amely a dompdf könyvtár 2.0.1-es verzióját használva HTML-ből PDF-be konvertál. Ez az alkalmazás lehetővé teszi a felhasználók számára, hogy olyan fájltípusokat töltsenek fel, mint a HTML, XML vagy SVG, majd PDF-fájlokká konvertálják őket.
Egy támadó a következő lépéseket követi, hogy kihasználja ezt a sebezhetőséget egy sebezhető dompdf verziót (2.0.1 verzió) használó alkalmazásban:
Először is, a támadó létrehoz egy rosszindulatú objektumot, amely a destruktor meghívásakor fordított héjat hoz létre.
Másodszor, a támadó létrehoz egy PHAR fájlt, amely tartalmazza a rosszindulatú metaadat-objektumot. Amikor a PHAR fájlt a PHAR wrapper meghívja a PHAR-csomagolóban a file_get_content()
függvény hatására a metaadatok nem kerülnek digitalizálásra, és a megadott objektum feldolgozása megtörténik. A deserializálási folyamat során elindítja a destruktorokat, és végrehajtja a fordított héjat.
Végül a támadó a PHAR wrapper-t tartalmazó URI linket beágyazza a PHAR wrapper értékébe. xlink:href
attribútumot az Image tagben, hogy megkerülje az érvényesítést, rosszindulatú kódot hajtson végre, és feltöltse ezt a rosszindulatú fájlt az alkalmazásba.
A feltöltött rosszindulatú SVG-fájl feldolgozása során az alkalmazás fordított kapcsolatot létesít a támadóval, lehetővé téve számára, hogy veszélyeztesse az alkalmazáskiszolgálót.
Nyílt forráskódú komponensek biztosításaz OPSWAT MetaDefender Core
A dompdf-ben található CVE-2023-23924 sebezhetőség észleléséhez és mérsékléséhez diplomás munkatársaink az OPSWAT MetaDefender Core , egy többrétegű kiberbiztonsági terméket használtak, amely fejlett rosszindulatú programok megelőzési és észlelési technológiákat kínál, beleértve az SBOM-ot is.
OPSWAT Az 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. A dompdf könyvtár és függőségeinek elemzésével az OPSWAT SBOM gyorsan azonosítja a sebezhető 2.0.1-es verzió jelenlétét, és figyelmezteti a felhasználókat a potenciális kockázatra.
az OPSWAT SBOM emellett képes felismerni a kapcsolódó technológiákat, például az SVG és PHAR fájlokat, amelyek elengedhetetlenek a CVE-2023-23924 sebezhetőség megértéséhez és enyhítéséhez. Az alkalmazás szoftverkomponenseinek ez a holisztikus áttekintése lehetővé teszi a biztonsági csapatok számára, hogy megalapozott döntéseket hozzanak, és megfelelő intézkedéseket tegyenek az azonosított kockázatok kezelésére.
A sebezhető dompdf-verzió észlelésén túl az OPSWAT SBOM értékes információkat nyújt az érintett komponensekről, azok verzióiról és az elérhető frissítésekről vagy javításokról is. Ez az információ lehetővé teszi a biztonsági csapatok számára, hogy prioritást adjanak a javítási erőfeszítéseiknek, és biztosítsák, hogy az alkalmazást a dompdf biztonságos verziójára frissítsék, hatékonyan kezelve a CVE-2023-23924 sebezhetőséget.
A MetaDefender Core oldalon található SBOM motor segítségével a szervezetek proaktívan nyomon követhetik szoftverellátási láncukat, azonosíthatják a nyílt forráskódú komponensek potenciális sebezhetőségeit, és időben alkalmazhatnak enyhítési stratégiákat, biztosítva ezzel alkalmazásaik általános biztonságát és integritását.
Záró gondolatok
A CVE-2023-23924 felfedezése a dompdf könyvtárban aláhúzza az éberség kritikus szükségességét az alkalmazásbiztonság dinamikus tájékán. Az ebben a blogbejegyzésben felvázolt meglátások és stratégiák felhasználásával a biztonsági csapatok hatékonyan észlelhetik, mérsékelhetik és védhetik alkalmazásaikat az ilyen sebezhetőségekkel szemben, biztosítva ezzel a szoftver ökoszisztémájuk általános biztonságát és integritását.