لینکس کرنل میں جڑ کا خطرہ اور سسٹم ڈی میں سروس سے انکار

Qualys کے سیکورٹی محققین نے لینکس کرنل اور سسٹمڈ سسٹم مینیجر کو متاثر کرنے والی دو کمزوریوں کی تفصیلات کا انکشاف کیا ہے۔ کرنل میں ایک کمزوری (CVE-2021-33909) مقامی صارف کو انتہائی نیسٹڈ ڈائریکٹریز کی ہیرا پھیری کے ذریعے روٹ رائٹس کے ساتھ کوڈ پر عمل درآمد کرنے کی اجازت دیتی ہے۔

خطرے کا خطرہ اس حقیقت سے بڑھ جاتا ہے کہ محققین پہلے سے طے شدہ ترتیب میں Ubuntu 20.04/20.10/21.04، Debian 11 اور Fedora 34 پر کام کرنے والے کام کرنے والے کارناموں کو تیار کرنے کے قابل تھے۔ یہ نوٹ کیا جاتا ہے کہ دیگر تقسیموں کا تجربہ نہیں کیا گیا ہے، لیکن نظریاتی طور پر بھی اس مسئلے کے لیے حساس ہیں اور ان پر حملہ کیا جا سکتا ہے۔ ہر جگہ سے مسئلہ ختم ہونے کے بعد کارناموں کا مکمل کوڈ شائع کرنے کا وعدہ کیا گیا ہے، لیکن فی الحال صرف محدود فعالیت کا ایک پروٹو ٹائپ دستیاب ہے، جس کی وجہ سے سسٹم کریش ہو جاتا ہے۔ مسئلہ جولائی 2014 سے موجود ہے اور 3.16 سے شروع ہونے والی کرنل ریلیز کو متاثر کرتا ہے۔ کمزوری کی اصلاح کو کمیونٹی کے ساتھ مربوط کیا گیا اور 19 جولائی کو دانا میں قبول کر لیا گیا۔ مرکزی تقسیم نے پہلے ہی اپنے کرنل پیکجز (Debian، Ubuntu، Fedora، RHEL، SUSE، Arch) کے لیے اپ ڈیٹس تیار کر لیے ہیں۔

کمزوری seq_file کوڈ میں آپریشن کرنے سے پہلے سائز_t سے int کنورژن کے نتیجے کو چیک کرنے میں ناکامی کی وجہ سے ہوتی ہے، جو ریکارڈز کی ترتیب سے فائلیں بناتا ہے۔ چیک کرنے میں ناکامی کے نتیجے میں ایک بہت ہی نیسٹڈ ڈائرکٹری ڈھانچہ (پاتھ کا سائز 1 GB سے زیادہ) بناتے وقت بفر کو خط لکھنا، بڑھتا اور حذف کرنا ہو سکتا ہے۔ نتیجے کے طور پر، ایک حملہ آور 10-بائٹ سٹرنگ حاصل کر سکتا ہے "//ڈیلیٹڈ" کو "-2 GB - 10 بائٹس" کے آفسیٹ پر لکھا گیا ہے جو مختص کردہ بفر سے فوراً پہلے والے علاقے کی طرف اشارہ کرتا ہے۔

تیار شدہ استحصال کو چلانے کے لیے 5 جی بی میموری اور 1 ملین مفت انوڈز کی ضرورت ہوتی ہے۔ ایکسپلائٹ mkdir() کو کال کرکے تقریباً دس لاکھ ذیلی ڈائریکٹریوں کا درجہ بندی بنانے کے لیے کام کرتا ہے تاکہ فائل پاتھ کا سائز 1 GB سے زیادہ ہو۔ اس ڈائرکٹری کو بائنڈ ماؤنٹ کے ذریعے ایک علیحدہ صارف نام کی جگہ میں نصب کیا جاتا ہے، جس کے بعد اسے ہٹانے کے لیے rmdir() فنکشن چلایا جاتا ہے۔ متوازی طور پر، ایک دھاگہ بنایا جاتا ہے جو ایک چھوٹا ای بی پی ایف پروگرام لوڈ کرتا ہے، جسے ای بی پی ایف سیڈوکوڈ چیک کرنے کے بعد اسٹیج پر بلاک کردیا جاتا ہے، لیکن اس کی جے آئی ٹی کی تالیف سے پہلے۔

غیر مراعات یافتہ صارف نام کی جگہ میں، فائل /proc/self/mountinfo کو کھولا جاتا ہے اور بائنڈ ماونٹڈ ڈائرکٹری کا لمبا پاتھ نام پڑھا جاتا ہے، جس کے نتیجے میں بفر شروع ہونے سے پہلے اس علاقے میں سٹرنگ "//deleted" لکھا جاتا ہے۔ لائن لکھنے کے لیے پوزیشن کا انتخاب کیا جاتا ہے تاکہ یہ پہلے سے ٹیسٹ شدہ لیکن ابھی تک مرتب نہ کیے گئے eBPF پروگرام میں دی گئی ہدایات کو اوور رائٹ کر دے۔

اس کے بعد، eBPF پروگرام کی سطح پر، بے قابو آؤٹ آف بفر تحریر کو btf اور map_push_elem ڈھانچے کی ہیرا پھیری کے ذریعے دیگر کرنل ڈھانچے کو پڑھنے اور لکھنے کی کنٹرول شدہ صلاحیت میں تبدیل کر دیا جاتا ہے۔ نتیجے کے طور پر، استحصال کرنل میموری میں modprobe_path[] بفر کے مقام کا تعین کرتا ہے اور اس میں موجود "/sbin/modprobe" کے راستے کو اوور رائٹ کرتا ہے، جو آپ کو روٹ رائٹس کے ساتھ کسی بھی قابل عمل فائل کو شروع کرنے کی اجازت دیتا ہے۔ request_module() کال، جس پر عمل کیا جاتا ہے، مثال کے طور پر، نیٹ لنک ساکٹ بناتے وقت۔

محققین کئی ایسے حل فراہم کرتے ہیں جو صرف ایک مخصوص استحصال کے لیے موثر ہوتے ہیں، لیکن خود مسئلہ کو ختم نہیں کرتے۔ ایک علیحدہ صارف ID نام کی جگہ میں بڑھتے ہوئے ڈائریکٹریز کو غیر فعال کرنے کے لیے "/proc/sys/kernel/unprivileged_userns_clone" کو 0 اور کرنل میں eBPF پروگراموں کو لوڈ کرنے کو غیر فعال کرنے کے لیے "/proc/sys/kernel/unprivileged_bpf_disabled" کو 1 پر سیٹ کرنے کی سفارش کی جاتی ہے۔

یہ قابل ذکر ہے کہ ایک متبادل حملے کا تجزیہ کرتے ہوئے جس میں ایک بڑی ڈائرکٹری کو ماؤنٹ کرنے کے لیے بائنڈ ماؤنڈ کے بجائے FUSE میکانزم کا استعمال شامل ہے، محققین کو ایک اور کمزوری (CVE-2021-33910) کا سامنا کرنا پڑا جو سسٹمڈ سسٹم مینیجر کو متاثر کرتا ہے۔ یہ پتہ چلا کہ جب FUSE کے ذریعے 8 MB سے زیادہ پاتھ سائز والی ڈائرکٹری کو ماؤنٹ کرنے کی کوشش کی جاتی ہے، تو کنٹرول انیشیلائزیشن پروسیس (PID1) اسٹیک میموری سے باہر ہو جاتا ہے اور کریش ہو جاتا ہے، جو سسٹم کو "گھبراہٹ" کی حالت میں رکھتا ہے۔

مسئلہ یہ ہے کہ سسٹمڈ /proc/self/mountinfo کے مواد کو ٹریک اور پارس کرتا ہے، اور unit_name_path_escape() فنکشن میں ہر ماؤنٹ پوائنٹ پر کارروائی کرتا ہے، جو strdupa() آپریشن کرتا ہے جو ڈیٹا کو متحرک طور پر مختص میموری کے بجائے اسٹیک پر رکھتا ہے۔ . چونکہ زیادہ سے زیادہ اسٹیک سائز RLIMIT_STACK کے ذریعے محدود ہے، اس لیے ماؤنٹ پوائنٹ تک بہت بڑے راستے پر کارروائی کرنے سے PID1 کا عمل کریش ہو جاتا ہے اور سسٹم بند ہو جاتا ہے۔ حملے کے لیے، آپ ایک انتہائی نیسٹڈ ڈائرکٹری کو ماؤنٹ پوائنٹ کے طور پر استعمال کرنے کے ساتھ مل کر آسان ترین FUSE ماڈیول استعمال کر سکتے ہیں، جس کا پاتھ سائز 8 MB سے زیادہ ہے۔

یہ مسئلہ systemd 220 (اپریل 2015) کے بعد سے ظاہر ہو رہا ہے، اسے پہلے ہی مین سسٹمڈ ریپوزٹری میں طے کیا جا چکا ہے اور تقسیم (Debian، Ubuntu، Fedora، RHEL، SUSE، Arch) میں طے کر دیا گیا ہے۔ خاص طور پر، سسٹمڈ ریلیز 248 میں سسٹمڈ کوڈ میں ایک بگ کی وجہ سے استحصال کام نہیں کرتا ہے جس کی وجہ سے /proc/self/mountinfo کی پروسیسنگ ناکام ہوجاتی ہے۔ یہ بات بھی دلچسپ ہے کہ 2018 میں بھی ایسی ہی صورتحال پیدا ہوئی اور جب لینکس کرنل میں CVE-2018-14634 کمزوری کے لیے ایک استحصال لکھنے کی کوشش کی گئی تو Qualys کے محققین کو systemd میں تین اہم کمزوریوں کا سامنا کرنا پڑا۔

ماخذ: opennet.ru

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