زیادہ تر لینکس ڈسٹری بیوشنز پر روٹ تک رسائی کی اجازت دینے والی پول کٹ میں نازک کمزوری۔

Qualys نے ڈسٹری بیوشن میں استعمال ہونے والے Polkit (سابقہ ​​PolicyKit) سسٹم کے جزو میں ایک کمزوری (CVE-2021-4034) کی نشاندہی کی ہے تاکہ غیر مراعات یافتہ صارفین کو ایسے اقدامات کرنے کی اجازت دی جا سکے جن کے لیے رسائی کے بلند حقوق کی ضرورت ہوتی ہے۔ کمزوری ایک غیر مراعات یافتہ مقامی صارف کو اپنے مراعات کو جڑ تک بڑھانے اور سسٹم پر مکمل کنٹرول حاصل کرنے کی اجازت دیتی ہے۔ اس مسئلے کو PwnKit کا کوڈ نام دیا گیا تھا اور یہ ایک ورکنگ ایکسپلائٹ تیار کرنے کے لیے قابل ذکر ہے جو زیادہ تر لینکس ڈسٹری بیوشنز پر ڈیفالٹ کنفیگریشن میں چلتا ہے۔

مسئلہ PolKit کی pkexec یوٹیلیٹی میں موجود ہے، جو SUID روٹ فلیگ کے ساتھ آتا ہے اور اسے مخصوص PolKit قوانین کے مطابق دوسرے صارف کے مراعات کے ساتھ کمانڈ چلانے کے لیے ڈیزائن کیا گیا ہے۔ pkexec کو بھیجے گئے کمانڈ لائن آرگیومینٹس کی غلط ہینڈلنگ کی وجہ سے، ایک غیر مراعات یافتہ صارف توثیق کو نظرانداز کر سکتا ہے اور اپنے کوڈ کو روٹ کے طور پر چلا سکتا ہے، قطع نظر اس کے کہ رسائی کے قواعد سیٹ کیے گئے ہوں۔ حملے کے لیے، اس سے کوئی فرق نہیں پڑتا ہے کہ PolKit میں کون سی ترتیبات اور پابندیاں بیان کی گئی ہیں، یہ کافی ہے کہ SUID روٹ انتساب pkexec یوٹیلیٹی کے ساتھ قابل عمل فائل کے لیے سیٹ کیا جائے۔

Pkexec کسی عمل کو شروع کرتے وقت پاس کی گئی کمانڈ لائن آرگیومنٹ کاؤنٹ (argc) کی درستگی کی جانچ نہیں کرتا ہے۔ pkexec کے ڈویلپرز نے فرض کیا کہ argv array میں پہلی انٹری ہمیشہ عمل کا نام (pkexec) پر مشتمل ہوتی ہے، اور دوسری یا تو NULL قدر یا pkexec کے ذریعے شروع کی گئی کمانڈ کا نام۔ چونکہ آری کے اصل مشمولات کے خلاف دلیل کی گنتی کی جانچ نہیں کی گئی تھی اور اسے ہمیشہ 1 سے زیادہ سمجھا جاتا تھا، اگر کسی عمل کو خالی آرگ وی سرنی پاس کیا جاتا ہے، جیسا کہ لینکس ایگزیکیو فنکشن اجازت دیتا ہے، pkexec NULL کو پہلی دلیل کے طور پر مانے گا ( عمل کا نام) اور اگلا بفر میموری سے باہر، جیسے صف کے بعد کے مشمولات۔ |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—+—-|—-+——+——|——| VVVVVV "پروگرام" "-آپشن" NULL "ویلیو" "PATH=name" NULL

مسئلہ یہ ہے کہ argv سرنی کے بعد میموری میں ایک envp سرنی ہے جس میں ماحولیاتی متغیرات ہیں۔ اس طرح، اگر argv array خالی ہے، 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 کے ساتھ چل رہا ہو۔ روٹ رائٹس اور لانچ کی اجازتوں کی جانچ پڑتال سے پہلے۔

یہ نوٹ کیا جاتا ہے کہ اس حقیقت کے باوجود کہ مسئلہ میموری کی خرابی کی وجہ سے ہے، اس کا استعمال ہارڈ ویئر کے فن تعمیر سے قطع نظر قابل اعتماد اور بار بار استحصال کیا جا سکتا ہے۔ تیار شدہ استحصال کا Ubuntu، Debian، Fedora اور CentOS پر کامیابی کے ساتھ تجربہ کیا گیا ہے، لیکن اسے دیگر تقسیم پر بھی استعمال کیا جا سکتا ہے۔ اصل استحصال ابھی تک عوامی طور پر دستیاب نہیں ہے، جس سے ظاہر ہوتا ہے کہ یہ معمولی ہے اور دوسرے محققین اسے آسانی سے دوبارہ بنا سکتے ہیں، اس لیے یہ ضروری ہے کہ جلد از جلد پیچ ​​اپ ڈیٹ کو ملٹی یوزر سسٹمز پر انسٹال کیا جائے۔ پولکٹ بی ایس ڈی سسٹمز اور سولاریس کے لیے بھی دستیاب ہے، لیکن ان پر استعمال کے لیے اس کا مطالعہ نہیں کیا گیا ہے۔ جو معلوم ہے وہ یہ ہے کہ حملہ OpenBSD پر نہیں کیا جا سکتا، کیونکہ OpenBSD کرنل ایک null argc ویلیو کو پاس کرنے کی اجازت نہیں دیتا ہے جب execve() کو بلایا جاتا ہے۔

pkexec کمانڈ کے اضافے کے بعد سے یہ مسئلہ مئی 2009 سے موجود ہے۔ 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

نیا تبصرہ شامل کریں