Sårbarhed i Linux Netfilter-kernedelsystemet

En sårbarhed (CVE-2021-22555) er blevet identificeret i Netfilter, et undersystem af Linux-kernen, der bruges til at filtrere og ændre netværkspakker, som gør det muligt for en lokal bruger at få root-privilegier på systemet, herunder mens han er i en isoleret container. En fungerende prototype af en udnyttelse, der omgår KASLR-, SMAP- og SMEP-beskyttelsesmekanismerne, er blevet forberedt til test. Forskeren, der opdagede sårbarheden, modtog en belønning på $20 fra Google for at identificere en metode til at omgå isoleringen af ​​Kubernetes-containere i en kCTF-klynge.

Problemet har eksisteret siden kerne 2.6.19, udgivet for 15 år siden, og er forårsaget af en fejl i IPT_SO_SET_REPLACE- og IP6T_SO_SET_REPLACE-handlerne, der forårsager et bufferoverløb, når der sendes specielt formaterede parametre via et setsockopt-kald i compat-tilstand. Under normale omstændigheder er det kun root-brugeren, der kan foretage et opkald til compat_setsockopt(), men de nødvendige privilegier for at udføre angrebet kan også opnås af en uprivilegeret bruger på systemer med understøttelse af brugernavnerum aktiveret.

En bruger kan oprette en container med en separat root-bruger og udnytte sårbarheden derfra. For eksempel er "brugernavneområder" aktiveret som standard på Ubuntu og Fedora, men ikke aktiveret på Debian og RHEL. Patchen, der fikser sårbarheden, blev indført i Linux-kernen den 13. april. Pakkeopdateringer er allerede blevet genereret af Debian-, Arch Linux- og Fedora-projekterne. I Ubuntu, RHEL og SUSE er opdateringer under forberedelse.

Problemet opstår i funktionen xt_compat_target_from_user() på grund af en forkert beregning af hukommelsesstørrelsen ved lagring af kernestrukturer efter konvertering fra 32-bit til 64-bit repræsentation. Fejlen tillader fire nul bytes at blive skrevet til enhver position ud over den allokerede buffer afgrænset af offset 0x4C. Denne funktion viste sig at være nok til at skabe en udnyttelse, der tillod en at opnå root-rettigheder - ved at rydde m_list->next pointer i msg_msg strukturen blev der skabt betingelser for at få adgang til data efter frigørelse af hukommelse (use-after-free), hvilket blev derefter brugt til at indhente information om adresser og ændringer til andre strukturer gennem manipulation af msgsnd() systemkaldet.

Kilde: opennet.ru

Tilføj en kommentar