PHP ext/filter FDF Post Bypass Vulnerability
Обход ограничений безопасности
Краткое изложение
Начиная с PHP 5.2.0 прибавилось новое фильтрующее расширение, которое с одной стороны должно использоваться приложениями для ограничения входных данных пользователя, а с другой осуществлять широкую фильтрацию для сайта.
Однако в связи с "кривой" конструкцией можно подсмотреть данные
POST через фильтр, когда PHP компилируеться с помощью
FDF.
Под угрозой
PHP 5.2.0 и более ранние версии.
Детальная информация
Вместе с PHP 5 был добавлен ряд методов для фильтрации входных данных, которые использовались только Yahoo до тех пор, пока Hardened-PHP Project не взялись и не исправили несколько явных баг. Патч от Hardened-PHP вышел с спец. расширением, которое делало возможным использование методов для фильтрации входных данных по числу переменных, размере и форме.
Потом девелоперы PHP разработали
ext/filter, который должен быть в связке с PHP и сломали систему ограничений входных данных. Поскольку
ext/filter "поглощает" систему фильтрации входных данных и не возвращает управление предыдущей установленной системе, новые методы фильтрации бесполезны. Разработчики PHP знали что Hardened-PHP использовал эти методы но это не остановило их от умышленного разрушения.
Приёмы фильтрации входных данных разработаны так, что во всех местах где входные данные анализируются и регистрируются как переменные, идёт обращение к фильтру который решает что делать с этими переменными. Проблема здесь в том, что все расширения которые поддерживают другие контент-типы
POST также нуждаются в имплементации методов, иначе данные проходят просто без ограничений.
Пример эксплойта
Пример эксплойта который конвертирует массив
_POST в данные
POST в формате
application/vnd.fdf и передаёт его в URL, обходя фильтр вызванный
ext/filter - http://www.php-security.org/MOPB/code/MOPB-17-2007.php
Примечания
Новый способ фильтрации от PHP это очередное "кривое" свойство PHP, которое, наверно, принесёт ещё много головной боли разработчикам и, особенно, админам.
Во-первых, способы фильтрации размещены в плохом месте и, снова же, фильтрация будет иметь место только когда все загруженые расширения (включая сторонние), которые имеют отношение к входным данным, будут обращяться к методам фильтрации.
Во-вторых,
ext/filter написан таким образом что другие пользовательские расширения фильтрации не будут больше работать, поскольку
ext/filter убирает все способы ограничений и не проводит "шлейфовое соединение" (цепочкой). Разработчики PHP сознательно сломали этим расширение Hardened-PHP. Однако Suhosin который должен использоваться вместо HPHP в любом случае, таки работает с
ext/filter.
И последнее, но не менее важное это то, что
ext/filter есть, конечно, всего лишь необязательным расширением и может быть отключён администратором в любой момент и, следовательно, любое приложение PHP, которое полагается на него для фильтрации входных данных, будет работать только если установлены расширения фильтрации.
----
Источник: http://www.php-security.org/MOPB/MOPB-17-2007.html
Автор: Stefan Esser
Перевод: NeMiNeM
Специально для antichat.ru
ps: В статье/переводе возможны ошибки. Просьба не кричать, а спокойно указать и исправить
Спасибо.