பெரும்பாலான லினக்ஸ் விநியோகங்களில் ரூட் அணுகலை அனுமதிக்கும் போல்கிட்டில் முக்கியமான பாதிப்பு

உயர்நிலை அணுகல் உரிமைகள் தேவைப்படும் செயல்களைச் செய்ய வசதியற்ற பயனர்களை அனுமதிக்க விநியோகங்களில் பயன்படுத்தப்படும் போல்கிட் (முன்னர் பாலிசிகிட்) சிஸ்டம் பாகத்தில் உள்ள பாதிப்பை (CVE-2021-4034) Qualys கண்டறிந்துள்ளது. பாதுகாப்பற்ற உள்ளூர் பயனரை ரூட் செய்வதற்கும் கணினியின் முழுக் கட்டுப்பாட்டைப் பெறுவதற்கும் அவர்களின் சிறப்புரிமைகளை அதிகரிக்க இந்த பாதிப்பு அனுமதிக்கிறது. சிக்கல் PwnKit என்ற குறியீட்டுப் பெயரிடப்பட்டது மற்றும் பெரும்பாலான லினக்ஸ் விநியோகங்களில் இயல்புநிலை உள்ளமைவில் இயங்கும் ஒரு வேலை சுரண்டலை உருவாக்குவது குறிப்பிடத்தக்கது.

PolKit இன் pkexec பயன்பாட்டில் சிக்கல் உள்ளது, இது SUID ரூட் கொடியுடன் வருகிறது மற்றும் குறிப்பிட்ட PolKit விதிகளின்படி மற்றொரு பயனரின் சலுகைகளுடன் கட்டளைகளை இயக்க வடிவமைக்கப்பட்டுள்ளது. pkexec க்கு அனுப்பப்பட்ட கட்டளை வரி வாதங்களின் தவறான கையாளுதல் காரணமாக, ஒரு தகுதியற்ற பயனர் அங்கீகாரத்தைத் தவிர்த்து, அணுகல் விதிகள் அமைக்கப்பட்டிருந்தாலும், அவர்களின் குறியீட்டை ரூட்டாக இயக்கலாம். தாக்குதலுக்கு, PolKit இல் என்ன அமைப்புகள் மற்றும் கட்டுப்பாடுகள் குறிப்பிடப்பட்டிருந்தாலும் பரவாயில்லை, pkexec பயன்பாட்டுடன் இயங்கக்கூடிய கோப்பிற்கு SUID ரூட் பண்புக்கூறு அமைக்கப்பட்டால் போதும்.

ஒரு செயல்முறையைத் தொடங்கும் போது அனுப்பப்பட்ட கட்டளை வரி வாத எண்ணிக்கையின் (argc) செல்லுபடியை Pkexec சரிபார்க்காது. 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=name" NULL

பிரச்சனை என்னவென்றால், argv வரிசைக்குப் பிறகு சூழல் மாறிகள் கொண்ட நினைவகத்தில் envp வரிசை உள்ளது. எனவே, argv வரிசை காலியாக இருந்தால், சுற்றுச்சூழல் மாறிகள் (argv[1] envp[0] உடன் ஒத்ததாக மாறியது), அதன் உள்ளடக்கங்களைக் கட்டுப்படுத்தக்கூடிய வரிசையின் முதல் தனிமத்திலிருந்து உயர்ந்த சலுகைகளுடன் இயங்கும் கட்டளை பற்றிய தரவை pkexec பிரித்தெடுக்கிறது. தாக்குபவர் மூலம்.

argv[1] இன் மதிப்பைப் பெற்ற பிறகு, pkexec PATH இல் உள்ள கோப்பு பாதைகளை கணக்கில் எடுத்துக்கொண்டு, இயங்கக்கூடிய கோப்பிற்கான முழு பாதையையும் தீர்மானிக்க முயற்சிக்கிறது மற்றும் argv க்கு முழு பாதையுடன் சரத்திற்கு ஒரு சுட்டியை எழுதுகிறது[1], இது argv[1] envp[0] ஐ ஒத்திருப்பதால், முதல் சூழல் மாறியின் மதிப்பை மேலெழுதுவதற்கு வழிவகுக்கிறது. முதல் சூழல் மாறியின் பெயரைக் கையாள்வதன் மூலம், தாக்குபவர் மற்றொரு சூழல் மாறியை pkexec இல் மாற்றலாம், எடுத்துக்காட்டாக, "LD_PRELOAD" சூழல் மாறியை மாற்றவும், இது suid நிரல்களில் அனுமதிக்கப்படவில்லை, மேலும் அவர்களின் பகிரப்பட்ட நூலகத்தை ஏற்றுவதற்கு ஏற்பாடு செய்யலாம். செயல்முறை.

GCONV_PATH மாறியை மாற்றியமைத்தல் என்பது, g_printerr() செயல்பாட்டை அழைக்கும் போது மாறும் வகையில் ஏற்றப்படும், குறியீட்டு டிரான்ஸ்கோடிங் லைப்ரரிக்கான பாதையைத் தீர்மானிக்கப் பயன்படுகிறது, இதன் குறியீடு iconv_open() ஐப் பயன்படுத்துகிறது. GCONV_PATH இல் பாதையை மறுவரையறை செய்வதன் மூலம், அது நிலையான ஐகான்வி நூலகம் அல்ல, ஆனால் அதன் சொந்த நூலகம் என்பதைத் தாக்குபவர் உறுதிசெய்ய முடியும், pkexec இன்னும் இயங்கும் கட்டத்தில் பிழைச் செய்தி காட்டப்படும்போது, ​​ஹேண்ட்லர்கள் செயல்படுத்தப்படும். ரூட் உரிமைகள் மற்றும் துவக்கத்திற்கு முன் அனுமதிகள் சரிபார்க்கப்படும்.

நினைவகக் குறைபாட்டால் சிக்கல் ஏற்படுகிறது என்ற உண்மை இருந்தபோதிலும், வன்பொருள் கட்டமைப்பைப் பொருட்படுத்தாமல் நம்பகத்தன்மையுடன் மீண்டும் மீண்டும் பயன்படுத்த முடியும் என்பது குறிப்பிடத்தக்கது. தயாரிக்கப்பட்ட சுரண்டல் Ubuntu, Debian, Fedora மற்றும் CentOS ஆகியவற்றில் வெற்றிகரமாக சோதிக்கப்பட்டது, ஆனால் மற்ற விநியோகங்களிலும் பயன்படுத்தப்படலாம். அசல் சுரண்டல் இன்னும் பொதுவில் கிடைக்கவில்லை, இது அற்பமானது மற்றும் பிற ஆராய்ச்சியாளர்களால் எளிதாக மீண்டும் உருவாக்க முடியும் என்பதைக் குறிக்கிறது, எனவே பல பயனர் கணினிகளில் பேட்ச் புதுப்பிப்பை விரைவில் நிறுவுவது முக்கியம். போல்கிட் BSD அமைப்புகள் மற்றும் சோலாரிஸ் ஆகியவற்றிற்கும் கிடைக்கிறது, ஆனால் அவற்றைப் பயன்படுத்துவதற்கு ஆய்வு செய்யப்படவில்லை. Execve() என்று அழைக்கப்படும் போது, ​​OpenBSD கர்னல் பூஜ்ய argc மதிப்பை அனுப்ப அனுமதிக்காததால், OpenBSD இல் தாக்குதலை மேற்கொள்ள முடியாது என்பது அறியப்படுகிறது.

மே 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

கருத்தைச் சேர்