A közelmúltban nyilvánosságra hoztak egy kritikus sebezhetőséget a Gitben, amely RCE (távoli kódfuttatás) támadásokat tesz lehetővé, és a Git és a Microsoft Visual Studio 2017 több verzióját érinti. A sebezhetőség lehetővé teszi a támadók számára, hogy almodulok segítségével manipulálják a Git adattárakat, kihasználva a Git egy olyan hibáját, amely lehetővé teszi, hogy az almodul munkafáján kívülre, a .git/ könyvtárba írjanak fájlokat. Ez a hiba lehetővé teszi egy rosszindulatú hook végrehajtását, miközben egy tároló klónozási művelet még fut [1].
A CVE-2024-32002 sebezhetőség a Microsoft Visual Studio 2017 15.9-es verzióját és a 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 és 2.39.4 verziónál korábbi Git verziókat érinti. A hiba kihasználható olyan környezetben, ahol a szimbolikus linkek támogatása engedélyezve van a nagy- és kisbetűket nem érzékelő operációs rendszereken.
A Git megértése
A Git egy ingyenes és nyílt forráskódú elosztott verziókezelő rendszer, amelyet arra terveztek, hogy segítse a szoftverfejlesztőket a kódbázisok gyors és hatékony kezelésében. Fokozza a fejlesztőcsapat tagjai közötti együttműködést azáltal, hogy szabványosított, strukturált módon szervezi és követi a fájlok és könyvtárak változásait.
A Git-et széles körben használják a szoftverfejlesztésben. Az olyan platformok, mint a GitHub, a GitLab és a Bitbucket a Gitre épülnek, hogy erős funkcióinak köszönhetően javítsák a fejlesztők közötti együttműködést:
- A kódfájlok nyomon követhető változásainak rögzítése, az úgynevezett commitok.
- Szükség esetén a kódszerkesztések visszaállítása korábbi verziókra.
- A különböző ágaktól vagy közreműködőktől származó módosítások hatékony kombinálása.
- Az előzmények nyilvántartása arról, hogy ki és mikor hajtott végre változtatásokat.

Git horgok
Amikor egy Git-tárat létrehozunk vagy klónozunk a git init vagy a git clone parancsok segítségével, a munkafa gyökerében létrejön egy .gitkönyvtár. A .git könyvtár könyvtárszerkezete kezdetben így néz ki:
A Git hooks futtatható szkriptek, amelyek vagy a .git/hooks könyvtárban, vagy a .git/modules/module_type/module_name/hooks könyvtárban találhatók. A horgok automatikusan elindulnak, amikor bizonyos események történnek a Git-tárban.
Ha a hooks könyvtárban lévő fájl nem rendelkezik .sample utótaggal, akkor a fájlban lévő parancsok a fájl nevében szereplő adott Git-akció előtt vagy után kerülnek végrehajtásra, például a pre-commit, post-commit és post-checkout.
Git almodulok
A Git-almodul egy olyan rekord egy Git-tárban, amely egy külső tárban lévő konkrét commitra hivatkozik. Amikor egy almodul hozzáadódik egy adattárhoz, a .gitmodules könyvtárban egy új fájl jön létre az almodul URL címe és a helyi könyvtár közötti leképezés metaadataival. Ha egy tároló több almodulból áll, a .gitmodules fájl mindegyikhez tartalmaz egy-egy bejegyzést. [3]
Szimbolikus hivatkozások (Symlinks)
A szimbolikus hivatkozás, más néven szimlink vagy lágy hivatkozás egy olyan fájl, amely egy másik fájlra vagy könyvtárra (a továbbiakban "cél") mutat annak elérési útvonalának megadásával. Ha egy szimbolikus linket törölnek, a célpontja érintetlen marad. [4]
A Symlink a Gitben egy olyan fájlként jön létre, amely metaadatokkal van ellátva, hogy hivatkozásként vagy rövidítésként működjön egy másik fájlhoz. A Symlinkek segítségével több hivatkozást lehet létrehozni egy fájlra anélkül, hogy annak tartalma megismétlődne.
GIT biztonsági sebezhetőségi elemzés
Foltelemzés
A biztonsági sebezhetőségek mélyebb megértése érdekében a biztonsági szakemberek gyakran végeznek javításelemzést. Ez egy olyan technika, amely segít azonosítani a sebezhető funkciókat és a potenciális támadási vektorokat. Az OPSWAT munkatársai megvizsgálták a javított verzióban a CVE-2024-32002 sebezhetőség kezelése érdekében végrehajtott változtatásokat, és megállapították, hogy két fájlt frissítettek a CVE kezelése érdekében.
Az egyik frissített fájl a submodule--helper.c fájl, amely a Git almodulok klónozását kezelő kódot tartalmazza. Az új commit a javított verzióban a következő kettőt tartalmazta:
- A dir_contains_only_dotgit függvény hozzáadása annak biztosítására, hogy a submodules könyvtár ne tartalmazzon .git fájlokat vagy könyvtárakat.
- Változások történtek a clone_submodule() függvényben, hogy a függvény tartalmazzon egy olyan feltételt, amely ellenőrzi, hogy az almodul könyvtár létezik-e és üres-e. Ha a könyvtár nem üres, a klónozási folyamat megszakad.
A második frissítés az új commitban a t/t7406-submodule-update.sh fájlban volt, amely egy tesztszkriptet ad hozzá, amely ellenőrzi, hogy a biztonsági rés megoldódott-e.
Az elemzéstől a hasznosításig
A javításelemzésből és a CVE-2024-32002 sebezhetőség leírásából nyert ismereteken túlmenően OPSWAT ösztöndíjasai a Symlinkek és almodulok munkafolyamatának vizsgálatán dolgoztak a Gitben. Feltörték az eseménysorozatot, amely akkor történik, amikor egy felhasználó klónoz egy tárat:
- A Git a fájlok és könyvtárak letöltésével kezdődik az elsődleges tárolóból.
- A szimlinkfájlokban megadott definíciókat használja fel a megfelelő szimlinkek újbóli létrehozásához a helyi fájlrendszerben.
- Ha a szimlink egy létező fájlra mutat, a szimlink működőképes lesz; ellenkező esetben a szimlink nem működik, amíg a cél helyreállítása meg nem történik.
- Ha a tárolót a --recursive opcióval klónozzuk, a Git klónozza az almodulokat (külső tárolók), és a .gitmodules fájlban megadott könyvtárakba helyezi őket.
- Ha egy szimlink része az almodul elérési útvonalának (például util/module/test, ahol util egy másik könyvtárra mutató szimlink, például symlink_folder), a Git az almodul tartalmát a szimlink által hivatkozott tényleges könyvtárban tárolja (például symlink_folder/module/test), miközben a hozzáférést az eredeti szimlink elérési útvonalon keresztül engedélyezi.
A CVE-2024-32002 Git biztonsági rés megértése
Rosszindulatú tárolók létrehozása
OPSWAT munkatársai tovább vizsgálták a rosszindulatú tárolók létrehozását at/t7406-submodule-update.sh fájlhoz készült frissítések alapján, és ezt a folyamatot a következő lépésekre bontották:
- Kijelentkezés utáni horgot tartalmazó tároló létrehozása
- Egy másik tároló létrehozása, amely tartalmaz egy almodult, és az A/modules/x elérési útvonalon található. Az új almodul hivatkozik a korábban létrehozott tárolóra.
- Egy a nevű szimbolikus link létrehozása, amely a .git mappára mutat a Git indexben.
A biztonsági hiba megértése
Amikor a felhasználó az előző lépésben létrehozott rosszindulatú tárolót klónozza az --recursive opció használatával, a checkout utáni kampó rosszindulatú szkriptje elindul, lehetővé téve a támadó számára, hogy veszélyeztesse a felhasználó eszközét.
Ez a távoli kódfuttatás azért következik be, mert a fő adattár egy a nevű szimbolikus linket észlel, amely klónozáskor a .git könyvtárra mutat. A rekurzív mód engedélyezésével az almodulok is bekerülnek a klónozott tárolóba. Ez a tároló tartalmaz egy hooks mappát, amely a post-checkout hook scriptet tartalmazza, és a helyi könyvtára az A/modules/x könyvtárban van.
Mivel az a a.git könyvtárra mutat, és a fájlrendszer nem érzékeli a nagy- és kisbetűket, az A-t az a-val egyenértékűnek értelmezi. A Git félrevezetve írja a post-checkout hook szkriptet a .git/modules/query/fast/hooks/ könyvtárba. Ha a . git/modules/{module_type}/{module_name}/hooks mappában található egy post-checkout hook szkript, akkor az elindul a fő adattár klónozásakor a --recursive opcióval. Ennek eredményeként a támadók sikeresen kompromittálhatják a felhasználó eszközét távoli kód futtatásával.
A Git sebezhetőség kihasználásának szimulálása
A korábbi megállapítások alapján OPSWAT munkatársai létrehoztak egy fő adattárat és egy kampót egy rosszindulatú adattár létrehozásának szimulálására:
- Kezdetben ajánlott úgy beállítani a Gitet, hogy mindig engedélyezze a protocol.file-t, engedélyezze a core.symlinkeket, és az alapértelmezett ág nevet main-ra állítsa be (a figyelmeztető üzenet elkerülése érdekében).
- Egy rosszindulatú post-checkout hook script kerül a hooks könyvtárba. Annak biztosítása érdekében, hogy a post-checkout szkriptet a felhasználó eszközén végre lehessen hajtani, a bash szkript, amely létrehozza ezt a horgot, a chmod +x fast/hooks/post-checkout parancsot tartalmazza.
- Egy szimbolikus link jön létre a fő adattárban, amely a .git könyvtárra mutat.
A /hooks mappa egy post-checkout horoggal
Helyreállítás
A fenyegetés semlegesítése érdekében a felhasználók eltávolíthatják a Git-et, vagy alkalmazhatják a legújabb biztonsági javítást. Alternatív megoldásként egy olyan megoldás, mint a MetaDefender Endpoint azonnal értesíti a felhasználót, és intuitív felületén keresztül megjeleníti a környezetben található összes ismert CVE-t. A MetaDefender Endpoint a több mint 3 millió adatpontot és több mint 30 000 társított CVE-t tartalmazó képességeit kihasználva képes felismerni és mérsékelni a legújabb CVE-ket a súlyossági információkkal együtt. Bármelyik ellenintézkedés végrehajtásával a CVE teljes mértékben elszigetelhetővé válik, megszüntetve a pusztító kibertámadás kockázatát.
Készen áll arra, hogy a MetaDefender Endpoint a kiberbiztonsági stratégiája első vonalába helyezze?