Уязвимост Π² 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-Π±Π°ΠΉΡ‚ΠΎΠ² Π±ΡƒΡ„Π΅Ρ€. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅Π½ ΠΊΠΎΠ΄: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ остава Π½Π΅Ρ€Π΅ΡˆΠ΅Π½ Π² Debian, Ubuntu ΠΈ FreeBSD, Π½ΠΎ Π²Π΅Ρ‡Π΅ Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ Π² Arch Linux, Fedora, SUSE. Π’ RHEL уязвимостта Π½Π΅ сС появява ΠΏΠΎΡ€Π°Π΄ΠΈ сглобяванС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ FORTIFY_SOURCE, ΠΊΠΎΠΉΡ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½ΠΈΡ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° Π² Π½ΠΈΠ·ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€