( turdus | 2012. 06. 14., cs – 21:54 )

1. arra, hogy regiszterértékeket másolj. Hol fogod ezzel kideríteni, hogy milyen értékek kellenek?

2. amikor a GP handler végez, és meghívja az iret-et, egy új taskra fog visszakapcsolni, és nem a meghalóra. Így nagyon kevés adatot tudsz használni, másrészről mire is akarod módosítani a GDT-t vagy az IDT pontosan? IDT-vel max a most elhelyezett pár byteba nyomorított kódodra tudsz ugrani (ami persze érvénytelen GDT-IDT-t is jelent egyben), másod ugyanis nincs. Az, hogy emelt privilégiumszinttel visszatérsz a syscall utánni utasításra (amit a "privilege escalation" jelent a címben ugye) eleve ki van csukva.

3. azért, mert a SOMETHING_MALICIOUS bármi lehet, akár kód is. Logikus, hogy valamit akarsz kezdeni az emelt jogaiddal, nemde?

4. pontosan akkor lenne kontrollálható, ha CPU és a GP handler nem mentene egyéb adatot a verembe a GPR-eken kívül, valamint ha az ABI nem használna egy GPR-t se. Mindennek ellenére persze elképzelhető, hogy pont elfér baj nélkül, csak még tovább csökken az injektálható adatmennyiség, és annak az esélye, hogy nem rontasz el valamit injektálás közben.

5. jó, kikényszerítetted. Tovább hogy? Mit módosítasz és mire?

6. ezt tényleg ennyire nem értitek? Ha csak úgy tud egy userspace app memóriát kérni a kerneltől, hogy az beállítja a lapozótáblában az NX bitet, akkor nem lesz futtatható az adott lap, ergo a 7. pont ("Jump to syscall instruction at (1<<47)-2") GPF-et fog okozni még mielőtt a syscall kifejthetné hatását, azaz ez userspace-supervisor váltás, így a CPU a TSS.RSP0 pointerében mutatott vermet fogja használni, és az egész problémakör fel sem merül. Bőven elég, ha a syscall fix helyre mappelt, futtatható lapon van, lásd linux-gate.so.1. Fogadjunk, el sem olvastad az általam linkelt oldal "Security considerations" fejezetét.

Az meg, hogy egy userspace alkalmazás csak adatlapot kérhet, szerintem biztonsági okokból nyilvánvaló. Igazából a dlopen híváson kívül sehol sincs szükség rá, hogy kód mappelést kérjen egy userspace app, ez az egy eset meg könnyen lekezelhető.

Egy szó mint száz, értem az elméletet, de kétlem, hogy a sok limitáció miatt gyakorlatba átültethető lenne, szóval hol a proof of concept? Addig maximum annyit hiszek el, hogy ez a sérülékenység alkalmas egy jó randa DoS-ra.