• XSS.stack #1 – первый литературный журнал от юзеров форума

DoS RCE, Python 3.x <= 3.9.1, CVE-2021-3177

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 333
Доступны корректирующие выпуски языка программирования 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' (%f)>", self->tag, self->value.d)' выделялся статический буфер размером 256 байт ("char buffer[256]"), в то время как результат мог превышать данное значение. Для проверки подверженности приложений уязвимости можно попробовать передать значение "1e300", которое при обработке методом c_double.from_param приведёт к краху, так как результирующие число содержит 308 знаков и не умещается в 256-байтный буфер. Пример проблемного кода:
Python:
import ctypes
   x = ctypes.c_double.from_param(1e300)
   repr(x)
Релизы Python 3.9.2 и 3.8.8 с устранением уязвимости опубликованы раньше изначально намеченного срока.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
если допустим, я загружу на компутер жертвы питон версии без устранения этих уязвимостей, и они будут с той же цифровой подписью то я смогу воспользоваться этими уязвимостями*?
 
не-а, тут RCE только теоретическая, ибо не всегда переполнение буффера может заставить программу исполнить код атакующего. в данном случае не вижу способов здесь код исполнить из-за особенностей ctypes и того что со строками такой приём не прокатит
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх