Раскрытие директории в модуле сессий

В LiveStreet CMS последней версии (1.0.2) обнаружена уязвимость, которая раскрывает пути на сервере, связанная с модулем сессий. Ошибка связана с отсутствием проверки типа значения для установки нового id сессии при подмене User Agent.

  • Уровень опасности: средний
  • Тип: раскрытие имени пользователя (аккаунта) на сервере
  • Версии движка, которые подвержены данной опасности: все версии, начиная с 0.5, где была разрешена загрузка изображений с помощью flash.

Описание

Для вызова ошибки php на сайте злоумышленнику нужно подменить свой user agent (ключ HTTP_USER_AGENT массива $_SERVER): добавить «Shockwave Flash» к строке агента или чтобы user agent начинался на «Adobe Flash Player». После этого достаточно передать любым способом (будь-то GET или POST запрос) на сервер параметр SSID как массив:

http://site.com/?SSID[]=any_value


В результате вышеописанных действий из-за отсутствия проверки типа значения параметра SSID, значение которого попадает в регулярку для проверки (как иронично) на корректность значения, вызывает ошибку уровня E_WARNING:
Warning: preg_match() expects parameter 2 to be string, array given in /home/webmaster/www/site.com/www/engine/modules/session/Session.class.php on line 83


После этого посыпятся и ошибки невозможности отправки заголовков:

Warning:  session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent in /home/webmaster/www/site.com/www/engine/modules/session/Session.class.php on line 86

Warning:  session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/webmaster/www/site.com/www/engine/modules/session/Session.class.php:83) in /home/webmaster/www/site.com/www/engine/modules/session/Session.class.php on line 88


Решение

Исправление ошибки для Livestreet cms версии 1.0.2:

В /engine/modules/session/Session.class.php найти 83 строку:

if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {


и заменить её на:

if ($sUserAgent and (in_array($sUserAgent,$this->aFlashUserAgent) or strpos($sUserAgent,"Adobe Flash Player")===0) and is_string(getRequest('SSID')) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {


Исправление ошибки для Livestreet cms версии 0.5.*:

Нужно заменить 70 вышеуказанного файла строку на:
if (isset($_SERVER['HTTP_USER_AGENT']) and in_array($_SERVER['HTTP_USER_AGENT'],$this->aFlashUserAgent) and and is_string(getRequest('SSID')) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {


Файл с уже внесенными правками безопасности, которые описаны выше, для ЛС 1.0.2 можно скачать здесь.

Это кросспост из гида по livestreet cms.

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.