OpenBSD root exploit chain u korrigjua në patch-et e shtatorit
OpenBSD root exploit i demonstruar nga kompania e sigurisë Calif mund t’i japë një përdoruesi lokal root, nivelin më të lartë të kontrollit administrativ të sistemit operativ, në OpenBSD 7.9. proof-of-concept ndërthur një integer overflow në shared memory me një dobësi tjetër në kernel, pjesa qendrore e sistemit operativ. Së bashku, dobësitë anashkalojnë kernel-address randomization të OpenBSD dhe mbrojtjet e procesorit SMAP and SMEP, të synuara për të penguar kernel që të qaset ose të ekzekutojë në mënyrë të papërshtatshme memorie të kontrolluar nga përdoruesi.
OpenBSD i trajtoi dy problemet themelore në përditësime të veçanta gjatë shtatorit. Errata 018, e publikuar më 14 shtator, korrigjoi integer overflow në funksionin shmat(4), i cili përdoret për të bashkëngjitur shared memory dhe u mundëson proceseve të qasen në të njëjtën zonë të memories. OpenBSD e klasifikoi atë përditësim si një korrigjim besueshmërie dhe jo si një korrigjim sigurie. Errata 026 pasoi më 30 shtator dhe korrigjoi reference-counting use-after-free, një gjendje në të cilën kernel vazhdon ta përdorë memorien pasi ajo është liruar. Ky përditësim u klasifikua si një korrigjim sigurie.
Të dy korrigjimet ofrohen përmes syspatch, mjetit të OpenBSD për patch-e, dhe zbatohen në të gjitha arkitekturat hardware të mbështetura. OpenBSD 7.8 mori gjithashtu korrigjimin për integer overflow. Në kohën e publikimit, asnjërës dobësi nuk i ishte caktuar një identifikues CVE dhe nuk kishte prova se sulmuesit i kishin shfrytëzuar ato. Calif tha se ia raportoi dobësitë OpenBSD më herët gjatë këtij viti dhe më pas publikoi në GitHub një analizë të hollësishme teknike dhe kodin e plotë proof-of-concept, pasi patch-et u vunë në dispozicion.
Faza e parë synon shm_nattch, numëruesin që regjistron sa procese i janë bashkëngjitur një segmenti shared memory. Ai ruhet si signed 16-bit short integer me vlerë maksimale 32,767. Calif e gjurmoi këtë projektim deri te source code origjinal i BSD nga viti 1988, ndërsa OpenBSD e trashëgoi tipin pa ia rritur madhësinë. exploit bashkëngjit 127 segmente shared memory dhe krijon 259 procese, duke e shtyrë numëruesin përtej kufirit të tij, kështu që ai kalon në vlerën negative -32,643.
Një race condition, ku rezultati varet nga koha e kryerjes së operacioneve të njëkohshme, e shndërron më pas numëruesin e dëmtuar në një use-after-free. kernel e liron memorien edhe pse procese të tjera vazhdojnë ta përdorin atë. Një out-of-bounds write i veçantë, që do të thotë se të dhënat shkruhen përtej zonës së memories që u është caktuar, ndryshon numëruesit e lidhur me anëtarësimet multicast në rrjet. Kur socket i prekur mbyllet, zvogëlimet pasuese të numëruesve modifikojnë page-table entries, regjistrimet që kontrollojnë mënyrën se si memoria bëhet mapping dhe si aksesohet.
Këto ndryshime e bëjnë një user-memory mapping të aksesueshëm në supervisor mode dhe mposhtin Supervisor Mode Access Prevention (SMAP) dhe Supervisor Mode Execution Prevention (SMEP). exploit mund të zëvendësojë më pas një function pointer, një adresë të ruajtur që i tregon sistemit se cilin kod të ekzekutojë, në një vendndodhje të parashikueshme të kernel dhe të ekzekutojë kodin e vet me privilegje root. Meqë ky është një local privilege escalation, ai nuk siguron vetvetiu një rrugë hyrjeje në distancë në sistem. Ai bëhet i rëndësishëm kur dikush tashmë ka mundësinë të ekzekutojë kod ose të përdorë një llogari në një host OpenBSD pa patch-et përkatëse.
Mekanizmi KARL i OpenBSD e rilidh kernel gjatë boot për të ndryshuar vendndodhjet e funksioneve dhe të të dhënave. Calif zbuloi se memory allocators përgjegjës për caktimin e memories së kernel mbeten deterministë. As early boot allocator dhe as best-fit allocator nuk e randomizojnë base address. Si rezultat, strukturat e krijuara herët gjatë startup, duke përfshirë function pointers të përdorur nga network-interface handlers lo0 dhe enc0, shfaqen në të njëjtat adresa pas rinisjeve të përsëritura në të njëjtin hardware. Prandaj, chain i demonstruar nuk ka nevojë që një information-disclosure vulnerability të zbulojë fillimisht adresat e kernel.
Përtej instalimit të dy errata-ve, Calif propozoi katër masa më të gjera hardening: kontrolle safe-unlinking për kernel linked lists, të përdorura tashmë nga FreeBSD dhe NetBSD; randomizimin e self-referential page-table mapping; shtimin e randomizimit në kernel memory allocation; dhe përdorimin e compiler-based bounds checking për të zbuluar aksesin në memorie jashtë kufijve të lejuar. Këto janë mbrojtje të propozuara dhe jo korrigjime të përshkruara si tashmë të pranishme në OpenBSD.
Për ofruesit e hosting dhe bizneset që përdorin infrastrukturë OpenBSD, veprimi i menjëhershëm është përdorimi i syspatch dhe konfirmimi se korrigjimet përkatëse të shtatorit janë instaluar në çdo sistem të prekur. Administratorët duhet gjithashtu të rishikojnë se cilët përdorues dhe shërbime lejohen të ekzekutojnë kod lokalisht, sepse exploit i publikuar kërkon akses lokal përpara se të mund të rrisë privilegjet. Organizatat që shqyrtojnë sigurinë e mjediseve të bazuara në OpenBSD mund të përdorin AEU-I për IT, infrastrukturë dhe konsulencë me sigurinë si përparësi.