በአብዛኛዎቹ የሊኑክስ ስርጭቶች ላይ ስርወ መዳረሻን የሚፈቅድ በPolKit ውስጥ ያለው ወሳኝ ተጋላጭነት

Qualys በPolkit (የቀድሞው የፖሊሲ ኪት) የስርጭት ክፍል ውስጥ ተጋላጭነት (CVE-2021-4034) ለይተው አውቀዋል፣ ልዩ መብት ለሌላቸው ተጠቃሚዎች ከፍ ያለ የመዳረሻ መብቶችን የሚጠይቁ ድርጊቶችን እንዲፈጽሙ ያስችላቸዋል። ተጋላጭነቱ ያልተፈቀደ የአካባቢ ተጠቃሚ ስርአቱን የመሠረት እና ሙሉ በሙሉ የመቆጣጠር መብቱን እንዲያሳድግ ያስችለዋል። ችግሩ PwnKit የሚል ስም ተሰጥቶታል እና በአብዛኛዎቹ የሊኑክስ ስርጭቶች ላይ በነባሪ ውቅር ውስጥ የሚሰራ የስራ ብዝበዛን በማምረት ታዋቂ ነው።

ችግሩ በPolKit pkexec utility ውስጥ አለ፣ ከ SUID ስር ባንዲራ ጋር አብሮ ይመጣል እና በተጠቀሰው የPolKit ህጎች መሰረት ከሌላ ተጠቃሚ ልዩ መብቶች ጋር ትዕዛዞችን ለማስኬድ የተቀየሰ ነው። ወደ pkexec የተላለፉ የትዕዛዝ መስመር ነጋሪ እሴቶች ትክክል ባልሆነ አያያዝ ምክንያት ያልተፈቀደ ተጠቃሚ የመግቢያ ህጎቹን ከግምት ውስጥ ሳያስገባ ማረጋገጥን አልፎ እንደ ስርወ ማስኬድ ይችላል። ለጥቃት በPolKit ውስጥ ምን አይነት ቅንጅቶች እና ገደቦች እንደተገለጹ ምንም ለውጥ አያመጣም ፣ የ SUID ስርወ ባህሪው በpkexec መገልገያ ለሚሰራው ፋይል መዘጋጀቱ በቂ ነው።

Pkexec ሂደት ሲጀመር ያለፈውን የትዕዛዝ መስመር ነጋሪ እሴት (argc) ትክክለኛነት አያረጋግጥም። የpkexec ገንቢዎች በአርጂቪ ድርድር ውስጥ ያለው የመጀመሪያው ግቤት ሁል ጊዜ የሂደቱን ስም (pkexec) እና ሁለተኛው ወይ NULL እሴት ወይም በpkexec በኩል የተጀመረውን የትዕዛዝ ስም ይይዛል ብለው ገምተዋል። የክርክር ቆጠራው በድርድሩ ትክክለኛ ይዘት ላይ ስላልተመረመረ እና ሁልጊዜም ከ1 በላይ እንደሚሆን ስለተገመተ፣ አንድ ሂደት ባዶ የአርጂቭ ድርድር ከተላለፈ፣ የሊኑክስ ፈጻሚ ተግባር በሚፈቅደው መሰረት፣ pkexec NULLን እንደ መጀመሪያው መከራከሪያ ይቆጥረዋል ( የሂደቱ ስም) እና ቀጣዩ እንደ ቋት ማህደረ ትውስታ ውጭ ፣ ልክ እንደ ተከታዩ የድርድር ይዘቶች። |———+————+——+————|———+———+——+—————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "ፕሮግራም" "-አማራጭ" ባዶ "እሴት" "PATH=ስም" ባዶ

ችግሩ ከአርጂቭ ድርድር በኋላ የአካባቢ ተለዋዋጮችን የያዘ ማህደረ ትውስታ ውስጥ envp ድርድር አለ። ስለዚህ፣ የ argv አደራደር ባዶ ከሆነ pkexec ከድርድሩ የመጀመሪያ አካል ከአካባቢ ተለዋዋጮች (argv[1] ከ envp [0] ጋር ተመሳሳይ ሆነ)፣ ይዘቱን መቆጣጠር በሚቻልበት ሁኔታ ስለ ትዕዛዙ መረጃ ያወጣል። በአጥቂው.

የ argv[1] ዋጋን ከተቀበለ በኋላ pkexec በ PATH ውስጥ ያሉትን የፋይል መንገዶች ከግምት ውስጥ በማስገባት ወደ ፈጻሚው ፋይል የሚወስደውን ሙሉ መንገድ ለማወቅ ይሞክራል እና ወደ ገመዱ ሙሉ ዱካ ወደ argv [1] የሚመለስ ጠቋሚን ይጽፋል። argv[1] ከ envp[0] ጋር ስለሚመሳሰል የመጀመሪያውን የአካባቢ ተለዋዋጭ እሴት እንደገና ለመፃፍ ይመራል። የመጀመሪያውን የአካባቢ ተለዋዋጭ ስም በማስተካከል አጥቂ በpkexec ውስጥ ሌላ የአካባቢ ተለዋዋጭ መተካት ይችላል ለምሳሌ በ suid ፕሮግራሞች ውስጥ የማይፈቀደውን "LD_PRELOAD" አካባቢን በመተካት እና የጋራ ቤተ መጻሕፍታቸው ወደ ውስጥ እንዲጫኑ ያመቻቹ። ሂደት.

የስራ ብዝበዛው የGCONV_PATH ተለዋዋጭ መተካትን ያካትታል፣ ወደ የምልክት ትራንስኮዲንግ ቤተ-መጽሐፍት የሚወስደውን መንገድ ለመወሰን የሚያገለግል፣ የ g_printerr() ተግባርን በሚጠራበት ጊዜ በተለዋዋጭ የሚጫነው፣ ኮድ አዶቭ_open()ን ይጠቀማል። በGCONV_PATH ውስጥ መንገዱን እንደገና በመወሰን አጥቂው የተጫነው መደበኛ iconv ቤተ-መጽሐፍት ሳይሆን የራሱ ቤተ-መጽሐፍት መሆኑን ማረጋገጥ ይችላል፣ የስህተት መልእክት በpkexec አሁንም እየሄደ ባለበት ደረጃ ላይ በሚታይበት ጊዜ ተቆጣጣሪዎቹ ይፈጸማሉ። የስር መብቶች እና የማስጀመሪያ ፈቃዶች ተረጋግጠዋል።

ችግሩ የተፈጠረው የማህደረ ትውስታ ብልሹነት ቢሆንም የሃርድዌር አርክቴክቸር ምንም ይሁን ምን በአስተማማኝ እና በተደጋጋሚ ጥቅም ላይ ሊውል እንደሚችል ተጠቁሟል። የተዘጋጀው ብዝበዛ በተሳካ ሁኔታ በኡቡንቱ፣ ዴቢያን፣ ፌዶራ እና ሴንቶስ ላይ ተፈትኗል፣ ነገር ግን በሌሎች ስርጭቶች ላይም ጥቅም ላይ ሊውል ይችላል። ዋናው ብዝበዛ ገና በይፋ አልተገኘም ይህም ቀላል እንዳልሆነ እና በሌሎች ተመራማሪዎች በቀላሉ ሊፈጠር ይችላል, ስለዚህ የ patch ዝማኔን በተቻለ ፍጥነት በበርካታ ተጠቃሚ ስርዓቶች ላይ መጫን አስፈላጊ ነው. ፖልኪት ለቢኤስዲ ሲስተሞች እና ለ Solaris ይገኛል፣ ነገር ግን በእነሱ ላይ ጥቅም ላይ እንዲውል አልተጠናም። የሚታወቀው ጥቃቱ በOpenBSD ላይ ሊደረግ አይችልም ምክንያቱም OpenBSD kernel execve() ሲጠራ ባዶ አርክ እሴት እንዲተላለፍ አይፈቅድም።

የpkexec ትዕዛዝ ከተጨመረበት ጊዜ ጀምሮ ችግሩ ከግንቦት 2009 ጀምሮ አለ። የPolKit ተጋላጭነት መጠገን በአሁኑ ጊዜ እንደ ጠጋኝ ሆኖ ይገኛል (ምንም ፕላስተር አልተለቀቀም) ነገር ግን የስርጭት ገንቢዎች ስለችግሩ አስቀድሞ ስለተነገራቸው፣ አብዛኛዎቹ ስርጭቶች ስለ ተጋላጭነቱ መረጃ ይፋ በማድረግ ማሻሻያውን በተመሳሳይ ጊዜ አሳትመዋል። ጉዳዩ በ RHEL 6/7/8፣ Debian፣ Ubuntu፣ openSUSE፣ SUSE፣ Fedora፣ ALT Linux፣ ROSA፣ Gentoo፣ Void Linux፣ Arch Linux እና Manjaro ውስጥ ተስተካክሏል። ተጋላጭነቱን ለመግታት እንደ ጊዜያዊ መለኪያ የ SUID root ባንዲራ ከ/usr/bin/pkexec ፕሮግራም ("chmod 0755 /usr/bin/pkexec") ማስወገድ ይችላሉ።



ምንጭ: opennet.ru

አስተያየት ያክሉ