Ctiplərdə təsdiqlənməmiş kəsr ədədləri işləyərkən Python-da zəiflik

Python proqramlaşdırma dilinin 3.7.10 və 3.6.13 düzəldici buraxılışları mövcuddur ki, bunlar ctypes mexanizmindən istifadə edərək C funksiyalarını çağıran işləyicilərdə təsdiqlənməmiş üzən nöqtə nömrələrini emal edərkən kodun icrasına səbəb ola biləcək zəifliyi (CVE-2021-3177) düzəldir. . Problem Python 3.8 və 3.9 filiallarına da təsir edir, lakin onlar üçün yeniləmələr hələ də buraxılış namizədi statusundadır (buraxılış martın 1-nə planlaşdırılıb).

Problem ctypes PyCArg_repr() funksiyasında sprintf-dən təhlükəli istifadə nəticəsində yaranan bufer daşması ilə əlaqədardır. Xüsusilə, 256 bayt ölçüsündə statik bufer ("char bufer" [256]"), nəticə isə bu dəyəri keçə bilər. Tətbiqlərin zəifliyə qarşı həssaslığını yoxlamaq üçün c_double.from_param metodu ilə işləndikdə qəzaya səbəb olacaq “1e300” dəyərini keçməyə cəhd edə bilərsiniz, çünki nəticədə əldə edilən nömrə 308 simvoldan ibarətdir və bir nömrəyə uyğun gəlmir. 256 bayt bufer. Problemli kod nümunəsi: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Problem Debian, Ubuntu və FreeBSD-də həll edilməmiş qalır, lakin Arch Linux, Fedora, SUSE-də artıq həll edilib. RHEL-də zəiflik sətir funksiyalarında bufer daşqınlarını bloklayan FORTIFY_SOURCE rejimində paket yığılması səbəbindən baş vermir.

Mənbə: opennet.ru

Добавить комментарий