ΠΠΎΡΡΡΠΏΠ½Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΡΡΠΈΠ΅ Π²ΡΠΏΡΡΠΊΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python 3.7.10 ΠΈ 3.6.13, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΡΠ°Π½Π΅Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡ (CVE-2021-3177), ΡΠΏΠΎΡΠΎΠ±Π½Π°Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Ρ , Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ctypes. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ Π²Π΅ΡΠΊΠΈ Python 3.8 ΠΈ 3.9, Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ ΠΏΠΎΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ° Π² ΡΠ΅Π»ΠΈΠ·Ρ (ΡΠ΅Π»ΠΈΠ· Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ Π½Π° 1 ΠΌΠ°ΡΡΠ°).
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ·Π²Π°Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π±ΡΡΠ΅ΡΠ° Π² ctypes-ΡΡΠ½ΠΊΡΠΈΠΈ PyCArg_repr(), Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠ΅ΠΌ ΠΈΠ·-Π·Π° Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ sprintf. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ‘sprintf(buffer, «<cparam ‘%c’ (%d)>», 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