GnuTLS میموری کی خرابی کے مسئلے کو پیچ کرتا ہے - ابھی اپ ڈیٹ کریں!

ماخذ نوڈ: 1603833

اوپن سورس دنیا میں سب سے مشہور کرپٹوگرافک لائبریری تقریباً یقینی ہے۔ اوپن ایس ایس ایل.

سب سے پہلے، یہ سب سے زیادہ استعمال ہونے والے میں سے ایک ہے، یہاں تک کہ زیادہ تر پلیٹ فارمز پر زیادہ تر ڈویلپرز نے اس کے بارے میں سنا ہے چاہے انہوں نے اسے براہ راست استعمال نہ کیا ہو۔

دوم، یہ شاید سب سے زیادہ عام کیا جانے والا ہے، افسوس کی بات ہے کہ ایک گندے بگ کی وجہ سے جسے کہا جاتا ہے دل کی بات جو آٹھ سال پہلے دریافت ہوا تھا۔

فوری طور پر پیچ کیے جانے کے باوجود (اور ان ڈویلپرز کے لیے موجود قابل اعتماد کاموں کے باوجود جو اپنے کمزور OpenSSL ورژنز کو جلد اپ ڈیٹ نہیں کر سکتے یا نہیں کر سکتے ہیں)، ہارٹ بلیڈ ایک طرح کا "شوکیس" بگ بنی ہوئی ہے، کم از کم اس لیے نہیں کہ یہ پہلے کیڑوں میں سے ایک تھا۔ اس کے دریافت کنندگان کے ذریعہ ایک جارحانہ PR گاڑی میں تبدیل ہوگیا۔

ایک متاثر کن نام، اپنا ایک لوگو، اور ایک سرشار ویب سائٹ کے ساتھ، Heartbleed تیزی سے ایک عالمی سائبر سیکیورٹی بن گیا۔ سپر اسٹوری، اور، بہتر یا بدتر کے لیے، نام کے تذکرے کے ساتھ جڑے ہوئے ہیں۔ اوپن ایس ایس ایل، گویا کوڈ سے خارج ہونے کے بعد بھی بگ کا خطرہ برقرار ہے۔

اوپن ایس ایس ایل سے آگے کی زندگی

لیکن کئی دوسری اوپن سورس کرپٹوگرافک لائبریریاں ہیں جو اوپن ایس ایس ایل کے ساتھ ساتھ یا اس کے بجائے بڑے پیمانے پر استعمال ہوتی ہیں، خاص طور پر موزیلا سمیت این ایس ایس (مختصرا نیٹ ورک سیکورٹی سروسز) اور GNU پروجیکٹ کا gnuTLS لائبریری.

جیسا کہ یہ ہوتا ہے، GnuTLS نے صرف ایک بگ کو پیچ کیا جس کے نام سے جانا جاتا ہے۔ CVE-2022-2509، منصوبے کی رپورٹ میں سیکورٹی مشاورتی GNUTLS-SA-2022-07-07.

یہ پیچ میموری کی خرابی کو ٹھیک کرتا ہے جسے a ڈبل فری.

ڈبل فری کی وضاحت کی۔

سیدھے الفاظ میں، ایک ڈبل فری خطرہ پیدا ہوتا ہے جب ایک پروگرامر آپریٹنگ سسٹم سے عارضی طور پر استعمال کرنے کے لیے میموری کا ایک بلاک مختص کرنے کو کہتا ہے…

…اور اسے واپس دے دیں تاکہ اسے پروگرام کے دیگر حصوں کے استعمال کے لیے آزاد کیے جانے والے قرضے کے بلاکس کی فہرست سے حذف کیا جا سکے۔

اور پھر غلطی سے سسٹم سے ایک ہی میموری بلاک کو دوبارہ خالی کرنے کو کہتا ہے۔

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

ایک ڈبل فری کے ساتھ نرمی سے نمٹنا جس کا فوری طور پر پتہ چلا ہے ایک مشکل مسئلہ ہے۔ C فنکشن جو میموری کو واپس دیتا ہے اسے پروٹو ٹائپ کیا جاتا ہے۔ void free(void *ptr); تاکہ آپ اس بلاک کے ایڈریس کو پاس کریں جسے آپ خالی کرنا چاہتے ہیں، لیکن واپسی کوڈ واپس نہ کریں۔ (اے سی کے ساتھ فنکشن void واپسی کی قیمت وہ ہے جسے دوسری پروگرامنگ زبانیں a کہتے ہیں۔ procedure: یہ آپ کے لیے کچھ کرتا ہے، لیکن اس کے پاس نتیجہ کی اطلاع دینے کا کوئی طریقہ نہیں ہے۔) اس طرح احتیاط سے لکھے گئے C کوڈ میں بھی یہ معلوم کرنے کا کوئی معیاری طریقہ نہیں ہے کہ کچھ غلط ہوا ہے۔ free()، اور اس وجہ سے خوبصورتی سے بند کرنے کی کوشش کرکے غلطی سے نمٹنے کا کوئی طریقہ نہیں ہے۔ ناگوار پروگرام کو یکطرفہ طور پر ختم کرنا ہی سسٹم کے لیے واحد محفوظ حل ہے۔

لیکن اگر میموری مختص کرنے والے کو احساس نہیں ہوتا ہے (شاید اس وجہ سے کہ وہی بلاک اسی پروگرام کے دوسرے حصے کے حوالے کر دیا گیا ہے، لہذا یہ بالکل اسی شکل میں "لون آؤٹ" کی فہرست میں واپس آ گیا ہے جیسا کہ پہلے تھا) ، پھر بری چیزیں ہونے کا امکان ہے۔

خاص طور پر، میموری مینیجر نادانستہ طور پر اور غیر متوقع طور پر اس کوڈ سے ڈبل فریڈ بلاک کو "ضبط" کر سکتا ہے جو اب اسے قانونی طور پر استعمال کر رہا ہے، اور اسے پروگرام کے کسی اور حصے کے لیے دوبارہ تفویض کر سکتا ہے، یہاں تک کہ بدنیتی پر مبنی کوڈ جس کا فائدہ اٹھانے کے لیے حملہ آور نے احتیاط سے وقت دیا ہے۔ بدانتظامی کی.

لہذا، آپ ایک ہی پروگرام کے دو حصوں کے ساتھ میموری کے ایک ہی حصے کو جوڑ سکتے ہیں۔

پروگرام کا ایک حصہ فرض کرتا ہے کہ یہ میموری کے مواد پر واضح طور پر بھروسہ کر سکتا ہے، کیونکہ یہ خود کو بلاک کا جائز "مالک" سمجھتا ہے۔

ایک ہی وقت میں، پروگرام کا ایک اور حصہ جانتا ہے کہ یہ پہلے حصے کو جان بوجھ کر ٹرپ کرنے کے لیے ڈیٹا کے ساتھ گڑبڑ کر سکتا ہے (یا اس کے ساتھ گڑبڑ کر سکتا ہے)۔

غلط کام کرنا صحیح کام کرتا ہے۔

ستم ظریفی یہ ہے کہ CVE-2022-2509 بگ GnuTLS میں سرٹیفکیٹ تصدیقی کوڈ میں موجود ہے۔

( ستم ظریفی یہ ہے کہ اگر آپ سوچ رہے ہوں تو کیا وہ سافٹ ویئر جو عام طور پر غیر محفوظ ہے کیونکہ یہ قابل اعتماد TLS کنکشنز کی جانچ پڑتال کی زحمت نہیں کرتا ہے اس مخصوص حفاظتی مسئلے سے محفوظ ہے۔)

مثال کے طور پر، جب آپ کسی ویب سائٹ (یا سرور کی دوسری قسم) پر جاتے ہیں جو TLS کے ساتھ محفوظ ہے، تو دوسری طرف عام طور پر آپ کو ایک ویب سرٹیفکیٹ بھیجے گا جو یہ بتاتا ہے کہ سرور واقعی اس تنظیم کی ملکیت ہے اور آپ کی توقع کی جاتی ہے۔

یقیناً، یہ دیکھتے ہوئے کہ کوئی بھی اپنی پسند کے نام سے ایک سرٹیفکیٹ بنا سکتا ہے، خود ایک خام سرٹیفکیٹ آپ کو زیادہ کچھ نہیں بتاتا، لہذا سرٹیفکیٹ کا مالک عام طور پر اس کمپنی سے ڈیجیٹل طور پر دستخط کرواتا ہے جس پر آپ کا براؤزر پہلے سے ہی بھروسہ کرتا ہے۔

عملی طور پر، سرٹیفکیٹ پر عام طور پر ایک سرٹیفکیٹ کے ذریعے دستخط کیے جاتے ہیں جو کہ بدلے میں، اس سرٹیفکیٹ کے ذریعے دستخط کیے جاتے ہیں جس پر آپ کا براؤزر بھروسہ کرتا ہے، لیکن حتمی نتیجہ وہی ہوتا ہے جسے کہا جاتا ہے۔ اعتماد کا سلسلہ جو کہ نام نہاد کی فہرست میں پہلے سے نصب شدہ سرٹیفکیٹ پر محفوظ طریقے سے ٹریس کیا جا سکتا ہے۔ قابل اعتماد حکام، اس نام سے بہی جانا جاتاہے جڑیں، جس کا نظم آپ کے براؤزر یا آپریٹنگ سسٹم کے ذریعے کیا جاتا ہے۔

سرٹیفکیٹ چین کی توثیق کرنے کے عمل کو آسان اور تیز کرنے کے لیے، بہت سے سرورز صرف اپنا سرٹیفکیٹ نہیں بھیجتے ہیں اور اسے براؤزر پر چھوڑ دیتے ہیں کہ وہ ایک قابل اعتماد جڑ تک "چین کا پیچھا کریں"۔

سرور میں عام طور پر اعتماد کا وہ سلسلہ شامل ہوتا ہے جس پر وہ انحصار کر رہا ہے، جسے اسے صرف ایک بار تعمیر کرنے کی ضرورت ہوتی ہے، تاکہ آپ کا براؤزر، یا جو بھی سافٹ ویئر سرٹیفکیٹ کی تصدیق کر رہا ہو، آسانی سے یہ چیک کر سکے کہ چین ڈیجیٹل طور پر درست ہے، اور پھر تصدیق کر سکے کہ آخری سرٹیفکیٹ زنجیر میں ایک سے مماثل ہے جس پر پہلے ہی بھروسہ ہے۔

اس صورت میں، GnuTLS فراہم کردہ سرٹیفکیٹ کی درست اور محفوظ طریقے سے تصدیق کرے گا، اس سے پہلے کہ اسے ذخیرہ کرنے کے لیے استعمال ہونے والے میموری بلاک کو خالی کیا جائے۔

لیکن اگر دوسرا سرا پہلے سے تیار کردہ سرٹیفکیٹ چین فراہم نہیں کرتا ہے، اس طرح GnuTLS کو خود سے چین بنانے اور چیک کرنے کے لیے چھوڑ دیا جاتا ہے، تو GnuTLS کوڈ غلطی سے فراہم کردہ سرٹیفکیٹ کو ذخیرہ کرنے کے لیے استعمال ہونے والی میموری کو آزاد کر دیتا ہے اس سے پہلے کہ وہ سلسلہ شروع ہو جائے۔ جانچ پڑتال کا عمل…

اور پھر چیک مکمل ہونے کے بعد اسے دوبارہ آزاد کر دیتا ہے۔

یہ ایک ڈبل فری حادثے کا سبب بنتا ہے، جو میموری کی خرابی کا باعث بن سکتا ہے، اس کے بعد پروگرام کریش ہو سکتا ہے۔

میلویئر کو امپلانٹ کرنے کے لیے کریش کو چروا رہا ہے۔

عام طور پر، یا کم از کم اکثر، کریش ایسے بے راہ روی کا باعث بنتے ہیں کہ آپریٹنگ سسٹم کو پتہ چلتا ہے کہ ناگوار پروگرام نے پروگرام کے عمل کے بہاؤ کا کنٹرول کھو دیا ہے - مثال کے طور پر، اگر پروگرام کسی بے ترتیب میموری ایڈریس پر چھلانگ لگاتا ہے اور ایک سے کوڈ چلانے کی کوشش کرتا ہے۔ میموری بلاک جو بالکل بھی مختص نہیں کیا گیا ہے۔

اس صورت میں، کریش سسٹم کی خرابی کو بھڑکا دے گا، اور اگرچہ اس قسم کے بگ کا غلط استعمال کیا جا سکتا ہے جسے کہا جاتا ہے سروس کا انکار (DoS) حملہ، جہاں پورا مقصد صرف حملہ آور ہونے والے پروگرام میں خلل ڈالنا ہوتا ہے، یہ اس کی قیادت نہیں کرتا ریموٹ کوڈ پھانسی (RCE)، جہاں اس کی بجائے ناقابل اعتماد اور ناپسندیدہ سافٹ ویئر کوڈ متحرک ہو جاتا ہے۔

لیکن جب بھی کوئی پروگرام کریش ہوتا ہے جسے حملہ آور اپنی مرضی سے بھڑکا سکتے ہیں، غیر بھروسہ مند ڈیٹا کی بنیاد پر جو انہوں نے خود فراہم کیا تھا، اس بات کا ہمیشہ خطرہ رہتا ہے کہ کریش اس طرح سے چرایا جا سکتا ہے کہ کریشنگ پروگرام کو غلط سمت میں لے جائے تاکہ یہ فراہم کردہ قابل عمل کوڈ میں کود جائے۔ حملہ آوروں کی طرف سے.

جیسا کہ آپ تصور کر سکتے ہیں، حملہ آور اکثر ایسی کمزوریوں کا فائدہ اٹھا کر مالویئر لگا سکتے ہیں، یا تو عارضی طور پر یا مستقل طور پر، بشرطیکہ وہ آپ کے کمپیوٹر میں غیر بھروسہ مند کوڈ کو انجیکشن لگائیں بغیر کوئی پاپ اپ انتباہ پیدا کیے بغیر پہلے اجازت لیں۔

کیا کیا جائے؟

کو اپ ڈیٹ کریں۔ تازہ ترین ورژن GnuTLS کا، جو ہے۔ 3.7.7 لکھنے کے وقت.

(یہ بگ بظاہر GnuTLS 3.6.0 میں متعارف کرایا گیا تھا، اور اس وقت سے لے کر اب تک اور 3.7.6 سمیت ہر ورژن میں موجود ہے۔)

نوٹ کریں کہ بہت ساری مقبول ایپلی کیشنز اور پروگرامنگ ٹول کٹس میں یا تو GnuTLS کو استعمال کرنے کے لیے شامل کیا جا سکتا ہے یا بنایا جا سکتا ہے، اگرچہ آپ کو اس کے بارے میں علم نہ ہو، جس میں شامل ہیں لیکن ان تک محدود نہیں: FFmpeg، GnuPG، Mplayer، QEMU، Rdesktop، Samba، Wget، Wireshark اور Zlib.

بہت سے لینکس یا *BSD پیکجز جو GnuTLS استعمال کرتے ہیں ایک مرکزی ورژن پر انحصار کریں گے جو خود آپ کے ڈسٹرو کے زیر انتظام ہے، لہذا جیسے ہی آپ کے ڈسٹرو کو یہ ورژن دستیاب ہو اسے اپ ڈیٹ کرنا یقینی بنائیں۔

مبارک پیچ!


ٹائم اسٹیمپ:

سے زیادہ ننگی سیکیورٹی