For noen dager siden kom nyheten om det To sårbarheter ble oppdaget i delsystemene til Linux kjerne, Netfilter og io_uring, som lar en lokal bruker heve privilegiene sine på systemet.
Den første er sårbarhet. (CVE-2023-32233) som ble oppdaget i Netfilter-delsystemet og forårsaket av bruk-etter-fri minnetilgang i nf_tables-modulen, som sikrer driften av nftables-pakkefilteret.
Denne feilen er fordi netfilter nf_tables tillater oppdatering av konfigurasjonen for batchforespørsler som grupperer sammen flere grunnleggende operasjoner i atomtransaksjoner.
Problemet har blitt gjengitt i forskjellige versjoner av Linux-kjernen, inkludert Linux 6.3.1 (nåværende stabil) og sårbarheten kan utnyttes ved å sende spesiallagde forespørsler om å oppdatere nftables-konfigurasjonen. Det nevnes at angrepet krever tilgang til nftables, som kan fås i et eget nettverksnavnområde hvis du har rettighetene CLONE_NEWUSER, CLONE_NEWNS eller CLONE_NEWNET (for eksempel hvis du kan kjøre en isolert container).
På denne feilen lovet forskeren som identifiserte problemet å utsette publiseringen av detaljert informasjon og et eksempel på en fungerende utnyttelse som gir et rotskall i en uke.
I et spesifikt scenario kan en ugyldig batchforespørsel inneholde en operasjon som implisitt sletter et eksisterende nft anonymt sett etterfulgt av en annen operasjon som prøver å handle på det samme anonyme nft-settet etter at det er slettet. I scenariet ovenfor er et eksempel på operasjonen ovenfor sletting av en eksisterende nft-regel som bruker et anonymt nft-sett. Og et eksempel på sistnevnte operasjon er et forsøk på å fjerne et element fra den nft anonyme arrayen etter at arrayen er vekselvis fjernet, sistnevnte operasjon kan til og med forsøke å eksplisitt fjerne den nft anonyme arrayen igjen.
Som allerede nevnt i begynnelsen, var dette flere dager siden og utnyttelsen og informasjonen var allerede avslørt. Utnyttelsen så vel som detaljene kan bli funnet på følgende lenke.
Den andre feilen oppdaget, var sårbarheten (CVE-2023-2598) i implementeringen av det asynkrone I/O-grensesnittet io_uring inkludert i Linux-kjernen siden versjon 5.1.
Problemet er forårsaket av en feil i funksjonen io_sqe_buffer_register, som gir tilgang til fysisk minne utenfor grensene til en statisk allokert buffer. Problemet vises bare i 6.3-grenen og vil bli løst i neste 6.3.2-oppdatering.
Det nevnes at ideen bak den opprinnelige commit er at i stedet for å dele store sider som er bufret til individuelle bvec-oppføringer, kan du ha en enkelt bvec-oppføring for alle bufrede deler av siden. Nærmere bestemt, hvis alle sidene i bufferkartet bruker den første sidestrukturen og bufferlengden i en enkelt bvec-oppføring i stedet for å kartlegge hver side individuelt.
Så bvec vil strekke seg langt utover den enkeltsiden den faktisk er tillatt å berøre. Senere lar IORING_OP_READ_FIXED og IORING_OP_WRITE_FIXED oss lese og skrive til bufferen (dvs. minnet pekt på av bvec) etter ønske. Dette gir lese-/skrivetilgang til det fysiske minnet bak den eneste siden vi faktisk har.
Sårbarhetspublikasjonen nevner feilreproduksjonstrinnene:
1. Lag en memfd
2. Feil en enkelt side i den filbeskrivelsen
3. Bruk MAP_FIXED til å kartlegge denne siden gjentatte ganger, til påfølgende steder
4. Registrer hele regionen du nettopp fylte ut med den siden som
en fast buffer med IORING_REGISTER_BUFFERS
5. Bruk IORING_OP_WRITE_FIXED for å skrive bufferen til en annen fil
(OOB lest) eller IORING_OP_READ_FIXED for å lese data i bufferen (
OOB skriv).
Til slutt er det verdt å nevne det er allerede tilgjengelig en fungerende utnyttelsesprototype (CVE-2023-2598) for testing, slik at du kan kjøre kode med kjerneprivilegier.
Sårbarhet (CVE-2023-32233) Det ble fikset i 6.4-rc-oppdateringen, og du kan følge sikkerhetsproblemet i distribusjoner på sidene: Debian, Ubuntu, Gentoo, RHEL, Fedora, SUSE / openSUSE y Arch.