Dobësitë në nënsistemin eBPF që lejojnë ekzekutimin e kodit në nivelin e kernelit Linux

Dy dobësi të reja janë identifikuar në nënsistemin eBPF, i cili ju lejon të ekzekutoni mbajtësit brenda kernelit Linux në një makinë virtuale speciale me JIT. Të dy dobësitë bëjnë të mundur ekzekutimin e kodit tuaj me të drejtat e kernelit, jashtë një makinerie virtuale të izoluar eBPF. Informacioni rreth problemeve u publikua nga ekipi Zero Day Initiative, i cili drejton konkursin Pwn2Own, gjatë të cilit këtë vit u demonstruan tre sulme në Ubuntu Linux që përdorën dobësi të panjohura më parë (nëse dobësitë në eBPF janë të lidhura me këto sulme nuk raportohet) .

  • CVE-2021-3490 - Dobësia shkaktohet nga mungesa e kontrollit 32-bit jashtë kufijve kur kryeni operacione në bit AND, OR dhe XOR në eBPF ALU32. Një sulmues mund të përfitojë nga ky gabim për të lexuar dhe shkruar të dhëna jashtë kufijve të tamponit të caktuar. Problemi me operacionet XOR shfaqet duke filluar nga versioni i kernelit 5.7-rc1, dhe AND dhe OR - duke filluar nga 5.10-rc1.
  • CVE-2021-3489 - Dobësia është shkaktuar nga një gabim në zbatimin e tamponit të unazës dhe është për shkak të faktit se funksioni bpf_ringbuf_reserve nuk kontrolloi mundësinë që madhësia e rajonit të caktuar të memories mund të jetë më e vogël se madhësia aktuale e unazës. Problemi shfaqet që nga lëshimi 5.8-rc1.

Statusi i korrigjimit të dobësive në shpërndarje mund të gjurmohet në këto faqe: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Rregullimet janë gjithashtu të disponueshme si arna (CVE-2021-3489, CVE-2021-3490). Nëse çështja mund të shfrytëzohet varet nëse thirrja e sistemit eBPF është e aksesueshme për përdoruesin. Për shembull, në konfigurimin e paracaktuar në RHEL, shfrytëzimi i cenueshmërisë kërkon që përdoruesi të ketë të drejta CAP_SYS_ADMIN.

Më vete, mund të vërejmë një dobësi tjetër në kernelin Linux - CVE-2021-32606, e cila lejon një përdorues lokal të ngrejë privilegjet e tij në nivelin rrënjë. Problemi ka qenë i dukshëm që nga kernel Linux 5.11 dhe shkaktohet nga një gjendje gare në zbatimin e protokollit CAN ISOTP, i cili bën të mundur ndryshimin e parametrave të lidhjes së prizës për shkak të mungesës së vendosjes së blloqeve të duhura në funksionin isotp_setsockopt() kur përpunohet flamuri CAN_ISOTP_SF_BROADCAST.

Pas mbylljes së prizës ISOTP, lidhja me prizën e marrësit mbetet në fuqi, e cila mund të vazhdojë të përdorë strukturat e lidhura me prizën pasi memoria e lidhur me to të jetë liruar (përdorimi pa pagesë për shkak të thirrjes në një strukturë isotp_sock që tashmë është çliruar kur thirret isotp_rcv()). Nëpërmjet manipulimit të të dhënave, ju mund të anashkaloni treguesin në funksionin sk_error_report() dhe të ekzekutoni kodin tuaj në nivelin e kernelit.

Burimi: opennet.ru

Shto një koment