image

Linux-lek fascineert hackers

zaterdag 18 juli 2009, 12:21 door Redactie, 13 reacties

Beveiligingsonderzoeker Brad Spengler heeft een aanval ontwikkeld die zelfs op de best beveiligde Linux distributie werkt, maar volgens sommigen is het een van Unix afkomstige ontwerpfout. Bojan Zdrnja van het Internet Storm Center is gefascineerd door het lek, omdat een audit van de broncode het nooit had blootgelegd. "Het is mogelijk, maar ik verzeker je dat bijna iedereen het zou missen." De kwetsbaarheid zit in verschillende onderdelen van Linux, waaronder die de net/tun functies implementeert. De code controleert of de tun variabele niet naar NULL wijst, maar de compiler verwijdert deze regels tijdens de optimalisatie routine. Als de variabele naar nul wijst, probeert de kernel toegang tot afgeschermd geheugen te krijgen, waardoor een aanvaller het systeem kan overnemen.

De "NULL pointer dereference" bug is aanwezig in versies 2.6.30 en 2.6.30.1 van de Linux kernel, die alleen in versie 5 van Red Hat Enterprise Linux aanwezig zijn. De exploit werkt alleen als de Security-Enhanced Linux extensies zijn ingeschakeld, of als de PulseAudio software is geïnstalleerd. Volgens Bas Alberts, beveiligingsonderzoeker bij Immunity, probeerden Linux-ontwikkelaars tegen het lek te beschermen, maar laat de exploit zien dat zelfs als alle beveiliging op z'n hoogst staat, het nog steeds mogelijk is voor een aanvaller om dit te omzeilen. Met name de manier waarop het lek ontstaat vindt Alberts interessant, maar noemt het ook zeer ernstig. De aanval werkt niet op afstand en geeft een aanvaller de mogelijkheid om zijn rechten te verhogen, om vervolgens als root code uit te voeren.

Setuid
Sprengler besloot zijn exploit te publiceren omdat Linus Torvalds en andere Linux kernel-ontwikkelaars de fout in de code niet als een beveiligingsrisico zagen. "Zoals ik het zie is het geen kernelprobleem. Hij draait een setuid programma waarmee gebruikers hun eigen modules kunnen specificeren. En dan zijn mensen verrast dat hij lokaal root krijgt?", aldus Torvalds. Die krijgt bijval van Robert Graham van Errata Security. Hij merkt op dat setuid een "chronisch" beveiligingsprobleem is. "Torvalds heeft gelijk, dit is geen kernelprobleem, maar een ontwerpfout afkomstig van Unix. Er is geen makkelijke oplossing voor het probleem, dus het zal nog jaren bij ons blijven." Toch wil Sprengler met zijn exploit aantonen dat Linux-ontwikkelaars gebruikers risico laten lopen door niet duidelijk te melden wanneer beveiligingslekken zijn ontdekt. Een oplossing zou via deze link beschikbaar zijn.

Reacties (13)
18-07-2009, 14:23 door ahimza
en ik maar denken dat ik veilig was met m'n Gentoo............
18-07-2009, 15:00 door Anoniem
Ik had dit al dus verwacht. Ik had al gemeld dat er lekken in Linux zitten. Dit is echt niet de enige.
Sectrust.ams.osd
18-07-2009, 15:18 door Eerde
Door ahimza: en ik maar denken dat ik veilig was met m'n Gentoo............
Lezen
De "NULL pointer dereference" bug is aanwezig in versies 2.6.30 en 2.6.30.1 van de Linux kernel, die alleen in versie 5 van Red Hat Enterprise Linux aanwezig zijn. De exploit werkt alleen als de Security-Enhanced Linux extensies zijn ingeschakeld, of als de PulseAudio software is geïnstalleerd. Volgens Bas Alberts,
en
De aanval werkt niet op afstand ...
Samen met het commentaar van LT, lijkt het mij een storm in een glas water. Maar natuurlijk 'kopt' het leuk als er een lek in Linux gevonden wordt eens in de 8 jaar ;)
18-07-2009, 17:08 door prikkebeen
In de nieuwste 2.6.31-rc3 kernel is het al weer gerepareerd. Zoals Eerde al zegde, een beetje een opgeblazen verhaal.
Zoals gewoonlijk in OSS is het ontstane risico al weer tot het normale, veilige niveau teruggebracht.
18-07-2009, 17:34 door Anoniem
Iedereen mist het punt een beetje ... 't is niet zozeer de tun->sk dereference (i.e. de instantie van dit type fout die de exploit in dit geval uitbuit), maar 't feit dat dit soort fouten in het algemeen (NULL pointer dereferences in de Linux kernel), nog steeds voorkomen en dat de bescherming tegen de impact van deze fouten _compleet_ te omzeilen valt. Dat resulteert in een vals gevoel van veiligheid.

Krijg je daar bovenop ook nog eens het nieuws dat SELinux, een beveiligings enhance van de Kernel, het zelfs _makkelijker_ maakt om dit soort fouten uit te buiten ... wordt het helemaal een beetje belachelijk. Komt daar bij dat SELinux door de NSA ontwikkelt is, en dat NULL pointer dereferences in de kernel, zonder adequate bescherming, triviaal uit te buiten zijn ... dan wordt het verhaal helemaal interessant natuurlijk.

SELinux gebruikt een LSM hook die nou net toevallig ook door de standaard kernel gebruikt wordt om tegen dit soort fouten te beschermen in de standaard kernel (waar normaal the mmap_min_addr bescherming ingeschakeld staat, staat nu SELinux code).

Foutje? Kun je je afvragen ... super subtiel ... hele grote impact ... niet voor deze bug specifiek ... maar dit SOORT bugs in het algemeen. En daar zitten er een hele boel meer van in de Linux kernel ... ook in productie versies. Google maar eens 'could not handle NULL pointer dereference' ....

OOPS.
18-07-2009, 18:40 door Anoniem
Door ahimza: en ik maar denken dat ik veilig was met m'n Gentoo............

Ben je ook; " ... De aanval werkt niet op afstand ...".

Zoals ik het lees, lijkt het probleem te worden veroorzaakt door de/een compiler; de code controleert, edoch de compiler haalt de controle weg. Tja.
19-07-2009, 11:27 door Anoniem
Is dit een optie?
http://www.grsecurity.net/

"# Protection against exploitable null-pointer dereference bugs in the kernel"
19-07-2009, 11:48 door spatieman
NOG niet op afstand.
Maar met geprepareerde *nix mallware weer wel (maar wie is zo dom om.........)
19-07-2009, 13:03 door Anoniem
Door Anoniem: Ien dat NULL pointer dereferences in de kernel, zonder adequate bescherming, triviaal uit te buiten zijn ... dan wordt het verhaal helemaal interessant natuurlijk.

OOPS.

Dit klopt niet helemaal. NULL pointer dereferences in kernel land zijn niet op een universele manier te exploiten. Of het exploitbaar is, is afhankelijk van wat er na de dereference mee gedaan word. Soms wordt er een functie pointer aangeroepen of geschreven naar een pointer, maar in sommige gevallen wordt er alleen gelezen van de pointer. In dit geval heeft het mmapen van de NULL page weinig zin; het voorkomt alleen een kernel crash.
19-07-2009, 16:33 door Anoniem
Door Eerde:
Door ahimza: en ik maar denken dat ik veilig was met m'n Gentoo............
Lezen
De "NULL pointer dereference" bug is aanwezig in versies 2.6.30 en 2.6.30.1 van de Linux kernel, die alleen in versie 5 van Red Hat Enterprise Linux aanwezig zijn. De exploit werkt alleen als de Security-Enhanced Linux extensies zijn ingeschakeld, of als de PulseAudio software is geïnstalleerd. Volgens Bas Alberts,
en
De aanval werkt niet op afstand ...
Samen met het commentaar van LT, lijkt het mij een storm in een glas water. Maar natuurlijk 'kopt' het leuk als er een lek in Linux gevonden wordt eens in de 8 jaar ;)

Over deze bug heb je zeker gelijk maar eens in de 8 jaar?
Typisch fanboy gedrag, oogkappen op en de realiteit uit de weg gaan.
Kijk voor de grap eens op de securityfocus vulnerability lijst hoeveel lekken er het afgelopen jaar in Linux zijn gevonden, hell, alleen de afgelopen maand past nog niet op 2 pagina's daar zoveel zijn er ;)
19-07-2009, 22:56 door Van Hoorne
Daar heb je Eerde weer. Lek is lek, punt uit.
20-07-2009, 04:17 door Anoniem
Door Anoniem:
Door Anoniem: Ien dat NULL pointer dereferences in de kernel, zonder adequate bescherming, triviaal uit te buiten zijn ... dan wordt het verhaal helemaal interessant natuurlijk.

OOPS.

Dit klopt niet helemaal. NULL pointer dereferences in kernel land zijn niet op een universele manier te exploiten. Of het exploitbaar is, is afhankelijk van wat er na de dereference mee gedaan word. Soms wordt er een functie pointer aangeroepen of geschreven naar een pointer, maar in sommige gevallen wordt er alleen gelezen van de pointer. In dit geval heeft het mmapen van de NULL page weinig zin; het voorkomt alleen een kernel crash.

Juh, dat was een beetje impliciet. Read dereferences zijn niet universeel uit te buiten (nou ja, dat hangt er een beetje van af _wat_ er gelezen wordt natuurlijk, en hoe die data gebruikt wordt ... elke situatie waar de grens tussen userland en kernelland overschreden wordt, en de kernel data vanuit userland voorgeschoteld krijgt is potentieel een probleem ... maar d'as dan weer erg bug specifiek ja).

Maar NULL function pointer dereferences zijn super triviaal uit te buiten, en zelfs een single byte write naar kernel mem is ook vrij triviaal uit te buiten ... universeel is een groot woord ... maar triviaal, zeer zeker.
20-07-2009, 16:44 door Anoniem
Stukje changelog

commit 310c34c21c0ff605ff130021c827eabd83cd0b3c
Author: Julien Tinnes <jt@cr0.org>
Date: Fri Jun 26 20:27:40 2009 +0200

personality: fix PER_CLEAR_ON_SETID (CVE-2009-1895)

commit f9fabcb58a6d26d6efde842d1703ac7cfa9427b6 upstream.

We have found that the current PER_CLEAR_ON_SETID mask on Linux doesn't
include neither ADDR_COMPAT_LAYOUT, nor MMAP_PAGE_ZERO.

The current mask is READ_IMPLIES_EXEC|ADDR_NO_RANDOMIZE.

We believe it is important to add MMAP_PAGE_ZERO, because by using this
personality it is possible to have the first page mapped inside a
process running as setuid root. This could be used in those scenarios:

- Exploiting a NULL pointer dereference issue in a setuid root binary
- Bypassing the mmap_min_addr restrictions of the Linux kernel: by
running a setuid binary that would drop privileges before giving us
control back (for instance by loading a user-supplied library), we
could get the first page mapped in a process we control. By further
using mremap and mprotect on this mapping, we can then completely
bypass the mmap_min_addr restrictions.

Less importantly, we believe ADDR_COMPAT_LAYOUT should also be added
since on x86 32bits it will in practice disable most of the address
space layout randomization (only the stack will remain randomized).

Signed-off-by: Julien Tinnes <jt@cr0.org>
Signed-off-by: Tavis Ormandy <taviso@sdf.lonestar.org>
Acked-by: Christoph Hellwig <hch@infradead.org>
Acked-by: Kees Cook <kees@ubuntu.com>
Acked-by: Eugene Teo <eugene@redhat.com>
[ Shortened lines and fixed whitespace as per Christophs' suggestion ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

commit 3f8fd3f9f677ce452556aca82473b7fcac370830
Author: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
Date: Sun Jul 5 19:48:35 2009 +0000

tun/tap: Fix crashes if open() /dev/net/tun and then poll() it. (CVE-2009-1897)

commit 3c8a9c63d5fd738c261bd0ceece04d9c8357ca13 upstream.

Fix NULL pointer dereference in tun_chr_pool() introduced by commit
33dccbb050bbe35b88ca8cf1228dcf3e4d4b3554 ("tun: Limit amount of queued
packets per device") and triggered by this code:

int fd;
struct pollfd pfd;
fd = open("/dev/net/tun", O_RDWR);
pfd.fd = fd;
pfd.events = POLLIN | POLLOUT;
poll(&pfd, 1, 0);

Reported-by: Eugene Kapun <abacabadabacaba@gmail.com>
Signed-off-by: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>


Bron: http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.30.2

Storm in een glas water dus!
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.