Перейти к контенту
  • 0

IPB 1.3 Final, Обнаруженная потенциальная уязвимость


Вопрос

Приветствую всех.

 

Возможно, эта уязвимость уже была описана. Возможно, само слово "уязвимость" не совсем подходит для описания ситуации. Тем не менее, хотелось бы поделиться некоторой важной информацией с владельцами форумов IPB 1.3 Final.

 

Первопричина уязвимости: отсутствие проверки движком форума корректности введённого e-mail'а пользователя.

 

***

 

Подробно, как всё это выглядит...

 

После завершения регистрации, у пользователя есть возможность сменить адрес электронной почты. При этом IBP 1.3 допускает введение e-mail'а вида: http:[email protected]. Хотелось бы заметить, что введение http: перед e-mail'ом является относительно частой ошибкой новичков.

 

Следствия:

 

Первое следствие. Если такому пользователю кто-либо посылает Private Mail и если у такого пользователя стоит "Оповещение по e-mail о PM", отправитель письма немедленно получит сообщение "Could not send email".

 

Второе следствие, гораздо более неприятное. Если пользователь с таким "кривым" e-mail'ом подпишется на какой-либо раздел форума (то есть, попросит оповещать его о новых темах форума), то все участники, создавшие новую тему, будут получать сообщение "Could not send email" вместо страницы новой темы.

 

Третье следствие вытекает из второго. Поскольку человек, создавший новую тему, не видит результатов, он повторяет свой запрос на создание темы. Но снова видит "Could not send email", и опять повторяет запрос... И так до тех пор, пока он не догадается открыть собственно форум, где будет несколько новых тем-клонов.

 

И наконец, четвёртое, самое неприятное. Тут необходимо разъяснить термин "флуд-контроль".

 

Флуд-контроль - это встроенное в движок форума ограничение на количество запросов в единицу времени. Флуд-контроль применяется к новичкам форума, дабы ограничить их [возможно злокачественную] активность. Одним из наиболее важных применений флуд-контроля является обеспечение задержки между созданием новых постов и тем.

 

Что же получается в нашем случае подписки на новые темы с "кривого мыла"? Предположим, пользователь (руководствующийся злыми намерениями) зарегистрирует ещё один аккаунт на форуме (это не сложно, поскольку в распространённом случае не требуется подтверждения с e-mail, а повторения e-mail в базах данных нет из-за того, что e-mail уже заменён на "кривой"). Тогда, пользуясь этим аккаунтом, он может создавать неограниченное количество тем в том разделе форума, на который подписан первый аккаунт. В обход флуд-контроля.

 

***

 

Вышеописанные предположения были проверены на практике и подтвержились.

 

Решение, закрывающее возможность обойти флуд-контроль таким образом - очень простое. Добавить проверку на валидность e-mail, вводимого пользователем.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

2Dareean

Как всегда "гениально". И что это значит?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Библиотека PCRE это набор функций, реализующих подстановку патэрнов PCRE_NOTBOL или PCRE_NOTEOL :D

http://ru.php.net/manual/ru/ref.pcre.php

Изменено пользователем Jax
Ссылка на комментарий
Поделиться на других сайтах

  • 0
кстати недочет IPB, на той же иконбоарде после смены емаила идет реавториз, т.е. после смены емаила приходит пасс на новый емаил (кажеться так) вообщем идет повторная валидация емаила
Ссылка на комментарий
Поделиться на других сайтах

  • 0
Я такой мод на invize кажись видел. Хотя утверждать не берусь... Но гадом буду, точно где то видел.
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Видимо, необходимо было сразу привести код заплатки, my fault. Решение от человека, известного нам как Persona Non Grata.

 

Делает невозможным ввод некорректного адреса (меньше шести букв и содержащий недопустимые символы кроме @) при регистрации и при редактировании профиля.

 

В файле sources/Register.php ищем строку

$in_username = trim( str_replace( '|', '|' , $ibforums->input['UserName'] ) );
$in_password = trim($ibforums->input['PassWord']);
$in_email	= strtolower( trim($ibforums->input['EmailAddress']) );

$ibforums->input['EmailAddress_two'] = strtolower( trim($ibforums->input['EmailAddress_two']) );

и добавляем сразу после нее

if (!eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$", $ibforums->input['EmailAddress']) or !eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$", $ibforums->input['EmailAddress_two']))
{
   $std->Error( array( 'LEVEL' => 1, 'MSG' => 'invalid_email' ) );
}

Это запретит регистрироваться с "левым" мылом.

 

Перейдем к редактированию профайла. В sources/Usercp.php ищем

$email_one	= strtolower( trim($ibforums->input['in_email_1']) );
$email_two	= strtolower( trim($ibforums->input['in_email_2']) );

и добавляем после этих строк

if (!eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$", $ibforums->input['in_email_1']) or !eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$", $ibforums->input['in_email_2']))
{
   $std->Error( array( 'LEVEL' => 1, 'MSG' => 'invalid_email' ) );
}

 

Решение было испытано и работает.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Ац, плахой фикс )

 

Пробуем мыло admin[at]mail.co.uk ...

 

Вот вам регулярное выражение типа перл, которое нормально работает с поддоменами и ваще - оно нормальное )

 

/^[a-z0-9_\-]+@(([a-z0-9_\-]+)\.)+[a-z]{2,4}$/i

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Destruction, я не смог ввести admin[at]mail.co.uk

Смог [email protected] - но это и понятно.

Смог [email protected] - но это и не вызывает ошибки "Не могу отправить почту".

 

Поэтому, при всём уважении, остаюсь пока при своём.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.