لينڪس ڪرنل ۾ ڪمزوري جيڪا صرف پڙهڻ لاءِ فائلن کي خراب ٿيڻ جي اجازت ڏئي ٿي

لينڪس ڪرنل (CVE-2022-0847) ۾ هڪ خطري جي نشاندهي ڪئي وئي آهي جيڪا صفحي جي ڪيش جي مواد کي ڪنهن به فائل لاءِ اوور رائٽ ڪرڻ جي اجازت ڏئي ٿي، بشمول اهي جيڪي صرف پڙهڻ واري موڊ ۾ آهن، O_RDONLY پرچم سان کوليل آهن، يا فائل سسٽم تي واقع آهن. صرف پڙهڻ واري موڊ ۾ نصب ٿيل. عملي اصطلاحن ۾، ڪمزوريءَ کي استعمال ڪري سگھجي ٿو ڪوڊ داخل ڪرڻ لاءِ پاڻمرادو عمل يا کوليل فائلن ۾ خراب ڊيٽا. مثال طور، توهان sshd عمل لاء authorized_keys فائل جي مواد کي تبديل ڪري سگهو ٿا. استحصال جو هڪ پروٽوٽائپ جاچ لاءِ موجود آهي.

ان مسئلي کي ڪوڊنيم ڊريٽي پائپ رکيو ويو آهي، جيڪو 2016 ۾ سڃاڻپ ٿيل نازڪ ڪمزوري Dirty COW وانگر آهي. اهو نوٽ ڪيو وڃي ٿو ته خطري جي سطح جي لحاظ کان، گندي پائپ ساڳئي سطح تي گندي COW آهي، پر هلائڻ لاء تمام آسان آهي. نقصان جي نشاندهي ڪئي وئي هئي نيٽ ورڪ تي ڊائون لوڊ ڪيل فائلن جي وقتي ڪرپشن بابت شڪايتن جي تجزيي جي دوران هڪ سسٽم ۾ لاگ سرور کان ڪمپريس ٿيل آرڪائيوز ڊائون لوڊ ڪرڻ (37 ڪرپشن 3 مهينن ۾ لوڊ ٿيل سسٽم تي)، جنهن جي تياري ۾ استعمال ڪيو ويو splice() آپريشن ۽ اڻ ڄاتل پائپ.

لينڪس ڪنيل 5.8 سان شروع ٿيندڙ ڪمزوري ظاهر ٿئي ٿي، آگسٽ 2020 ۾ جاري ڪئي وئي، يعني. Debian 11 ۾ موجود آهي، پر Ubuntu 20.04 LTS ۾ بنيادي ڪنييل کي متاثر نٿو ڪري. RHEL 8.x ۽ openSUSE/SUSE 15 ڪنيل شروعاتي طور تي پراڻي شاخن تي ٻڌل آهن، پر اهو ممڪن آهي ته تبديلي جو سبب اهو مسئلو انهن ۾ واپس ڪيو ويو آهي (اڃا تائين ڪا درست ڊيٽا ناهي). توھان انھن صفحن تي تقسيم ۾ پيڪيج جي تازه ڪاري جي اشاعت کي ٽريڪ ڪري سگھو ٿا: Debian، SUSE، Ubuntu، RHEL، Fedora، Gentoo، Arch Linux. رليز 5.16.11، 5.15.25 ۽ 5.10.102 ۾ ڪمزوري لاءِ هڪ حل تجويز ڪيو ويو. فڪس کي Android پليٽ فارم ۾ استعمال ڪيل ڪتن ۾ پڻ شامل ڪيو ويو آهي.

ڪمزوريءَ جو سبب آهي ”بف->پرچم“ قدر جي شروعات نه ٿيڻ جي ڪري ڪمن جي ڪوڊ ۾ ڪاپي_page_to_iter_pipe() ۽ push_pipe()، ان حقيقت جي باوجود ته ميموري صاف نه ڪئي وئي آهي جڏهن هڪ ساخت کي مختص ڪرڻ دوران ۽ ڪجهه خاص استعمالن دوران. اڻ ڄاتل پائپ، ٻئي آپريشن مان هڪ قدر. هن خصوصيت کي استعمال ڪندي، هڪ غير استحقاق رکندڙ مقامي صارف پرچم ۾ PIPE_BUF_FLAG_CAN_MERGE قدر جي ظهور حاصل ڪري سگهي ٿو، جيڪو توهان کي صفحي جي ڪيش ۾ ڊيٽا اوور رائٽنگ کي منظم ڪرڻ جي اجازت ڏئي ٿو صرف خاص طور تي تيار ڪيل نامعلوم پائپ تي نئين ڊيٽا لکڻ سان.

حملي لاءِ، ٽارگيٽ فائل پڙهڻ جي قابل هجڻ لازمي آهي، ۽ جيئن ته پائپ تي لکڻ دوران رسائي جا حق چيڪ نه ڪيا ويا آهن، صفحي جي ڪيش ۾ متبادل پڻ فائلن لاءِ ٺاهي سگھجن ٿا جيڪي صرف پڙهڻ لاءِ نصب ٿيل پارٽيشنن ۾ واقع آهن (مثال طور، فائلن لاءِ c CD- ROM). صفحي جي ڪيش ۾ معلومات کي تبديل ڪرڻ کان پوء، فائل مان ڊيٽا پڙهڻ دوران، پروسيس اصل ڊيٽا نه، پر تبديل ٿيل ڊيٽا حاصل ڪندو.

آپريشن ھيٺ اچي ٿو ھڪڙو اڻ ڄاتل چينل ٺاھڻ ۽ ان کي صوابديدي ڊيٽا سان ڀرڻ لاءِ ان کي يقيني بڻائڻ لاءِ ته PIPE_BUF_FLAG_CAN_MERGE جھنڊو ان سان لاڳاپيل سڀني رنگن جي جوڙجڪ ۾ مقرر ڪيو ويو آھي. اڳيون، ڊيٽا چينل مان پڙهي ويندي آهي، پر پرچم پائپ_بفر جي جوڙجڪ جي سڀني مثالن ۾ pipe_inode_info انگن جي جوڙجڪ ۾ قائم رهي ٿو. هڪ ڪال to splice() پوءِ بنايو ويو آهي ڊيٽا کي پڙهڻ لاءِ ٽارگيٽ فائل مان هڪ نامعلوم پائپ ۾ ، شروع ٿيندڙ مطلوب آفسيٽ تي. جڏهن هن نامعلوم پائپ تي ڊيٽا لکي، PIPE_BUF_FLAG_CAN_MERGE جھنڊو سيٽ ٿيڻ جي ڪري، صفحي جي ڪيش ۾ ڊيٽا پائپ_بفر جي جوڙجڪ جو نئون مثال ٺاهڻ جي بدران اوور رائٽ ڪيو ويندو.

جو ذريعو: opennet.ru

تبصرو شامل ڪريو