Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2008-02-25 19:04:40

jimled
Гость

Несколько новых уязвимостей в PunBB

Может это старая новость, но сегодня в рассылке от 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 2008-02-25 19:11:02

Visman
Гость

Re: Несколько новых уязвимостей в PunBB

jimled пишет:

2. Уязвимость существует из-за недостаточной обработки входных данных в параметре "get_host"

Это было опубликовано на данном форуме еще в январе месяце.

jimled пишет:

Может кто-то хочет прокомментировать? Лично меня интересует вопрос как модифицировать код, чтобы не устанавливать 1.2.17..

С 16 версии там минимальные изменения, за 20 минут все правим ручками.

#3 2008-02-25 19:25:08

jimled
Гость

Re: Несколько новых уязвимостей в PunBB

Visman пишет:

Это было опубликовано на данном форуме еще в январе месяце.

Спасибо, значит опять секлаб отжигает smile

#4 2008-02-25 19:36:29

Visman
Гость

Re: Несколько новых уязвимостей в PunBB

jimled пишет:

Спасибо, значит опять секлаб отжигает

Да не за что. Может еще отцы основатели что-нибудь другое скажут smile

jimled пишет:

1. Уязвимость существует из-за ошибки в генераторе случайных чисел в функционале "Forgotten your password?".

Вот эта бяка как-то больше напрягает. И я не понял есть ли защита от нее в 17 версии!?

#5 2008-02-26 00:45:16

Dayset
Гость

Re: Несколько новых уязвимостей в PunBB

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 немогу

#6 2008-02-26 14:33:09

PunBBmaster
Гость

Re: Несколько новых уязвимостей в PunBB

Visman
http://punbb.org/download/patch/punbb-1 … 2.17.patch
там все это исправлено

#7 2008-02-26 19:11:47

Visman
Гость

Re: Несколько новых уязвимостей в PunBB

PunBBmaster пишет:

Visman
http://punbb.org/download/patch/punbb-1 … 2.17.patch
там все это исправлено

Я при установке обновления ни где не заметил исправления генератора!?
Кроме того, что перестали его инициализировать начиная с версии 4.2.0 PHP.

И взлом через "Forgotten your password?" происходим путем подбора сгенерированного пароля простым перебором!
Защиты от этого в движке форума нет.

Пути решения:
1. Самый простой изменить длину генерируемого пароля. Но зарегившись на форуме, пользователь может узнать новую длину автопароля.
2. Запретить у админов и модераторов использовать эту функцию. Если всех знаешь, то это наиболее приемлимо.
3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум. Это хитрый план smile

Ваши мнения?

#8 2008-02-27 11:18:10

CR
Гость

Re: Несколько новых уязвимостей в PunBB

Visman пишет:

2. Запретить у админов и модераторов использовать эту функцию. Если всех знаешь, то это наиболее приемлимо.
3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум. Это хитрый план

вот это неплохо бы реализовать. имха, последний пункт вообще должен был быть золожен изначально в код

#9 2008-02-27 11:34:27

artoodetoo
Гость

Re: Несколько новых уязвимостей в PunBB

Visman, мнение совпадает smile
что изменилось в 1.2.17 удобно смотреть здесь: http://dev.punbb.org/log/trunk
не вижу никаких критических исправлений. такчто название темы "Несколько новых уязвимостей" мне напоминает заголовки желтых газет/сайтов.

#10 2008-02-27 15:40:22

Visman
Гость

Re: Несколько новых уязвимостей в PunBB

Вот наваял мод за полтора часа по типу

Visman пишет:

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"' ?> />&nbsp;<strong>Да</strong>&nbsp;&nbsp;&nbsp;<input type="radio" name="form[allow_dupe_email]" value="0"<?php if ($pun_config['p_allow_dupe_email'] == '0') echo ' checked="checked"' ?> />&nbsp;<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"' ?> />&nbsp;<strong>Да</strong>&nbsp;&nbsp;&nbsp;<input type="radio" name="form[forb_rec]" value="0"<?php if ($pun_config['p_forb_rec'] == '0') echo ' checked="checked"' ?> />&nbsp;<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

Проверял на локальном сервере, как будто бы работает smile

Над этим вариантом

Visman пишет:

3. Дописать модуль для проверки количест безуспешных входов за определенный участок времени, при привышение числа попыток - блокировать ip адрес на страницах восстановления и входа на форум.

подумаю позже, как время появится.

Добавлено спустя     18 минут   3 секунды:
P.S. Забыл сказать, что после всех манипуляций нужно зайти в админку в Резрешения, поставить в появившемся переключателе Да или Нет и сохранить изменения. Обязательно!

#11 2008-03-02 21:23:14

coordinator
Гость

Re: Несколько новых уязвимостей в PunBB

А как можно протестировать эту штуку на своем форуме?
Я имею в виду действие эксплоита.

Редактировался coordinator (2008-03-02 21:53:29)

#12 2008-03-02 21:48:54

DocentX
Гость

Re: Несколько новых уязвимостей в PunBB

Обновление прошло успешно!

#13 2008-03-03 04:49:27

Visman
Гость

Re: Несколько новых уязвимостей в PunBB

coordinator пишет:

А как можно протестировать эту штуку на своем форуме?
Я имею в виду действие эксплоита.

Это вопрос к хакерам smile

Подвал доски

Под управлением FluxBB. Хостинг Hostens