Kwetsbaarheid in het Linux Netfilter-kernelsubsysteem

Er is een kwetsbaarheid (CVE-2021-22555) geïdentificeerd in Netfilter, een subsysteem van de Linux-kernel dat wordt gebruikt om netwerkpakketten te filteren en te wijzigen, waardoor een lokale gebruiker root-rechten op het systeem kan verkrijgen, ook als hij zich in een geïsoleerde container bevindt. Een werkend prototype van een exploit die de KASLR-, SMAP- en SMEP-beschermingsmechanismen omzeilt, is voorbereid om te testen. De onderzoeker die de kwetsbaarheid ontdekte, ontving een beloning van $ 20 van Google voor het identificeren van een methode om de isolatie van Kubernetes-containers in een kCTF-cluster te omzeilen.

Het probleem bestaat al sinds kernel 2.6.19, 15 jaar geleden uitgebracht, en wordt veroorzaakt door een bug in de IPT_SO_SET_REPLACE en IP6T_SO_SET_REPLACE handlers die een bufferoverflow veroorzaakt bij het verzenden van speciaal geformatteerde parameters via een setsockopt-aanroep in de compat-modus. Onder normale omstandigheden kan alleen de rootgebruiker compat_setsockopt() aanroepen, maar de bevoegdheden die nodig zijn om de aanval uit te voeren kunnen ook worden verkregen door een gebruiker zonder rechten op systemen waarop ondersteuning voor gebruikersnaamruimten is ingeschakeld.

Een gebruiker kan een container maken met een aparte rootgebruiker en van daaruit de kwetsbaarheid misbruiken. "Gebruikersnaamruimten" zijn bijvoorbeeld standaard ingeschakeld op Ubuntu en Fedora, maar niet op Debian en RHEL. De patch die het beveiligingslek verhelpt, werd op 13 april in de Linux-kernel opgenomen. Pakketupdates zijn al gegenereerd door de Debian-, Arch Linux- en Fedora-projecten. In Ubuntu, RHEL en SUSE zijn updates in voorbereiding.

Het probleem doet zich voor in de functie xt_compat_target_from_user() vanwege een onjuiste berekening van de geheugengrootte bij het opslaan van kernelstructuren na conversie van 32-bits naar 64-bits weergave. Door de bug kunnen vier null-bytes worden geschreven naar elke positie buiten de toegewezen buffer, begrensd door offset 0x4C. Deze functie bleek voldoende te zijn om een ​​exploit te creëren die het mogelijk maakte om rootrechten te verkrijgen - door de m_list->next pointer in de msg_msg-structuur te wissen, werden voorwaarden gecreëerd voor toegang tot gegevens na het vrijmaken van geheugen (use-after-free), wat werd vervolgens gebruikt om informatie te verkrijgen over adressen en wijzigingen in andere structuren door manipulatie van de systeemaanroep msgsnd().

Bron: opennet.ru

Voeg een reactie