Подтвердить что ты не робот

Эксплуатируемые функции Python

Этот вопрос похож на Эксплуатируемые функции PHP.

Тонкие данные поступают от пользователя или, более конкретно, злоумышленника. Когда зараженная переменная достигает функции приемника, у вас есть уязвимость. Например, функция, которая выполняет sql-запрос, представляет собой приемник, а переменные GET/POST являются источниками taint.

Что все функции приемника в Python? Я ищу функции, которые вызывают уязвимость или слабость программного обеспечения. Меня особенно интересуют уязвимости удаленного кода. Существуют ли целые классы/модули, которые содержат опасные функциональные возможности? Есть ли у вас примеры интересных уязвимостей Python?

4b9b3361

Ответ 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, которая оценивает данную строку и возвращает результат, имеет некоторые ограничения, но все еще может быть использована.