
Nemrég nyilvánosságra került egy kritikus biztonsági rés a Gitben, amely RCE (távoli kódfutás) támadásokat tesz lehetővé, és amely a Git több verzióját, valamint a Microsoft Visual Studio 2017-et is é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-tárolókat, kihasználva a Git egy olyan hibáját, amely lehetővé teszi, hogy fájlokat írjanak az almodul munkakönyvtárán kívülre, a .git/ könyvtárba. Ez a hiba lehetővé teszi egy rosszindulatú hook végrehajtását, miközben a tároló klónozási művelete még folyamatban van [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 hozunk létre vagy klónozunk a `git init` vagy a ` git clone ` parancsok segítségével, a munkatér gyökérkönyvtárában létrejön egy `.git` kö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 szakértők gyakran végeznek javításelemzést. Ez egy olyan technika, amely segít azonosítani a sebezhető funkciókat és a lehetséges támadási vektorokat. Az „ OPSWAT ” program résztvevői megvizsgálták a CVE-2024-32002 sebezhetőség kijavítására a javított verzióban végrehajtott változtatásokat, és megállapították, hogy két fájlt frissítettek ennek a CVE-nek a kijavítása é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 Symlinkek és almodulok munkafolyamatainak elemzése a Gitben
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 utal, és a fájlrendszer nem különbözteti meg a kis- és nagybetűket, az „A” karaktert az „a” karakterrel egyenértékűnek értelmezi a rendszer. Ezáltal a Git tévesen a .git/modules/query/fast/hooks/ könyvtárba írja a post-checkout hook szkriptet. Ha a .git/modules/{module_type}/{module_name}/hooks mappában található egy post-checkout hook szkript, az akkor aktiválódik, amikor a fő tárolót a --recursive opcióval klónozzák. Ennek eredményeként a támadók távoli kód futtatásával sikeresen megfertőzhetik a felhasználó eszközét.

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 Git-et, hogy mindig engedélyezze a protocol.file fájlt, aktiválja a core.symlinks beállítást, és az alapértelmezett ág nevét main-re á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.




Helyreállítás
A fenyegetés semlegesítéséhez a felhasználók eltávolíthatják a Git programot, vagy telepíthetik a legújabb biztonsági javítást. Alternatív megoldásként egy olyan eszköz, mint az MetaDefender Endpoint , az intuitív felületén keresztül azonnal értesítheti a felhasználót, és megjelenítheti a környezetben található összes ismert CVE-t. Az MetaDefender Endpoint több mint 3 millió adatpontot és több mint 30 000 súlyossági információval ellátott kapcsolódó CVE-t felhasználva képes felismerni és enyhíteni a legújabb CVE-ket. Bármelyik ellenintézkedés végrehajtásával a CVE teljes mértékben kézben tarthatóvá válik, kiküszöbölve ezzel 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?
Hivatkozások
(1) https://nvd.nist.gov/vuln/detail/CVE-2024-32002
(3) https://www.atlassian.com/git/
(4) Szimbolikus kapcsolat - Wikipedia
(5) https://www.vicarius.io/vsociety/posts/exploiting-git-rce-cve-2024-32002
