Ctypes এ অপ্রমাণিত ভগ্নাংশ সংখ্যা পরিচালনা করার সময় পাইথনে দুর্বলতা

পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ 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-বাইট বাফার। সমস্যাযুক্ত কোডের উদাহরণ: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

ডেবিয়ান, উবুন্টু এবং ফ্রিবিএসডি-তে সমস্যাটি অনির্দিষ্ট রয়ে গেছে, তবে আর্চ লিনাক্স, ফেডোরা, SUSE-তে ইতিমধ্যেই ঠিক করা হয়েছে। RHEL-এ, FORTIFY_SOURCE মোডে প্যাকেজ সমাবেশের কারণে দুর্বলতা দেখা দেয় না, যা স্ট্রিং ফাংশনে এই ধরনের বাফার ওভারফ্লোকে ব্লক করে।

উত্স: opennet.ru

একটি মন্তব্য জুড়ুন