చాలా Linux పంపిణీలలో రూట్ యాక్సెస్‌ని అనుమతించే PolKitలో క్లిష్టమైన దుర్బలత్వం

క్వాలిస్ ఎలివేటెడ్ యాక్సెస్ హక్కులు అవసరమయ్యే చర్యలను చేయడానికి అన్‌ప్రివిలేజ్డ్ యూజర్‌లను అనుమతించడానికి డిస్ట్రిబ్యూషన్‌లలో ఉపయోగించిన Polkit (గతంలో PolicyKit) సిస్టమ్ కాంపోనెంట్‌లో ఒక దుర్బలత్వాన్ని (CVE-2021-4034) గుర్తించింది. దుర్బలత్వం ఒక ప్రత్యేక హక్కు లేని స్థానిక వినియోగదారుని రూట్ చేయడానికి మరియు సిస్టమ్‌పై పూర్తి నియంత్రణను పొందేందుకు వారి అధికారాలను పెంచుకోవడానికి అనుమతిస్తుంది. సమస్యకు PwnKit అనే సంకేతనామం పెట్టబడింది మరియు చాలా Linux డిస్ట్రిబ్యూషన్‌లలో డిఫాల్ట్ కాన్ఫిగరేషన్‌లో రన్ అయ్యే వర్కింగ్ ఎక్స్‌ప్లోయిట్‌ను ఉత్పత్తి చేయడంలో ఇది గుర్తించదగినది.

సమస్య PolKit యొక్క pkexec యుటిలిటీలో ఉంది, ఇది SUID రూట్ ఫ్లాగ్‌తో వస్తుంది మరియు పేర్కొన్న PolKit నియమాల ప్రకారం మరొక వినియోగదారు యొక్క అధికారాలతో ఆదేశాలను అమలు చేయడానికి రూపొందించబడింది. pkexecకి పంపబడిన కమాండ్ లైన్ ఆర్గ్యుమెంట్‌లను తప్పుగా నిర్వహించడం వలన, ఒక అన్‌ప్రివిలేజ్డ్ యూజర్ ప్రామాణీకరణను దాటవేయవచ్చు మరియు యాక్సెస్ నియమాల సెట్‌తో సంబంధం లేకుండా వారి కోడ్‌ను రూట్‌గా అమలు చేయవచ్చు. దాడి కోసం, PolKitలో ఏ సెట్టింగ్‌లు మరియు పరిమితులు పేర్కొనబడినా పట్టింపు లేదు, pkexec యుటిలిటీతో ఎక్జిక్యూటబుల్ ఫైల్ కోసం SUID రూట్ అట్రిబ్యూట్ సెట్ చేయబడితే సరిపోతుంది.

Pkexec ప్రక్రియను ప్రారంభించేటప్పుడు ఆమోదించిన కమాండ్ లైన్ ఆర్గ్యుమెంట్ కౌంట్ (argc) యొక్క చెల్లుబాటును తనిఖీ చేయదు. pkexec డెవలపర్‌లు argv శ్రేణిలోని మొదటి ఎంట్రీ ఎల్లప్పుడూ ప్రాసెస్ (pkexec) పేరును కలిగి ఉంటుందని మరియు రెండవది NULL విలువ లేదా pkexec ద్వారా ప్రారంభించబడిన కమాండ్ పేరును కలిగి ఉంటుందని భావించారు. ఆర్గ్యుమెంట్ కౌంట్ అనేది శ్రేణి యొక్క వాస్తవ కంటెంట్‌లకు వ్యతిరేకంగా తనిఖీ చేయబడనందున మరియు ఎల్లప్పుడూ 1 కంటే ఎక్కువగా ఉంటుందని భావించబడుతుంది, ఒకవేళ ప్రక్రియ ఖాళీ argv శ్రేణిని ఆమోదించినట్లయితే, Linux execve ఫంక్షన్ అనుమతించినట్లుగా, pkexec NULLని మొదటి ఆర్గ్యుమెంట్‌గా పరిగణిస్తుంది ( ప్రక్రియ పేరు) మరియు తదుపరిది బఫర్ మెమరీ వెలుపల, శ్రేణి యొక్క తదుపరి విషయాల వలె. |———+———+——+———|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "ప్రోగ్రామ్" "-ఎంపిక" NULL "విలువ" "PATH=పేరు" NULL

సమస్య ఏమిటంటే argv శ్రేణి తర్వాత ఎన్విరాన్‌మెంట్ వేరియబుల్స్‌తో కూడిన మెమరీలో envp శ్రేణి ఉంది. అందువలన, argv శ్రేణి ఖాళీగా ఉంటే, pkexec ఎన్విరాన్‌మెంట్ వేరియబుల్స్‌తో (argv[1] envp[0]కి ఒకేలా మారింది) శ్రేణి యొక్క మొదటి మూలకం నుండి ఎలివేటెడ్ అధికారాలతో కమాండ్ రన్ గురించి డేటాను సంగ్రహిస్తుంది, వీటిలోని కంటెంట్‌లను నియంత్రించవచ్చు. దాడి చేసిన వ్యక్తి ద్వారా.

argv[1] విలువను స్వీకరించిన తర్వాత, pkexec PATHలోని ఫైల్ పాత్‌లను పరిగణనలోకి తీసుకుని, ఎక్జిక్యూటబుల్ ఫైల్‌కు పూర్తి మార్గాన్ని నిర్ణయించడానికి ప్రయత్నిస్తుంది మరియు argv[1]కి పూర్తి మార్గంతో స్ట్రింగ్‌కు పాయింటర్‌ను వ్రాస్తుంది, ఇది argv[1] envp[0]కి సమానంగా ఉన్నందున, మొదటి ఎన్విరాన్‌మెంట్ వేరియబుల్ విలువను ఓవర్‌రైట్ చేయడానికి దారి తీస్తుంది. మొదటి ఎన్విరాన్‌మెంట్ వేరియబుల్ పేరును మార్చడం ద్వారా, దాడి చేసే వ్యక్తి pkexecలో మరొక ఎన్విరాన్‌మెంట్ వేరియబుల్‌ను భర్తీ చేయవచ్చు, ఉదాహరణకు, సూయిడ్ ప్రోగ్రామ్‌లలో అనుమతించబడని “LD_PRELOAD” ఎన్విరాన్‌మెంట్ వేరియబుల్‌ను ప్రత్యామ్నాయం చేయండి మరియు వారి షేర్డ్ లైబ్రరీని లోడ్ అయ్యేలా ఏర్పాటు చేయండి. ప్రక్రియ.

వర్కింగ్ ఎక్స్‌ప్లోయిట్‌లో GCONV_PATH వేరియబుల్‌ని భర్తీ చేయడం జరుగుతుంది, ఇది సింబల్ ట్రాన్స్‌కోడింగ్ లైబ్రరీకి మార్గాన్ని నిర్ణయించడానికి ఉపయోగించబడుతుంది, g_printerr() ఫంక్షన్‌కు కాల్ చేస్తున్నప్పుడు డైనమిక్‌గా లోడ్ చేయబడుతుంది, దీని కోడ్ iconv_open()ని ఉపయోగిస్తుంది. GCONV_PATHలో పాత్‌ను పునర్నిర్వచించడం ద్వారా, దాడి చేసే వ్యక్తి అది లోడ్ చేయబడిన ప్రామాణిక iconv లైబ్రరీ కాదని, దాని స్వంత లైబ్రరీ అని నిర్ధారించుకోవచ్చు, pkexec ఇప్పటికీ అమలులో ఉన్న దశలో దోష సందేశం ప్రదర్శించబడినప్పుడు హ్యాండ్‌లర్‌లు అమలు చేయబడతాయి. రూట్ హక్కులు మరియు ప్రారంభానికి ముందు అనుమతులు తనిఖీ చేయబడతాయి.

మెమరీ కరప్షన్ వల్ల సమస్య వచ్చినప్పటికీ, హార్డ్‌వేర్ ఆర్కిటెక్చర్‌తో సంబంధం లేకుండా ఇది విశ్వసనీయంగా మరియు పదేపదే ఉపయోగించబడుతుందని గుర్తించబడింది. సిద్ధం చేసిన దోపిడీ ఉబుంటు, డెబియన్, ఫెడోరా మరియు సెంటొస్‌లలో విజయవంతంగా పరీక్షించబడింది, కానీ ఇతర పంపిణీలలో కూడా ఉపయోగించవచ్చు. అసలు దోపిడీ ఇంకా పబ్లిక్‌గా అందుబాటులో లేదు, ఇది అల్పమైనదని మరియు ఇతర పరిశోధకులచే సులభంగా పునర్నిర్మించబడుతుందని సూచిస్తుంది, కాబట్టి బహుళ-వినియోగదారు సిస్టమ్‌లలో వీలైనంత త్వరగా ప్యాచ్ నవీకరణను ఇన్‌స్టాల్ చేయడం ముఖ్యం. పోల్‌కిట్ BSD సిస్టమ్‌లు మరియు సోలారిస్ కోసం కూడా అందుబాటులో ఉంది, కానీ వాటిపై ఉపయోగం కోసం అధ్యయనం చేయలేదు. ఓపెన్‌బిఎస్‌డిపై దాడి చేయడం సాధ్యం కాదని తెలిసిన విషయమేమిటంటే, ఓపెన్‌బిఎస్‌డి కెర్నల్ ఎగ్జిక్యూ() అని పిలిచినప్పుడు శూన్య ఆర్జిసి విలువను పాస్ చేయడానికి అనుమతించదు.

సమస్య మే 2009 నుండి pkexec కమాండ్ జోడించినప్పటి నుండి ఉంది. PolKit దుర్బలత్వానికి పరిష్కారం ప్రస్తుతం ప్యాచ్‌గా అందుబాటులో ఉంది (ప్యాచ్ విడుదల ఏదీ విడుదల చేయబడలేదు), అయితే పంపిణీ డెవలపర్‌లకు సమస్య గురించి ముందుగానే తెలియజేయబడినందున, చాలా పంపిణీలు దుర్బలత్వం గురించి సమాచారాన్ని బహిర్గతం చేయడంతో పాటు నవీకరణను ఏకకాలంలో ప్రచురించాయి. సమస్య RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux మరియు Manjaroలలో పరిష్కరించబడింది. హానిని నిరోధించడానికి తాత్కాలిక చర్యగా, మీరు /usr/bin/pkexec ప్రోగ్రామ్ (“chmod 0755 /usr/bin/pkexec”) నుండి SUID రూట్ ఫ్లాగ్‌ను తీసివేయవచ్చు.



మూలం: opennet.ru

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