Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Может это старая новость, но сегодня в рассылке от securitylab.ru я увидел:
Программа: PunBB 1.2.16, возможно более ранние версии
Опасность: Низкая
Наличие эксплоита: Да
Описание:
Обнаруженные уязвимости позволяют удаленному пользователю произвести XSS нападение и произвести брут-форс атаку.
1. Уязвимость существует из-за ошибки в генераторе случайных чисел в функционале "Forgotten your password?". Злоумышленник может обнулить пароли пользователей, включая администраторов приложения. Для успешной эксплуатации уязвимости требуются валидные учетные данные.
2. Уязвимость существует из-за недостаточной обработки входных данных в параметре "get_host" в сценарии moderate.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта. Для успешной эксплуатации уязвимости целевой пользователь должен иметь привилегии модератора.
URL производителя: www.punbb.org
Решение: Установите последнюю версию 1.2.17 с сайта производителя.
Источники:
* PunBB <= 1.2.16 Blind Password Recovery Exploit
http://www.securitylab.ru/vulnerability/313600.php
http://www.securitylab.ru/poc/313599.php
Может кто-то хочет прокомментировать? Лично меня интересует вопрос как модифицировать код, чтобы не устанавливать 1.2.17..
2. Уязвимость существует из-за недостаточной обработки входных данных в параметре "get_host"
Это было опубликовано на данном форуме еще в январе месяце.
Может кто-то хочет прокомментировать? Лично меня интересует вопрос как модифицировать код, чтобы не устанавливать 1.2.17..
С 16 версии там минимальные изменения, за 20 минут все правим ручками.
Это было опубликовано на данном форуме еще в январе месяце.
Спасибо, значит опять секлаб отжигает
Спасибо, значит опять секлаб отжигает
Да не за что. Может еще отцы основатели что-нибудь другое скажут
1. Уязвимость существует из-за ошибки в генераторе случайных чисел в функционале "Forgotten your password?".
Вот эта бяка как-то больше напрягает. И я не понял есть ли защита от нее в 17 версии!?
http://punbb.org/download/changelogs/1. … 1.2.17.txt
* Fixed XSS vulnerability involving the get_host parameter. Reported by
Dante90.
Добавлено спустя 1 минуту 59 секунд:
0_0 ну и как теперь отредактировать пост? чето я совсем запутался - написал не то и найти edit немогу
Visman
http://punbb.org/download/patch/punbb-1 … 2.17.patch
там все это исправлено
Visman
http://punbb.org/download/patch/punbb-1 … 2.17.patch
там все это исправлено
Я при установке обновления ни где не заметил исправления генератора!?
Кроме того, что перестали его инициализировать начиная с версии 4.2.0 PHP.
И взлом через "Forgotten your password?" происходим путем подбора сгенерированного пароля простым перебором!
Защиты от этого в движке форума нет.
Пути решения:
1. Самый простой изменить длину генерируемого пароля. Но зарегившись на форуме, пользователь может узнать новую длину автопароля.
2. Запретить у админов и модераторов использовать эту функцию. Если всех знаешь, то это наиболее приемлимо.
3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум. Это хитрый план
Ваши мнения?
2. Запретить у админов и модераторов использовать эту функцию. Если всех знаешь, то это наиболее приемлимо.
3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум. Это хитрый план
вот это неплохо бы реализовать. имха, последний пункт вообще должен был быть золожен изначально в код
Visman, мнение совпадает
что изменилось в 1.2.17 удобно смотреть здесь: http://dev.punbb.org/log/trunk
не вижу никаких критических исправлений. такчто название темы "Несколько новых уязвимостей" мне напоминает заголовки желтых газет/сайтов.
Вот наваял мод за полтора часа по типу
2. Запретить у админов и модераторов использовать эту функцию. Если всех знаешь, то это наиболее приемлимо.
Вкл/выкл управляется из админки Разрешения
1. Выполнить в плагине DB management или в phpMyAdmin заменив #__ префиксом Вашей базы.
INSERT INTO #__config (conf_name, conf_value) VALUES('p_forb_rec', '1')
2. Открываем admin_permissions.php
3. После этого (~ 207 строка)
<tr>
<th scope="row">Разрешить дублирующие e-mail адреса</th>
<td>
<input type="radio" name="form[allow_dupe_email]" value="1"<?php if ($pun_config['p_allow_dupe_email'] == '1') echo ' checked="checked"' ?> /> <strong>Да</strong> <input type="radio" name="form[allow_dupe_email]" value="0"<?php if ($pun_config['p_allow_dupe_email'] == '0') echo ' checked="checked"' ?> /> <strong>Нет</strong>
<span>Будет ли позволено пользователям регистрироваться с e-mail адреса на который уже зарегистрирован другой пользователь. Если разрешиено, то при появлении дубликата предупреждающий e-mail высылается в список рассылки.</span>
</td>
</tr>
Добавляем это
<tr>
<th scope="row">Запретить восстановление паролей админов и модераторов</th>
<td>
<input type="radio" name="form[forb_rec]" value="1"<?php if ($pun_config['p_forb_rec'] == '1') echo ' checked="checked"' ?> /> <strong>Да</strong> <input type="radio" name="form[forb_rec]" value="0"<?php if ($pun_config['p_forb_rec'] == '0') echo ' checked="checked"' ?> /> <strong>Нет</strong>
<span>Ответ ДА закроет возможность подбора автопароля злоумышленникам, но админы и модераторы не смогут восстановить свой пароль.</span>
</td>
</tr>
4. Сохраните файл admin_permissions.php
5. Открываем login.php
6. Заменяем это (~ 138 строка)
$result = $db->query('SELECT id, username FROM '.$db->prefix.'users WHERE email=\''.$db->escape($email).'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
На это
$result = $db->query('SELECT id, username, group_id FROM '.$db->prefix.'users WHERE email=\''.$db->escape($email).'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
7. Заменяем этот цикл (~ 154 строка)
// Loop through users we found
while ($cur_hit = $db->fetch_assoc($result))
{
// Generate a new password and a new password activation code
$new_password = random_pass(8);
$new_password_key = random_pass(8);
$db->query('UPDATE '.$db->prefix.'users SET activate_string=\''.pun_hash($new_password).'\', activate_key=\''.$new_password_key.'\' WHERE id='.$cur_hit['id']) or error('Unable to update activation data', __FILE__, __LINE__, $db->error());
// Do the user specific replacements to the template
$cur_mail_message = str_replace('<username>', $cur_hit['username'], $mail_message);
$cur_mail_message = str_replace('<activation_url>', $pun_config['o_base_url'].'/profile.php?id='.$cur_hit['id'].'&action=change_pass&key='.$new_password_key, $cur_mail_message);
$cur_mail_message = str_replace('<new_password>', $new_password, $cur_mail_message);
pun_mail($email, $mail_subject, $cur_mail_message);
}
message($lang_login['Forget mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');
На этот
$errf = '';
// Loop through users we found
while ($cur_hit = $db->fetch_assoc($result))
{
if (!($pun_config['p_forb_rec'] == '1' && ($cur_hit['group_id'] == PUN_ADMIN || $cur_hit['group_id'] == PUN_MOD)))
{
// Generate a new password and a new password activation code
$new_password = random_pass(8);
$new_password_key = random_pass(8);
$db->query('UPDATE '.$db->prefix.'users SET activate_string=\''.pun_hash($new_password).'\', activate_key=\''.$new_password_key.'\' WHERE id='.$cur_hit['id']) or error('Unable to update activation data', __FILE__, __LINE__, $db->error());
// Do the user specific replacements to the template
$cur_mail_message = str_replace('<username>', $cur_hit['username'], $mail_message);
$cur_mail_message = str_replace('<activation_url>', $pun_config['o_base_url'].'/profile.php?id='.$cur_hit['id'].'&action=change_pass&key='.$new_password_key, $cur_mail_message);
$cur_mail_message = str_replace('<new_password>', $new_password, $cur_mail_message);
pun_mail($email, $mail_subject, $cur_mail_message);
}
else $errf.= htmlspecialchars($cur_hit['username']).$lang_common['ProhibitionUser'].'<br />';
}
message($errf.$lang_login['Forget mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');
8. Сохраните файл login.php
9. Открываем все файлы \lang\<язык>\common.php
10. Добавляем в массив элемент
'ProhibitionUser' => ' является модератором или администратором. Восстановление пароля запрещено!',
в каждом файле на своем языке.
11. Сохраните все файлы \lang\<язык>\common.php
12. Открываем profile.php
13. Заменем это (~ 59 строка)
$result = $db->query('SELECT activate_string, activate_key FROM '.$db->prefix.'users WHERE id='.$id) or error('Unable to fetch new password', __FILE__, __LINE__, $db->error());
list($new_password_hash, $new_password_key) = $db->fetch_row($result);
На это
$result = $db->query('SELECT activate_string, activate_key, group_id, username FROM '.$db->prefix.'users WHERE id='.$id) or error('Unable to fetch new password', __FILE__, __LINE__, $db->error());
list($new_password_hash, $new_password_key, $new_group_id, $new_username) = $db->fetch_row($result);
if ($pun_config['p_forb_rec'] == '1' && ($new_group_id == PUN_ADMIN || $new_group_id == PUN_MOD))
message(htmlspecialchars($new_username).$lang_common['ProhibitionUser']);
14. Сохраните файл profile.php
Проверял на локальном сервере, как будто бы работает
Над этим вариантом
3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум.
подумаю позже, как время появится.
Добавлено спустя 18 минут 3 секунды:
P.S. Забыл сказать, что после всех манипуляций нужно зайти в админку в Резрешения, поставить в появившемся переключателе Да или Нет и сохранить изменения. Обязательно!
А как можно протестировать эту штуку на своем форуме?
Я имею в виду действие эксплоита.
Редактировался coordinator (2008-03-02 21:53:29)
Обновление прошло успешно!
А как можно протестировать эту штуку на своем форуме?
Я имею в виду действие эксплоита.
Это вопрос к хакерам
Страницы 1
Тема закрыта