Ctypes-д хүчингүй болсон бутархай тоотой ажиллах үед Python дахь эмзэг байдал

Ctypes механизмыг ашиглан C функцийг дуудаж буй зохицуулагчид шалгагдаагүй хөвөгч цэгийн тоонуудыг зохицуулах үед кодыг гүйцэтгэхэд хүргэж болзошгүй эмзэг байдлыг (CVE-2021-3177) шийдвэрлэх Python 3.7.10 ба 3.6.13-ын залруулах хувилбарууд бэлэн боллоо. Асуудал нь Python 3.8 болон 3.9-д мөн нөлөөлж байгаа боловч тэдгээрийн шинэчлэлтүүд одоогоор нэр дэвшигчийн статустай байна (хувилбарыг 3-р сарын 1-нд гаргахаар төлөвлөж байна).

Асуудал нь PyCArg_repr() ctypes функцийн буфер хэт ихэссэнээс үүдэлтэй бөгөөд энэ нь 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)

Асуудал шийдэгдээгүй хэвээр байна Debian, Ubuntu болон FreeBSD боловч Arch дээр аль хэдийн засагдсан байна Linux, Fedora, SUSE. RHEL-д, багцууд нь FORTIFY_SOURCE горимд бүтээгдсэн тул эмзэг байдал нь илэрдэггүй бөгөөд энэ нь мөр функцүүдэд ийм буферийн халилтуудыг хаадаг.

Эх сурвалж: opennet.ru

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster