เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปƒเบ™ Python เป€เบกเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ•เบปเบงเป€เบฅเบเป€เบชเบ”เบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปƒเบ™ ctypes

เบเบฒเบ™เปเบเป‰เป„เบ‚เบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก Python 3.7.10 เปเบฅเบฐ 3.6.13 เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ, เป€เบŠเบดเปˆเบ‡เปเบเป‰เป„เบ‚เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ (CVE-2021-3177) เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ•เบปเบงเป€เบฅเบเบˆเบธเบ”เบฅเบญเบเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ C เป‚เบ”เบเปƒเบŠเป‰เบเบปเบ™เป„เบ ctypes. . เบšเบฑเบ™เบซเบฒเบเบฑเบ‡เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบชเบฒเบ‚เบฒ Python 3.8 เปเบฅเบฐ 3.9, เปเบ•เปˆเบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเบกเบฑเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบœเบนเป‰เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ›เปˆเบญเบเบญเบญเบเบกเบฒ (เบกเบตเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เปˆเบญเบเปƒเบ™เบงเบฑเบ™เบ—เบต 1 เบกเบตเบ™เบฒ).

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เป€เบเบตเบ”เบกเบฒเบˆเบฒเบ buffer overflow เปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ ctypes PyCARg_repr(), เป€เบŠเบดเปˆเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เปƒเบŠเป‰ sprintf เบ—เบตเปˆเบšเปเปˆเบ›เบญเบ”เป„เบž. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เป€เบžเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบซเบฑเบ™เป€เบ›เบฑเบ™ 'sprintf (buffer, ". ", self->tag, self->value.b)' เบˆเบฑเบ”เบชเบฑเบ™ static buffer เบ‚เบญเบ‡ 256 bytes ("char buffer[256]"), เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฒเบกเบฒเบ”เป€เบเบตเบ™เบ„เปˆเบฒเบ™เบตเป‰. เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบˆเบธเบ”เบญเปˆเบญเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ•เปเปˆเบเบฑเบšเบ„เบงเบฒเบกเบญเปˆเบญเบ™เปเบญ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบญเบ‡เบœเปˆเบฒเบ™เบ„เปˆเบฒ โ€œ1e300โ€, เป€เบŠเบดเปˆเบ‡เป€เบกเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบเบงเบดเบ—เบตเบเบฒเบ™ c_double.from_param, เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ‚เบฑเบ”เบ‚เป‰เบญเบ‡, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบญเบญเบเบกเบฒเบกเบต 308 เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ เปเบฅเบฐ เบšเปเปˆเป€เปเบฒเบฐเบชเบปเบกเบเบฑเบšเบ•เบปเบงเปœเบฑเบ‡เบชเบท. 256-byte buffer. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบšเบฑเบ™เบซเบฒ: ctypes เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ; x = ctypes.c_double.from_param(1e300); repr(x)

เบšเบฑเบ™เบซเบฒเบเบฑเบ‡เบšเปเปˆเบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™ Debian, Ubuntu เปเบฅเบฐ FreeBSD, เปเบ•เปˆเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบงเปƒเบ™ Arch Linux, Fedora, SUSE. เปƒเบ™ RHEL, เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบšเปเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบเบญเบšเบŠเบธเบ”เบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ” FORTIFY_SOURCE, เป€เบŠเบดเปˆเบ‡เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เบเบฒเบ™เบฅเบปเป‰เบ™เบšเบฑเบšเป€เบŸเบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™