CVE-2020-7460: FreeBSD local root exploit technikai elemzés

Címkék

Nemrég a FreeBSD projekt egy local root sebezhetőséget (CVE-2020-7460) javított. A ZDI blogjában ízekre szedte és technikailag elemzete:

In August, an update to FreeBSD was released to address a time-of-check to time-of-use (TOCTOU) bug that could be exploited by an unprivileged malicious userspace program for privilege escalation. This vulnerability was reported to the ZDI program by a researcher who goes by the name m00nbsd. He has graciously provided this write-up and proof-of-concept code detailing ZDI-20-949/CVE-2020-7460.

A blogbejegyzés itt olvasható. 

Hozzászólások

Ez kökemény IT. Szerintem 100 IT-sból 90-en nem is értik. Vagy ha értik, sosem jönnének egy ilyenre rá. Magamat is a 90-be sorolom.

robyboy

Azért szerintem nem vészes a doksi. Annyira nem túloznék legalábbis, hogy 90% ne értse. Félre ne érts, magamtól én se jönnék rá ilyenre, de erre vannak már automatizált tesztelési megoldások, támadásra, meg kernelfoltozásra is, aki ezzel foglalkozik, az simán megtanulja ezeket egy idő után. Ugyanis ennek sablontechnikái vannak, egy kaptafára megy a legtöbb ilyen sérülékenység, userlandből indul egy kód, de valahol a memóriában buffertúlcsordulást okoz, és így sikerül kódot írnia saját területen kívülre, lehetőleg valami privilegizált területre, oda pedig kódot betéve magasabb jogszintről kód futtatása válik lehetővé.

“I didn’t start using Linux so I could have friends.” (Luke Smith, 2019) 🐧

Eleve twitteren az information security népek mind fuzzer-t írkálnak vagy basztatnak, másról sem szólnak a feed-jeik. A fuzzer az nagyon leegyszerűsítve (én se szagolok ám a témához 1 pöttyet sem!) mindenféle megadott szabályok alapján generált "randomszemét" input-al bombázza a kinézett programot v. kernel hívás funkciót. Ha sikerül crash-eltetni, akkor ott jobban utánanéznek, és fókuszálnak arra a területre, ahol a crash történt. Addig csűrik csavarják a randomgeneráltszemét paramétereit, amíg reprodukálható nem lesz a crash. Innentől meg lehet menni az exploit írás irányába, aztán értékesíteni a P0-nak, vagy darkweb oldalakon az alvilág patkányainak.

Évente sikerül találni 2-3 remote code executable bugot, darabját eladni 100 ezer dodóért, "tisztességes" megélhetés hekkeréknek.

Ez a kódelhelyezés hogyan történik?

 

Külön memória területen van az adat, a verem és a kód. Az adat és a verem írható, a kód nem. Az adat területen és a veremben a futtatást kell tiltani.

 

Ezt kijátsszák valahogy? Vagy nincs tiltva a kód futtatása adat területen? Nem értem, hogy ez hogyan probléma.

 

A legtöbb processzor képes külön kezelni a különféle memória lapokat.

De, tiltva van a kód futtatása saját területen kívül, de ezt játsszák ki azzal, hogy az adatok és verem tárolására szolgáló memóriarészt írják túl, és valami rendszerszintű folyamatot piszkálnak meg, vesznek rá, hogy az oda elhelyezett adatot kódként futtassa, vagy azokon valami olyat hajtson végre, amihez az alkalmazásnak simán nem lenne joga. Ennek a technikának már szakálla van, már vagy kb. 20 éve ezzel törnek a legtöbb mindent. Ha érdekel a téma, menj el egy etikus hekkerképzésre, vagy valami ezzel foglakozó könyvet olvass el, jó nagy szakirodalma van a témának. Fekete mágiának tűnik, de annyira azért nem nagy ördöngösség.

“I didn’t start using Linux so I could have friends.” (Luke Smith, 2019) 🐧