ืคื’ื™ืขื•ืช ื‘-Python ื‘ืขืช ื˜ื™ืคื•ืœ ื‘ืžืกืคืจื™ื ืฉื‘ืจื™ื ืœื ืžืื•ืžืชื™ื ื‘-ctypes

ื–ืžื™ื ื•ืช ืžื”ื“ื•ืจื•ืช ืžืชืงื ื•ืช ืฉืœ ืฉืคืช ื”ืชื›ื ื•ืช Python 3.7.10 ื•-3.6.13, ืืฉืจ ืžืชืงื ื™ื ืคื’ื™ืขื•ืช (CVE-2021-3177) ืฉืขืœื•ืœื” ืœื”ื•ื‘ื™ืœ ืœื‘ื™ืฆื•ืข ืงื•ื“ ื‘ืขืช ืขื™ื‘ื•ื“ ืžืกืคืจื™ ื ืงื•ื“ื” ืฆืคื” ืœื ืžืื•ืžืชื™ื ื‘ืžื˜ืคืœื™ื ื”ืงื•ืจืื™ื ืœืคื•ื ืงืฆื™ื•ืช C ื‘ืืžืฆืขื•ืช ืžื ื’ื ื•ืŸ ctypes . ื”ื‘ืขื™ื” ืžืฉืคื™ืขื” ื’ื ืขืœ ืกื ื™ืคื™ Python 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 ื‘ืชื™ื. ื“ื•ื’ืžื” ืœืงื•ื“ ื‘ืขื™ื™ืชื™: ื™ื™ื‘ื•ื โ€‹โ€‹ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

ื”ื‘ืขื™ื” ื ื•ืชืจื” ืœื ืžืชื•ืงื ืช ื‘ื“ื‘ื™ืืŸ, ืื•ื‘ื•ื ื˜ื• ื•-FreeBSD, ืื‘ืœ ื›ื‘ืจ ืชื•ืงื ื” ื‘- Arch Linux, Fedora, SUSE. ื‘-RHEL, ื”ืคื’ื™ืขื•ืช ืื™ื ื” ืžืชืจื—ืฉืช ืขืงื‘ ื”ืจื›ื‘ืช ื—ื‘ื™ืœื” ื‘ืžืฆื‘ FORTIFY_SOURCE, ืืฉืจ ื—ื•ืกืžืช ื’ืœื™ืฉื” ื›ื–ื• ืฉืœ ืžืื’ืจ ื‘ืคื•ื ืงืฆื™ื•ืช ืžื—ืจื•ื–ืช.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”