cytypes میں غیر تصدیق شدہ فریکشنل نمبرز کو سنبھالتے وقت Python میں کمزوری۔

Python پروگرامنگ لینگویج 3.7.10 اور 3.6.13 کی اصلاحی ریلیز دستیاب ہیں، جو ایک کمزوری (CVE-2021-3177) کو ٹھیک کرتی ہیں جو ctypes میکانزم کا استعمال کرتے ہوئے C فنکشنز کو کال کرنے والے ہینڈلرز میں غیر تصدیق شدہ فلوٹنگ پوائنٹ نمبروں پر کارروائی کرتے وقت کوڈ پر عمل درآمد کا باعث بن سکتی ہیں۔ . مسئلہ Python 3.8 اور 3.9 برانچز کو بھی متاثر کرتا ہے، لیکن ان کے لیے اپ ڈیٹس ابھی بھی ریلیز امیدوار کی حیثیت میں ہیں (ریلیز 1 مارچ کو شیڈول ہے)۔

مسئلہ ctypes فنکشن PyCArg_repr() میں بفر اوور فلو کی وجہ سے ہے، جو sprintf کے غیر محفوظ استعمال کی وجہ سے ہوتا ہے۔ خاص طور پر، تبدیلی کے نتیجے پر کارروائی کرنے کے لیے 'sprintf(بفر، " ", self->tag, self->value.b)' نے 256 بائٹس ("char buffer[256]") کا ایک جامد بفر مختص کیا، جبکہ نتیجہ اس قدر سے تجاوز کر سکتا ہے۔ ایپلی کیشنز کی کمزوری کو جانچنے کے لیے، آپ "1e300" کی قدر کو پاس کرنے کی کوشش کر سکتے ہیں، جس پر c_double.from_param طریقہ سے کارروائی کرنے پر، کریش ہو جائے گا، کیونکہ نتیجے میں آنے والی تعداد 308 حروف پر مشتمل ہے اور اس میں فٹ نہیں ہوتی ہے۔ 256 بائٹ بفر۔ مسئلہ کوڈ کی مثال: درآمد کی قسمیں؛ x = ctypes.c_double.from_param(1e300)؛ repr(x)

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

ماخذ: opennet.ru

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