ctypes වල වලංගු නොවන භාගික සංඛ්‍යා හසුරුවන විට Python හි ඇති අවදානම

Python ක්‍රමලේඛන භාෂාවේ නිවැරදි නිකුතු 3.7.10 සහ 3.6.13 ලබා ගත හැකි අතර, ctypes යාන්ත්‍රණය භාවිතයෙන් C ශ්‍රිතයන් අමතන හසුරුවන්නෙහි වලංගු නොවන පාවෙන ලක්ෂ්‍ය අංක සැකසීමේදී කේත ක්‍රියාත්මක කිරීමට තුඩු දිය හැකි අවදානමක් (CVE-2021-3177) නිරාකරණය කරයි. . ගැටළුව Python 3.8 සහ 3.9 ශාඛා වලටද බලපාන නමුත් ඒවා සඳහා යාවත්කාලීන කිරීම් තවමත් නිකුතු අපේක්ෂක තත්ත්වයෙහි පවතී (නිකුතුව මාර්තු 1 දිනට සැලසුම් කර ඇත).

sprintf අනාරක්ෂිත ලෙස භාවිතා කිරීම නිසා ඇතිවන ctypes ශ්‍රිතය PyCArg_repr() හි බෆරය පිටාර ගැලීම නිසා ගැටළුව ඇතිවේ. විශේෂයෙන්ම, පරිවර්තනයේ ප්‍රතිඵලය සැකසීමට 'sprintf(buffer," ", self->tag, self->value.b)' විසින් බයිට් 256 ක ස්ථිතික බෆරයක් ("char buffer[256]") වෙන් කර ඇති අතර, ප්‍රතිඵලය මෙම අගය ඉක්මවිය හැක. යෙදුම්වල අවදානමට ඇති අවදානම පරීක්ෂා කිරීම සඳහා, ඔබට “1e300” අගය සම්මත කිරීමට උත්සාහ කළ හැකිය, එය c_double.from_param ක්‍රමය මඟින් සකසන විට බිඳ වැටීමකට තුඩු දෙනු ඇත, ප්‍රතිඵලයක් ලෙස ලැබෙන අංකයේ අක්ෂර 308ක් අඩංගු වන අතර එයට නොගැලපේ. 256-බයිට් බෆරය. ගැටළු සහගත කේතයේ උදාහරණය: ctypes ආනයනය කරන්න; x = ctypes.c_double.from_param(1e300); repr(x)

Debian, Ubuntu සහ FreeBSD හි ගැටළුව විසඳා නැත, නමුත් Arch Linux, Fedora, SUSE හි දැනටමත් විසඳා ඇත. RHEL හි, FORTIFY_SOURCE මාදිලියේ පැකේජ එකලස් කිරීම හේතුවෙන් අවදානමක් ඇති නොවේ, එය තන්තු ශ්‍රිතවල එවැනි බෆර පිටාර ගැලීම අවහිර කරයි.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න