Эксплуатируемые функции Python
Этот вопрос похож на Эксплуатируемые функции PHP.
Тонкие данные поступают от пользователя или, более конкретно, злоумышленника. Когда зараженная переменная достигает функции приемника, у вас есть уязвимость. Например, функция, которая выполняет sql-запрос, представляет собой приемник, а переменные GET/POST являются источниками taint.
Что все функции приемника в Python? Я ищу функции, которые вызывают уязвимость или слабость программного обеспечения. Меня особенно интересуют уязвимости удаленного кода. Существуют ли целые классы/модули, которые содержат опасные функциональные возможности? Есть ли у вас примеры интересных уязвимостей Python?
Ответы
Ответ 1
eval
и exec
- классики. Тем не менее, open
и file
тоже можно злоупотреблять:
open('/proc/kcore', 'w').write('0' * 1000 * 1000 * 1000)
Тогда есть модули os
, sys
, subprocess
и dircache
. Практически все, что касается файловой системы или может быть использовано для преобразования данных в исполняемый код (например, os.system
), будет в списке.
Как отметил С. Лотт в комментариях, запись в файловую систему и выполнение произвольных внешних программ не зависит от Python. Однако они заслуживают внимания аудиторов безопасности. Большинство из этих функций можно безопасно использовать без особой заботы о безопасности. eval
и exec
, с другой стороны, большие большие красные флаги. Их безопасное использование требует тщательного ухода.
Ответ 2
прямо из документа pickle:
Warning
The pickle module is not intended to be secure against erroneous or maliciously constructed data. Never unpickle data received from an untrusted or unauthenticated source.
Ответ 3
Я стремлюсь к параноику при поиске такого рода вещей. Тем более, что я склонен много метапрограммировать.
- большинство команд побочных эффектов (которые покрывают другие сообщения)
- манипуляция файлами (
open
, tarfile
, zipfile
,...)
- сетевые вызовы (
urllib2
, socket
,...)
- сериализация/персистентность данных (
pickle
, shelve
,...)
- управление процессами/потоками (
subprocess
, os.fork
, os.kill
,...)
- встроенные команды
-
getattr
-
setattr
-
delattr
-
eval
-
exec
-
execfile
-
__import__
И, вероятно, другие, которых я забываю. Я также опасаюсь ввода пользователем, проходящего через функции, где я изменяю sys.path, sys.modules и т.д.
Ответ 4
Модуль subprocess содержит неприятные функциональные возможности, которые не одобряют эти способы выполнения команд/процессов:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
Существует также exec, который выполнит код python и eval, который будет "оценивать" выражение и может использоваться для управления переменными.
Ответ 5
Функция input
, которая оценивает данную строку и возвращает результат, имеет некоторые ограничения, но все еще может быть использована.