Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Python, ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… чисСл Π² ctypes

Доступны ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ выпуски языка программирования 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