В языке Python обнаружена уязвимость, позволяющая обходить изоляцию
Возможность вызывать системные команды из скриптов на языке программирования Python, работающих в изолированных средах, обнаружена исследователем безопасности под псевдонимом kn32. 11 мая информация об уязвимости опубликована на pwn.win.
Уязвимость с исходном виде известна еще с 2012 года. Она была обнаружена в Python 2.7, но была перенесена и в Python 3. Проблема заключается в возможности обратиться к ранее освобожденным участкам оперативной памяти в СPython.
Считалось, что проблема не несет угрозу безопасности, но kn32 доказал обратное. Он создал эксплойт (сценарий для автоматизации эксплуатации уязвимости), который позволяет вызвать любую системную команду при работе из изолированной среды, когда нет доступа методам os.system.
Механизм работы заключается в получении адреса одной из функций в коде СPython. Затем на основании этого адреса вычисляется базовый адрес СPython и адрес функции system. Далее осуществляется переход по адресу system с передачей «/bin/sh» (командный обработчик Shell) в качестве первого аргумента.
Примечательно, что эксплойт написан без использования готовых библиотек на чистом Python и без установки лишних потенциально блокируемых механизмов. Это позволяет работать сценарию стабильно в разных условиях.