ΠΠ°Π»ΠΈΡΠ½ΠΈ ΡΠ° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΡΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ 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-Π±Π°ΠΉΡΠΎΠ² Π±ΡΡΠ΅Ρ. ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅Π½ ΠΊΠΎΠ΄: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ ΠΎΡΡΠ°Π²Π° Π½Π΅ΡΠ΅ΡΠ΅Π½ Π² Debian, Ubuntu ΠΈ FreeBSD, Π½ΠΎ Π²Π΅ΡΠ΅ Π΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ Π² Arch Linux, Fedora, SUSE. Π RHEL ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌ FORTIFY_SOURCE, ΠΊΠΎΠΉΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½ΠΈΡ Π½Π° Π±ΡΡΠ΅ΡΠ° Π² Π½ΠΈΠ·ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru