Sårbarhed i Linux-kernen, der kan manipulere med skrivebeskyttede filer

En sårbarhed er blevet identificeret i Linux-kernen (CVE-2022-0847), som gør det muligt at overskrive indholdet af sidecachen for alle filer, inklusive dem i skrivebeskyttet tilstand, åbnet med O_RDONLY-flaget eller placeret på filsystemer monteret i skrivebeskyttet tilstand. Rent praktisk kan sårbarheden bruges til at injicere kode i vilkårlige processer eller korrupte data i åbne filer. For eksempel kan du ændre indholdet af filen authorized_keys for sshd-processen. En prototype af udnyttelsen er tilgængelig til test.

Problemet har fået kodenavnet Dirty Pipe, svarende til den kritiske sårbarhed Dirty COW identificeret i 2016. Det bemærkes, at med hensyn til fareniveau er Dirty Pipe på samme niveau som Dirty COW, men er meget lettere at betjene. Sårbarheden blev identificeret under analysen af ​​klager over periodisk korruption af filer downloadet over netværket i et system, der downloader komprimerede arkiver fra en logserver (37 korruptioner på 3 måneder på et indlæst system), hvis forberedelse brugte splice()-operationen og unavngivne rør.

Sårbarheden vises begyndende med Linux-kernen 5.8, udgivet i august 2020, dvs. findes i Debian 11, men påvirker ikke basiskernen i Ubuntu 20.04 LTS. RHEL 8.x- og openSUSE/SUSE 15-kernerne er oprindeligt baseret på gamle grene, men det er muligt, at ændringen, der forårsagede problemet, blev backporteret til dem (der er endnu ingen nøjagtige data). Du kan spore udgivelsen af ​​pakkeopdateringer i distributioner på disse sider: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. En rettelse af sårbarheden blev foreslået i udgivelser 5.16.11, 5.15.25 og 5.10.102. Rettelsen er også inkluderet i kernen, der bruges på Android-platformen.

Sårbarheden skyldes den manglende initialisering af "buf->flags"-værdien i koden for funktionerne copy_page_to_iter_pipe() og push_pipe(), på trods af at hukommelsen ikke ryddes ved allokering af en struktur og under visse manipulationer med unavngivne rør, en værdi fra en anden operation. Ved at bruge denne funktion kan en uprivilegeret lokal bruger opnå udseendet af PIPE_BUF_FLAG_CAN_MERGE-værdien i flaget, hvilket giver dig mulighed for at organisere dataoverskrivning i sidecachen ved blot at skrive nye data til et specielt forberedt unavngivet rør.

For et angreb skal målfilen være læsbar, og da adgangsrettigheder ikke kontrolleres, når der skrives til pipe, kan udskiftning i sidecachen også foretages for filer, der er placeret i partitioner monteret skrivebeskyttet (f.eks. for filer c CD- ROM). Efter at have erstattet informationen i sidecachen, når du læser data fra en fil, vil processen ikke modtage de faktiske data, men de erstattede data.

Operation kommer ned til at oprette en unavngiven kanal og fylde den med vilkårlige data for at sikre, at PIPE_BUF_FLAG_CAN_MERGE-flaget er sat i alle ringstrukturer, der er knyttet til den. Derefter læses dataene fra kanalen, men flaget forbliver sat i alle tilfælde af pipe_buffer-strukturen i pipe_inode_info-ringstrukturerne. Et kald til splice() foretages derefter for at læse data fra målfilen til et unavngivet rør, startende ved den ønskede offset. Når du skriver data til denne unavngivne pipe, på grund af at flaget PIPE_BUF_FLAG_CAN_MERGE er indstillet, vil dataene i sidecachen blive overskrevet i stedet for at skabe en ny forekomst af pipe_buffer-strukturen.

Kilde: opennet.ru

Tilføj en kommentar