Sikkerhetsfeil i den nye Linux-kjernen

Den første større feilen i Linux 2.2.0 er funnet, én uke etter at den ble sluppet. Fordelen med Linux er imidlertid at hvem som helst kan rette opp feilen ved å gjøre en liten endring i kildekoden.

Flere Linux-brukere har på Linux-kernel Mailing List (LKML) meldt om en feil i kjernen som skal muliggjøre DoS-angrep (Denial of Service). Ifølge innsenderne kan hvilken som helst Linux-bruker krasje maskinen Linux kjører på, det vil si at maskinen foretar en omstart. Brukerne behøver ikke å ha spesielle rettigheter for å få dette til.

For å replikere feilen må brukeren utføre ldd-kommandoen på en hvilken som helst core-fil. Linux skal da svare at det ikke kan få tillatelse til å eksekvere ./core og deretter gjennomføre omstarten.

Såvidt innsenderne vet, påvirker denne feilen kun x86-baserte maskiner, PowerPC-baserte maskiner skal være uberørte. Samtidig er det også flere brukere av x86-baserte maskiner som ikke greier å replikere feilen. Alt dette tyder på at feilen er maskinvareavhengig.

Forklaringen på hvorfor Linux ikke greier å utføre denne kommandoen skal ifølge en innsender være at munmap()-prosedyren gjør en anelse mer arbeid enn nødvendig og dermed dreper hele sidetabellplassen til 0xc0000000. Dette skal være en temmelig vital del med 4 MB virtuelt minnerom i Linux.

Feilen skal også opptre i Linux 2.2.0ac1, men kun hvis core-filen har rettighetene satt til 600.

Nå har Linux den fordelen av enhver bruker kan gjøre de endringen i programvaren han eller hun måtte ønske. Det er derfor mulig for brukerne av Linux 2.2.0 å rette denne feilen før en feilfiks kommer. Riktignok er det allerede kommet en patch til Linux som oppgrader kjernen til 2.2.1, men denne skal kun inneholde endringer i koden som brukes av Alpha-prosessoren, oppdateringer av støtten for lydkort og filsystemet NFS (Network File System) samt noen små feilfikser i forbindelse med minneforvaltningen.

Patchen kan blant annet hentes ned fra nettstedet The Linux Kernel Archive. Se peker nedenfor eller i spalten til høyre.

Derfor må brukere av Linux 2.2.x foreløpig rette feilen i koden på egenhånd. Oppskriften stammer fra LKML og er ikke testet av digi.no. Eventuell bruk av denne oppskriften gjøres derfor på egen risiko, selv om risikoen sannsynligvis er ikke-eksisterende. Det er jo bare å gjøre om endringen hvis det eventuelt skulle oppstå problemer.

Endringen gjøres i filen linux/mm/mmap.c, linje 558:

unsigned long start, unsigned long end)

{

unsigned long first = start & PGDIR_MASK;

unsigned long last = (end & PGDIR_MASK) + PGDIR_SIZE;

Den siste linjen erstattes med det følgende:

unsigned long last = ((end-1) & PGDIR_MASK) + PGDIR_SIZE;

if (!prev) {

prev = mm->mmap;

Linus Torvalds med flere er blitt varslet om dette, men foreløpig er det ikke kommet noen kommentarer fra den kanten.

Til toppen