Отравление сеанса
Отравление сеанса (также называемое «загрязнением данных сеанса» и «модификацией сеанса») — это метод использования недостаточной проверки входных данных в серверном приложении. Обычно серверное приложение, уязвимое для этого типа эксплойта, копирует вводимые пользователем данные в сеанса переменные .
Основная уязвимость — это проблема управления состоянием: общее состояние, состояние гонки , неоднозначность использования или простые незащищенные модификации значений состояния.
Отравление сеанса было продемонстрировано в серверных средах, где разные, не вредоносные приложения (скрипты) используют одни и те же состояния сеанса, но где использование различается, что приводит к неоднозначности и состояниям гонки.
Отравление сеанса было продемонстрировано в сценариях, когда злоумышленник может внедрить вредоносные сценарии в среду сервера, что возможно, если злоумышленник и жертва используют общий веб-хост.
Происхождение
[ редактировать ]Отравление сеанса впервые обсуждалось как (потенциально новый) класс уязвимостей в списке рассылки «Полное раскрытие» . [1] Алла Безручко поинтересовалась, не стала ли «уязвимость загрязнения сессионных данных в веб-приложениях» новой проблемой в январе 2006 года. Однако это была старая уязвимость, ранее отмеченная другими: «это классическая проблема управления состоянием» - Иван Бойли; [2] «Это не ново» - /кто-то. [3]
Более ранние примеры этих уязвимостей можно найти в основных ресурсах/архивах безопасности, таких как Bugtraq , например
- Июль 2001 г.: Серьезная дыра в безопасности в сервере сайта Mambo версии 3.0.X, автор Исмаэль Пейнадо Паломо изverseonline.com. [4]
- Сентябрь 2005 г., модификация PHP-сессии неизвестными (из uw-team) и adam_i. [5]
Загрязнение сеансов также рассматривается в некоторых статьях, таких как PHP Session Security, Przemek Sobstel, 2007. [6]
Примеры атак
[ редактировать ]Тривиальный сценарий атаки
[ редактировать ]Пример кода, уязвимого для этой проблемы:
Session("Login") = Request("login") Session("Username") = Request("username")
Который подвержен тривиальным атакам, таким как
vulnerable.asp?login=YES&username=Mary
Эта проблема может существовать в программном обеспечении, где
- Пользователь отправляет имя пользователя/пароль
logon.asp
- Если пароль для
Mary
выезжает,logon.asp
пересылает вvulnerable.asp?login=YES&username=Mary
Проблема в том, что vulnerable.asp
разработан с учетом того, что доступ к странице осуществляется только без вредоносного воздействия. Любой, кто понимает, как устроен сценарий, может создать HTTP-запрос, который произвольно устанавливает пользователя для входа в систему.
Использование неоднозначного или двойного использования одной и той же переменной сеанса.
[ редактировать ]Алла Безручко обсуждает сценарий, в котором $_SESSION['login']
используется для двух разных целей. [7]
- В сценариях входа в систему переменная сеанса хранит «Этот пользователь вошел в систему».
- В сценариях сброса пароля переменная сеанса хранит «этот пользователь хочет сбросить пароль».
Было продемонстрировано состояние гонки, при котором сценарии сброса можно было использовать для произвольного изменения вошедшего в систему пользователя.
Использование скриптов, позволяющих запись в произвольные переменные сеанса.
[ редактировать ]Алла Безручко обсуждает примеры, наблюдаемые на форумах разработчиков, которые позволяют записывать произвольные переменные сеанса. [8]
Первый пример
$var = $_GET["something"];
$_SESSION["$var"] = $var2;
(в котором $_GET["что-то"] вероятно из поля выбора или чего-то подобного).
Атака становится
vulnerable.php?something=SESSION_VAR_TO_POISON
Атаки отравления сеанса, активируемые php.ini: Register_globals = on
[ редактировать ]php.ini: register_globals = on
известно, что он допускает уязвимости безопасности в нескольких приложениях. Администраторам PHP- сервера рекомендуется отключить эту функцию.
Примечание. Реальные примеры отравления сеансов, включенные с помощью Register_globals = on, были публично продемонстрированы еще в июле 2001 года в статье «Серьезная дыра в безопасности в Mambo Site Server версии 3.0.X». [9]
Второй пример /someone: [10]
if ($condition1) {
$var = 'SOMETHING';
};
if ($condition2) {
$var = 'OTHER';
};
$_SESSION["$var"] = $var2;
который уязвим, если:
- Злоумышленник может сделать оба условия ложными.
- php.ini настроен неправильно (register_globals = on), что позволяет управлять значением по умолчанию $var с помощью ввода GPC (GET, POST или COOKIE).
Атака становится
vulnerable.php?var=SESSION_VAR_TO_POISON
Эксплойт с использованием общего PHP-сервера (например, общего веб-хостинга)
[ редактировать ]«Неизвестный» на сайте uw-team.org обсуждает сценарий, в котором злоумышленник и жертва используют один и тот же PHP-сервер. [11]
Атака довольно проста:
- Злоумышленник сначала посещает страницу жертвы и, например, входит в систему.
- Затем злоумышленник загружает PHP-скрипт в свою учетную запись и отображает контекст $_SESSION (установленный скриптом жертвы).
- Злоумышленник определяет, какую переменную необходимо изменить, загружает скрипт, который устанавливает эту переменную, и выполняет его.
- Злоумышленник посещает страницы жертвы, чтобы проверить, сработал ли ожидаемый эксплойт.
Для этой атаки требуется только, чтобы жертва и злоумышленник использовали один и тот же PHP-сервер. Атака не зависит от того, имеют ли жертва и злоумышленник одно и то же имя виртуального хоста, поскольку злоумышленнику нетрудно переместить файл cookie идентификатора сеанса из одного домена файлов cookie в другой.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Архив Неохапсиса 0414» .
- ^ «Архив Неохапсиса 0459» .
- ^ «Архив Неохапсиса 0423» .
- ^ «Архив секлистов 0569» .
- ^ «Архив секлистов 0193» .
- ^ «Лаборатории Segfault» (PDF) . Проверено 22 сентября 2007 г.
- ^ «Архив Неохапсиса 0414» .
- ^ «Архив Неохапсиса 0423» .
- ^ «Архив секлистов 0569» .
- ^ «Архив Неохапсиса 0423» .
- ^ «Архив секлистов 0193» .