Раскрытие директории в модуле сессий
В LiveStreet CMS последней версии (1.0.2) обнаружена уязвимость, которая раскрывает пути на сервере, связанная с модулем сессий. Ошибка связана с отсутствием проверки типа значения для установки нового id сессии при подмене User Agent.
Для вызова ошибки php на сайте злоумышленнику нужно подменить свой user agent (ключ HTTP_USER_AGENT массива $_SERVER): добавить «Shockwave Flash» к строке агента или чтобы user agent начинался на «Adobe Flash Player». После этого достаточно передать любым способом (будь-то GET или POST запрос) на сервер параметр SSID как массив:
В результате вышеописанных действий из-за отсутствия проверки типа значения параметра SSID, значение которого попадает в регулярку для проверки (как иронично) на корректность значения, вызывает ошибку уровня E_WARNING:
После этого посыпятся и ошибки невозможности отправки заголовков:
Исправление ошибки для Livestreet cms версии 1.0.2:
В /engine/modules/session/Session.class.php найти 83 строку:
и заменить её на:
Исправление ошибки для Livestreet cms версии 0.5.*:
Нужно заменить 70 вышеуказанного файла строку на:
Файл с уже внесенными правками безопасности, которые описаны выше, для ЛС 1.0.2 можно скачать здесь.
Это кросспост из гида по livestreet cms.
- Уровень опасности: средний
- Тип: раскрытие имени пользователя (аккаунта) на сервере
- Версии движка, которые подвержены данной опасности: все версии, начиная с 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 комментариев