Dobësi në nënsistemin e kernelit Linux Netfilter

Një dobësi (CVE-2021-22555) është identifikuar në Netfilter, një nënsistem i kernelit Linux që përdoret për të filtruar dhe modifikuar paketat e rrjetit, që lejon një përdorues lokal të fitojë privilegje rrënjësore në sistem, duke përfshirë edhe kur është në një kontejner të izoluar. Një prototip pune i një shfrytëzimi që anashkalon mekanizmat e mbrojtjes KASLR, SMAP dhe SMEP është përgatitur për testim. Studiuesi që zbuloi cenueshmërinë mori një shpërblim 20 dollarë nga Google për identifikimin e një metode për të anashkaluar izolimin e kontejnerëve Kubernetes në një grup kCTF.

Problemi ka ekzistuar që nga kerneli 2.6.19, i lëshuar 15 vjet më parë, dhe shkaktohet nga një gabim në mbajtësit IPT_SO_SET_REPLACE dhe IP6T_SO_SET_REPLACE që shkakton një tejmbushje buferi kur dërgoni parametra të formatuar posaçërisht nëpërmjet një thirrjeje setsockopt në modalitetin kompat. Në rrethana normale, vetëm përdoruesi rrënjë mund të bëjë një thirrje në compat_setsockopt(), por privilegjet e kërkuara për të kryer sulmin mund të merren gjithashtu nga një përdorues i paprivilegjuar në sisteme me mbështetje për hapësirat e emrave të përdoruesve të aktivizuar.

Një përdorues mund të krijojë një kontejner me një përdorues të veçantë rrënjë dhe të shfrytëzojë cenueshmërinë prej andej. Për shembull, "user namespaces" është aktivizuar si parazgjedhje në Ubuntu dhe Fedora, por nuk aktivizohet në Debian dhe RHEL. Patch-i që rregullon cenueshmërinë u miratua në kernelin Linux më 13 prill. Përditësimet e paketës tashmë janë krijuar nga projektet Debian, Arch Linux dhe Fedora. Në Ubuntu, RHEL dhe SUSE, përditësimet janë në përgatitje.

Problemi ndodh në funksionin xt_compat_target_from_user() për shkak të llogaritjes së gabuar të madhësisë së kujtesës kur ruani strukturat e kernelit pas konvertimit nga përfaqësimi 32-bit në 64-bit. Defekti lejon që katër bajt null të shkruhen në çdo pozicion përtej buferit të caktuar të kufizuar nga kompensimi 0x4C. Kjo veçori doli të jetë e mjaftueshme për të krijuar një shfrytëzim që i mundësoi dikujt të fitonte të drejta rrënjësore - duke pastruar treguesin m_list->text në strukturën msg_msg, u krijuan kushte për aksesin e të dhënave pas çlirimit të memories (përdorimi-pas-free), i cili më pas u përdor për të marrë informacion rreth adresave dhe ndryshimeve në strukturat e tjera përmes manipulimit të thirrjes së sistemit msgsnd().

Burimi: opennet.ru

Shto një koment