نسخههای اصلاحی زبان برنامهنویسی Python 3.7.10 و 3.6.13 موجود است که آسیبپذیری (CVE-2021-3177) را برطرف میکند که میتواند منجر به اجرای کد هنگام پردازش اعداد ممیز شناور نامعتبر در کنترلکنندههایی شود که توابع C را با استفاده از مکانیسم ctypes فراخوانی میکنند. . این مشکل شاخههای پایتون 3.8 و 3.9 را نیز تحت تأثیر قرار میدهد، اما بهروزرسانیهای آنها هنوز در وضعیت نامزد انتشار هستند (انتشار برای 1 مارس برنامهریزی شده است).
مشکل ناشی از سرریز بافر در تابع ctypes PyCArg_repr() است که به دلیل استفاده ناامن از sprintf رخ می دهد. به ویژه، برای پردازش نتیجه تبدیل 'sprintf(buffer, " ", 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