Portál AbcLinuxu, 14. května 2025 17:19
Kdekdo odkazuje na blog CR0, kde pánové Julien Tinnes a Tavis Ormandy představili objevenou bezpečnostní chybu, která se týká všech linuxových jader od května 2001 až do nejnovějších (tj. zahrnuje řady 2.4 i 2.6). "Problém je v tom, jak Linux nakládá s nedostupnými operacemi u některých protokolů. [...] Protože to vede k tomu, že jádro spustí kód na NULL, je ta zranitelnost velmi snadno zneužitelná: Útočník může dát kód do první stránky, která bude spuštěna s právy jádra." Linus zařadil 13.8. patch, který chybu opravuje.
Tiskni
Sdílej:
> Útočník může dát kód do první stránkyAko?
pomocou mapovania do virtualneho adresoveho priestoru na zvolanu virtualnu adresu.
Cize hovorime o ktorej fyzickej adrese? O adresach (dekadicky) 0 - 4095? Ako donutim kernel, aby namapoval moje data zrovna na tuto adresu?
Ja mam pocit, ze hovorime o virtualnej adrese.
( v pripade virtualnej adresy mozme "donutit kernel" pouzitim systemoveho volania mmap/mmap2 )
No, ak hovorime o virtualnej adrese 0 - 4192, tak potom ide pracu s nulovou strankou (ekvivalent prace s odkazom NULL) a to by mal system osetrit, nie? Da sa nejako zapisat data na tieto adresy?
#include <unistd.h> #include <sys/mman.h> #include <string.h> char *code = "\xB8\x4\x0\x0\x0" // mov eax, 0x4 "\xBB\x1\x0\x0\x0" // mov ebx, 0x1 "\xB9\x22\x0\x0\x0" // mov ecx, 0x22 "\xBA\xC\x0\x0\x0" // mov edx, 0xc "\xCD\x80" // int 0x80 "\xB8\x1\x0\x0\x0" // mov eax, 0x1 "\xBB\x0\x0\x0\x0" // mov ebx, 0x0 "\xCD\x80" // int 0x80 "Hello world\n\x0"; int main(int argc, char **argv) { void *ptr; void (*f)(); ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, 0, 0); if( ptr != NULL ) { return -1; } memcpy(NULL, code, 47); f = NULL; f(); return 0; }
A co procesory, ktere maji NX flag, aby se nespoustel kod z datovych stranek?
Coz by melo osetrit tento pripad.
Nebo ne?
Heh a ja som bol vzdy v tom, ze zrovna NULL stranka je osetrovana separatne...
A ako sa to nastavi?
Lebo mne to skonci s UNABLE TO MAP ZERO PAGE
echo 0 > /proc/sys/vm/mmap_min_addr
(platí pro jádra 2.6.23 a vyšší)
Softpedia přínáší i screenshot.
Btw, které z distribucí mají hodnotu vm.mmap_min_addr nastavenou na 0?
$ sysctl vm.mmap_min_addr
vm.mmap_min_addr = 4096
v sidovi
vm.mmap_min_addr = 4096
... na YouTube i s videem
vm.mmap_min_addr = 0
V mandrive bola sice 0 tak som dal 4096.Ked pustim wunderbar_emporium.sh tak mi to je prt platne.
Aj tak ziskam roota
Takze jedine patch alebo novy kernel
+1... Arch je prostě bezpečnější než nějakej Debilan...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.