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

Исправление уязвимостей форумов


GiV

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

Обсуждение уязвимостей Вы найдете в этой теме

 

------------------------------------------------------------------

 

Исправление уязвимостей найденных Algol с Antichat.ru

 

Уязвимость связанная с extended тэгами , [sound] (Описание уязвимости)

Уязвимы форумы: Русский модифицированный 1.2.x и 1.3.х

 

Исправление производится в файле /sources/lib/post_parser.php

находим:

$txt = preg_replace( "#\[video\](.+?)\[/video\]#is", "<embed width=\"400\" height=\"300\" src=\\1 type=\"application/x-shockwave-video\">", $txt );
$txt = preg_replace( "#\[sound\](.+?)\[/sound\]#is", "<param name=\"BACKGROUNDCOLOR\" <br /><embed src=\\1 align=\"baseline\" border=\"0\" width=\"275\" height=\"40\" type=\"audio/x-pn-realaudio-plugin\" console=\"Clip1\" controls=\"ControlPanel\" autostart=\"true\">", $txt );

заменяем на

$txt = preg_replace( "#\[video\](\S+?)\[/video\]#ies", "\$this->regex_build_src('\\1', 'video')", $txt );
$txt = preg_replace( "#\[sound\](\S+?)\[/sound\]#ies", "\$this->regex_build_src('\\1', 'sound')", $txt );

и перед

function regex_build_url($url=array()) {

добавляем

function regex_build_src($src="", $type) {

if (!$src) return;
  
// clean up the ampersands
$src = preg_replace( "/&/" , "&" , $src );

// Make sure we don't have a JS link
$src = preg_replace( "/javascript:/i", "java script: ", $src );

// Do we have http:// at the front?

if ( ! preg_match("#^(http|ftp)://#", $src ) )
{
 $src = 'http://'.$src;
} 

switch ($type) {
 case 'video': $src="<embed width=\"400\" height=\"300\" src=\"{$src}\" type=\"application/x-shockwave-video\">"; break;
 case 'sound': $src="<param name=\"BACKGROUNDCOLOR\" <br /><embed src=\"{$src}\" align=\"baseline\" border=\"0\" width=\"275\" height=\"40\" type=\"audio/x-pn-realaudio-plugin\" console=\"Clip1\" controls=\"ControlPanel\" autostart=\"true\">"; break;
 default: return;
}

return $src;
 
}

 

Уязвимость связанная с вложением тэгов в , , (Описание уязвимости)

Уязвимы форумы: IPB версий 1.х.x и 2.0.х

 

Исправление производится в файле /sources/lib/post_parser.php

находим:

while ( preg_match( "#\[size=([^\]]+)\](.+?)\[/size\]#ies", $txt ) )
{
$txt = preg_replace( "#\[size=([^\]]+)\](.+?)\[/size\]#ies"    , "\$this->regex_font_attr(array('s'=>'size','1'=>'\\1','2'=>'\\2'))", $txt );
}
	 
while ( preg_match( "#\[font=([^\]]+)\](.*?)\[/font\]#ies", $txt ) )
{
$txt = preg_replace( "#\[font=([^\]]+)\](.*?)\[/font\]#ies"    , "\$this->regex_font_attr(array('s'=>'font','1'=>'\\1','2'=>'\\2'))", $txt );
}
	 
while( preg_match( "#\[color=([^\]]+)\](.+?)\[/color\]#ies", $txt ) )
{
$txt = preg_replace( "#\[color=([^\]]+)\](.+?)\[/color\]#ies"  , "\$this->regex_font_attr(array('s'=>'col' ,'1'=>'\\1','2'=>'\\2'))", $txt );
}

заменяем на:

while ( preg_match( "#\[size=([0-9]+)\](.+?)\[/size\]#is", $txt ) )
{
$txt = preg_replace( "#\[size=([0-9]+)\](.+?)\[/size\]#ies"    , "\$this->regex_font_attr(array('s'=>'size','1'=>'\\1','2'=>'\\2'))", $txt );
}
	 
while ( preg_match( "#\[font=([a-zA-Z]+)\](.*?)\[/font\]#is", $txt ) )
{
$txt = preg_replace( "#\[font=([a-zA-Z]+)\](.*?)\[/font\]#ies"    , "\$this->regex_font_attr(array('s'=>'font','1'=>'\\1','2'=>'\\2'))", $txt );
}
	 
while( preg_match( "#\[color=([a-zA-Z]+)\](.+?)\[/color\]#is", $txt ) )
{
$txt = preg_replace( "#\[color=([a-zA-Z]+)\](.+?)\[/color\]#ies"  , "\$this->regex_font_attr(array('s'=>'col' ,'1'=>'\\1','2'=>'\\2'))", $txt );
}

Внимание: данный способ решения разрешает только стандартные теги цвета, размера и шрифта. Т.е. те теги которые есть в форме ответа. Тэги вида , , работать не будут!

 

17.01.2005: Официальный патч. По предварительным данным он исправляет уязвимость, указанную выше этого текста.

 

Ссылки по теме:

Описание уязвимостей с www.securitylab.ru

Раздел Algol'a на Antichat.ru по уязвимостям IPB

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

Межсайтовый скриптинг в Invision Power Board (от 25 апреля 2005 | описание уязвимости)

Уязвимы форумы: IPB версий 2.0.х

 

Исправление производится в файле /sources/functions.php

 

находим

 function parse_incoming()
  {
              global $ibforums;

          $this->get_magic_quotes = get_magic_quotes_gpc();

Ниже вставляем:

           $_SERVER['QUERY_STRING'] = str_replace( "'", "&#39;", $_SERVER['QUERY_STRING'] );

Вместо &#39; должно быть " 39;" естественно без пробела...

 

и в файле ./sources/lib/msg_functions.php

Находим:

$old_title   = preg_replace( "/'/", " 39;", $std->txt_stripslashes($_POST['msg_title']) );

Заменяем на

$old_title   = $std->txt_htmlspecialchars($std->txt_stripslashes($_POST['msg_title']) );

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

SQL-инъекция и межсайтовый скриптинг в Invision Power Board (от 10 мая 2005)

Уязвимы форумы: IPB версий 1.3.x и 2.0.x

 

Исправление приведено здесь

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

SQL-инъекция и межсайтовый скриптинг в Invision Power Board (от 10 мая 2005 | описание уязвимости | autologin ver.1)

Уязвимы форумы: IPB версий 2.0.0 до 2.0.3

Отсутствует проверка входных данных при отображении результатов поиска в параметре 'highlite' сценария 'sources/topics.php'.

Необходимо срочно обновить версию форума до 2.0.4 (и выше)

 

SQL-инъекция существует из-за недостаточной обработки данных в сценарии 'sources/login.php'.

Исправление производится в файле sources/login.php

 

находим

$pid = $std->my_getcookie('pass_hash');

заменяем на

$pid = (preg_match('/^([0-9A-Za-z]){32}$/', $std->my_getcookie('pass_hash')))?$std->my_getcookie('pass_hash'):"";

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

SQL-инъекция в Invision Power Board (от 18 июля 2005 | описание уязвимости | autologin ver.2)

Уязвимы форумы: IPB версий 1.3.x до 2.0.x

 

Исправление производится в файле sources/login.php

 

находим

$pid = $std->my_getcookie('pass_hash');

заменяем на

$pid = (preg_match('/^([0-9A-Za-z]){32}$/', $std->my_getcookie('pass_hash')))?$std->my_getcookie('pass_hash'):"";

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

  • 1 месяц спустя...

XSS инъекции в Custom BB Codes и Attachments (от 2 сентября 2005)

Уязвимы форумы: IPB версий 2.0.х, 2.1.x

 

Исправления производятся в файле ./sources/lib/post_parser.php (строчки: 519-520)

 

Найти:

  if ( is_array( $ibforums->cache['bbcode'] ) and count( $ibforums->cache['bbcode'] ) )
 {

 

Добавить после:

 	 # XSS Clean
	 $t = preg_replace( "#javascript\:#is", "java script:", $t );
	 $t = str_replace(  "`"               , "& #96;"       , $t );

 

Пробел между & и # убрать!

 

Скачать прикрепленный к этому сообщению файл и закачать его на сервер. В архиве сохранена иерархия директорий, для простоты использования.

 

Изменение MIME-типов:

Мы так же рекоммендуем Вам изменить MIME-типы некоторых опасных файлов, которые разрешены на форуме для прикрепления.

Что необходимо проделать:

  • Войти в Адинистраторскую панель
  • Воспользоваться группой настроек Прикрепляемые файлы -> Типы прикрепляемых файлов
  • Отредактировать опции для файлов ".htm", ".html", ".txt", ".rtf", выставив в поле "MIME-тип файла" значение "unknown/unknown" (без ковычек)

ipb204update.zip

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

  • 4 месяца спустя...
  • 3 месяца спустя...
  • 4 недели спустя...
  • 1 месяц спустя...
  • 2 недели спустя...
  • 1 месяц спустя...

Исправление от 10 августа 2006 года (для IPB 2.0.x—2.1.x): «Обновление безопасности в IPB 2.1.x (10.08.06)».

 

 

Дубль решения (для обоих линеек Invision Power Board):

 

IPB 2.1.x:

Файл /sources/lib/func_topic_threaded.php, найти:

		//-----------------------------------------
	// Are we viewing Posts?
	//-----------------------------------------

	$post_id = intval($this->ipsclass->input['pid']);

заменить на:

		//-----------------------------------------
	// Are we viewing Posts?
	//-----------------------------------------

	$post_id = intval($this->ipsclass->input['pid']);

	if($post_id && !in_array($post_id, $this->pids))
	{
		$this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') );
	}

IPB 2.0.x:

Файл ./sources/lib/topic_threaded.php, найти:

		//-----------------------------------------
	// Are we viewing Posts?
	//-----------------------------------------

	$post_id = intval($ibforums->input['pid']);

заменить на:

		//-----------------------------------------
	// Are we viewing Posts?
	//-----------------------------------------

	$post_id = intval($ibforums->input['pid']);

	if($post_id && !in_array($post_id, $this->pids))
	{
		$std->Error( array( LEVEL => 1, MSG => 'missing_files') );
	}

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

  • 1 месяц спустя...

Исправление от 5 октября 2006 года (для IPB 2.1.x):

 

Файл ./sources/action_admin/member.php, найти:

			//-----------------------------------------
		// Avatar?
		//-----------------------------------------

		if ( $r['avatar_location'] and $r['avatar_type'] )
		{
			$avatar = $this->ipsclass->get_avatar( $r['avatar_location'], 1, '25x25', $r['avatar_type'] );

			if ( ! strstr( $avatar, 'width=' ) )
			{
				$avatar = str_replace( '<img', "<img width='25' height='25'", $avatar );
			}
		}
		else
		{
			$avatar = "<img src='{$this->ipsclass->skin_url}/images/memsearch_head.gif' border='0' />";
		}

заменить на:

			//-----------------------------------------
		// Avatar?
		//-----------------------------------------

		//-----------------------------------------
		// SECURITY UPDATE: Removing  user avatar
		//-----------------------------------------

		$avatar = "<img src='{$this->ipsclass->skin_url}/images/memsearch_head.gif' border='0' />";

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

  • 2 недели спустя...

Исправление от 17 октября 2006 года (для IPB 2.1.x)

 

Файл: ./sources/classes/bbcode/class_bbcode_core.php;

Приоритет: средний.

 

Функция: regex_check_image;

Строка 924;

Найти:

$default = "[img=".$url."]";

Заменить на:

$default = "[img=".str_replace( '[', ' 091;', $url )."]";

Найти:

if ( preg_match( "/[?&;]/", $url) )

Заменить на:

if ( preg_match( "/[?&;\<\[]/", $url) )

 

Функция: post_db_parse_bbcode;

Строка: 486;

Найти:

preg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match );

Заменить на:

preg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match );

if ( $row['bbcode_tag'] == 'snapback' )
{
$match[2][$i] = intval( $match[2][$i] );
}

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

  • 4 недели спустя...

Незначительное замечание по безопасности: «IP.Board 2.0.0—2.1.7: Замечание по безопасности».

Все версии IP.Board 2.0.0—2.1.7 имеют инструмент отладки SQL, позволяющий администраторам просматривать отладочную SQL-информацию. Это может быть полезно при диагностике проблем с базой, запросами и т.п.

 

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

 

Поэтому важно, чтобы SQL-отладчик был постоянно отключен, если в нем нет необходимости. Вы можете отключить его следующим образом:

Админцентр -> НАСТРОЙКИ -> Системные настройки -> Глобальные настройки

После этого Вам необходимо напротив настройки «Включить режим отладки SQL?» установить значение «Нет».

 

Заметим, что в стандартной поставке IP.Board этот пункт отключен по умолчанию. Если Вы не производили изменений в группе «Глобальные настройки», то Вам ничего не нужно изменять.

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

  • 5 месяцев спустя...
  • 1 месяц спустя...
  • 3 недели спустя...

Исправление от 11 июня 2007 года (для IPB 2.2.x)

 

Файл ./sources/action_public/xmlout.php, найти (в функции «profile_save_settings»):

		if( !$this->ipsclass->member['g_edit_profile'] )
	{
		@header( "Content-type: text/plain" );
		$this->class_ajax->print_nocache_headers();
		print 'error';
		exit();
	}

Добавить после:

		//----------------------------------------- 
	// Not the same member? 
	//----------------------------------------- 

	if ( ! $this->ipsclass->member['g_is_supmod'] ) 
	{ 
		if ( $member_id != $this->ipsclass->member['id'] ) 
		{ 
			$this->class_ajax->print_nocache_headers(); 
			$this->class_ajax->return_string( 'error' ); 
		} 
	}

ipb22x_11_june_07.zip

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

  • 2 месяца спустя...
  • 7 месяцев спустя...

XSS уязвимость в BB-кодах IP.Board версий 2.3.x от 20.02.08.

 

XSS уязвимость в BB-кодах IP.Board версий 2.3.x от 13.03.2008.

+ Устранение потенциальной опасности при использовании flash на форуме.

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

  • 9 месяцев спустя...
Гость
Эта тема закрыта для публикации сообщений.
×
×
  • Создать...

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

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