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

Уязвимости форумов Invision Power Board


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

Добрый день всем:D

Версия форума 2.0.4.

Все заплатки ставил, что есть на этом форуме в соотвествующих темах.

 

Но сегодня показали вот такую дырку:

 

[EMAIL]a@[URL]http://123.com=``style=`background:url('java script:alert(/holla/)');`a=a/[/URL]a[/EMAIL][/QUOTE]

 

работает

 

прислали в пм, появляется алерт сообщение с сообщением "holla"

как лечить?;)

где латать?:)

спасибо

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

  • Ответы 1,2k
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

2.0.x + все заплатки => не прокатило

Аналогично!

2.0.4 + все заплатки в этой теме - ничё не выскакивает.

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

рубьятки

в носотях последняя уязвимость

дайте ручное испрвление для 204, а то там запостили только для 216

пасиба

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

Обновление 2.0.х касается двух файлов:

moderate.php

найти код

if ($ibforums->input['df'])
	{
		$html_forums = preg_replace( "/<option value=\"".$ibforums->input['df']."\"/", "<option value=\"".$ibforums->input['df']."\" selected", $html_forums );

и заменить на

if ($ibforums->input['df'])
	{
		$html_forums = preg_replace( "/<option value=\"".intval($ibforums->input['df'])."\"/", "<option value=\"".$ibforums->input['df']."\" selected", $html_forums );

post.php

найти код

function html_post_icons($post_icon="")
{
	global $ibforums;

	if ($ibforums->input['iconid'])
	{
		$post_icon = $ibforums->input['iconid'];
	}

	$ibforums->lang['the_max_length'] = $ibforums->vars['max_post_length'] * 1024;

	$html = $this->html->PostIcons();

	if ($post_icon) {
		$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']$post_icon\s?[\"']/", "name='iconid' value='$post_icon' checked", $html );
		$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']0[\"']\s*checked=['\"]checked['\"]/i"  , "name='iconid' value='0'", $html );
	}
	return $html;
}

и заменить на

function html_post_icons($post_icon="")
{
	global $ibforums;

	if ($ibforums->input['iconid'])
	{
		$post_icon = $ibforums->input['iconid'];
	}

	$ibforums->lang['the_max_length'] = $ibforums->vars['max_post_length'] * 1024;

	$html = $this->html->PostIcons();

	if ($post_icon) {
		$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']".intval($post_icon)."\s?[\"']/", "name='iconid' value='$post_icon' checked", $html );
		$html = preg_replace( "/name=[\"']iconid[\"']\s*value=[\"']0[\"']\s*checked=['\"]checked['\"]/i"  , "name='iconid' value='0'", $html );
	}
	return $html;
}

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

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

Обновление безопасности для 2.1.х от 19.06.2006 от Брендона (bfarber)

 

===================================================================
--- /Library/WebServer/Documents/invisionboard/sources/classes/bbcode/class_bbcode.php	(revision 275)
+++ /Library/WebServer/Documents/invisionboard/sources/classes/bbcode/class_bbcode.php	(revision 314)
@@ -111,15 +111,21 @@

		$txt = preg_replace( "/<br>|<br \/>/", "\n", $txt );

-		# XSS Clean
-		if( $this->strip_hex_entity )
+		# XSS Clean (Disabled, better fix found)
+		/*if ( $this->strip_hex_entity )
		{
-			while( preg_match( "/[&|&\;]#x(\w+?);/i", $txt ) )
+			preg_match_all( "/(?:&|&\;)#x(\w+?);/i", $txt, $match );
+			
+			for ( $i=0; $i < count($match[0]); $i++ )
			{
-				$txt = preg_replace( "/[&|&\;]#x(\w+?);/ies"		, "\$this->regex_bash_hex( '\\1' )" , $txt );
+				$_all = $match[0][ $i ];
+				$_hex = $this->regex_bash_hex( $match[1][ $i ] );
+				
+				$txt = str_replace( $_all, $_hex, $txt );
			}
+			
			$txt = preg_replace( "#&(?!\;)#", "", $txt );
-		}
+		}*/

		# First we did hex, now we do url encoded
		# <script
===================================================================
Index: /Library/WebServer/Documents/invisionboard/sources/classes/bbcode/class_bbcode_core.php
===================================================================
--- /Library/WebServer/Documents/invisionboard/sources/classes/bbcode/class_bbcode_core.php	(revision 293)
+++ /Library/WebServer/Documents/invisionboard/sources/classes/bbcode/class_bbcode_core.php	(revision 314)
@@ -1595,9 +1595,9 @@
		// clean up the ampersands / brackets
		//-----------------------------------------

-		$url['html'] = str_replace( "&" , "&"   , $url['html'] );
-		$url['html'] = str_replace( "["	 , "%5b" , $url['html'] );
-		$url['html'] = str_replace( "]"	 , "%5d" , $url['html'] );
+		$url['html'] = str_replace( "&", "&", $url['html'] );
+		$url['html'] = str_replace( "["		, "%5b"  , $url['html'] );
+		$url['html'] = str_replace( "]"		, "%5d"  , $url['html'] );

		//-----------------------------------------
		// Make sure we don't have a JS link
@@ -1624,7 +1624,7 @@
			$url['show'] = stripslashes($url['show']);
		}

-		$url['show'] = str_replace( "&" , "&" , $url['show'] );
+		$url['show'] = str_replace( "&", "&", $url['show'] );
		$url['show'] = preg_replace( "/java script:/i", "java script: ", $url['show'] );

		if ( (strlen($url['show']) -58 ) < 3 )  $skip_it = 1;

Basically, here are the instructions:

 

sources/classes/bbcode/class_bbcode_core.php:

 

Find (in function regex_build_url):

$url['html'] = str_replace( "&", "&", $url['html'] );

 

change to

 

$url['html'] = str_replace( "&", "&", $url['html'] );

 

Find:

 

$url['show'] = str_replace( "&", "&", $url['show'] );

 

change to

 

$url['show'] = str_replace( "&", "&", $url['show'] );

 

In sources/classes/bbcode/class_bbcode.php:

 

Find:

 

		# XSS Clean (Disabled, better fix found)
	if ( $this->strip_hex_entity )
	{
		preg_match_all( "/(?:&|&\;)#x(\w+?);/i", $txt, $match );

		for ( $i=0; $i < count($match[0]); $i++ )
		{
			$_all = $match[0][ $i ];
			$_hex = $this->regex_bash_hex( $match[1][ $i ] );

			$txt = str_replace( $_all, $_hex, $txt );
		}

		$txt = preg_replace( "#&(?!\;)#", "", $txt );
	}

 

and change to

 

		# XSS Clean (Disabled, better fix found)
	/*if ( $this->strip_hex_entity )
	{
		preg_match_all( "/(?:&|&\;)#x(\w+?);/i", $txt, $match );

		for ( $i=0; $i < count($match[0]); $i++ )
		{
			$_all = $match[0][ $i ];
			$_hex = $this->regex_bash_hex( $match[1][ $i ] );

			$txt = str_replace( $_all, $_hex, $txt );
		}

		$txt = preg_replace( "#&(?!\;)#", "", $txt );
	}*/

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

-=MIF=-

чета толи лыжи....

у меня версия 2.1.6, в sources/classes/bbcode/class_bbcode_core.php уже все заменено, а в sources/classes/bbcode/class_bbcode.php этого блока нет вообще. нет ли путаницы в версиях, для которых необходимо исправление? может это для версий младше 2.1.6?

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

Да в клиентской части форума тотже косяк разберают.

Такой ощущение, что у разрабов IBP версия какая-то более совершенная. :D

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

Странно, что никто не написал, что в 2.0.х есть аналогичные строки (bbcode_core)

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

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

Странно, что никто не написал, что в 2.0.х есть аналогичные строки (bbcode_core)
Да, есть

для 2.0.х возможно так:

 

sources/lib/post_parser.php

найти

							for ($i=0; $i < count($match[0]); $i++)
						{
															$tmp = $row['bbcode_replace'];
							$tmp = str_replace( '{content}', $match[2][$i], $tmp );
							$t   = str_replace( $match[0][$i], $tmp, $t );
						}

заменить на

							for ($i=0; $i < count($match[0]); $i++)
						{
							# XSS Check: Bug ID: 980
							if ( $row['bbcode_tag'] == 'post' OR $row['bbcode_tag'] == 'topic' )
							{
							$match[2][$i] = intval( $match[2][$i] );
							 }

							$tmp = $row['bbcode_replace'];
							$tmp = str_replace( '{content}', $match[2][$i], $tmp );
							$t   = str_replace( $match[0][$i], $tmp, $t );
						}

 

найти

$url['html'] = str_replace( "&" , "&" , $url['html'] );

заменить на

$url['html'] = str_replace( "&" , "&" , $url['html'] );

 

найти

$url['show'] = preg_replace( "&" , "&" , $url['show'] );

заменить на

$url['show'] = preg_replace( "&" , "&" , $url['show'] );

 

Народ! обратите внимание, что рещется код...

amp; пропало из исправлений: 1 & и 2 & надо оба раза в исправлении

и в оригинале первый & тоже исчез из кода

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

ну подождите

если бы была уязвимость для 2.0.х, то ИБР тим бы написали! а так они написали только для 21х

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

и снова непонятки. после опубликования новой заплатки в файле sources/classes/bbcode/class_bbcode_core.php у меня уже стоит вот такой код:

(хотя ничего пока не трогал)

for ($i=0; $i < count($match[0]); $i++)
					{
						# XSS Check: Bug ID: 980
						if ( $row['bbcode_tag'] == 'post' OR $row['bbcode_tag'] == 'topic' )
						{
							$match[2][$i] = intval( $match[2][$i] );
						}

						$tmp = $row['bbcode_replace'];
						$tmp = str_replace( '{option}' , $match[2][$i], $tmp );
						$tmp = str_replace( '{content}', $match[3][$i], $tmp );
						$t   = str_replace( $match[0][$i], $tmp, $t );
					}

вопрос: что лучше? оставить тот что есть, или все же поменять на то, что советуется:

			for ($i=0; $i < count($match[0]); $i++)
		{
					# XSS Check: Bug ID: 980
					if ( $row['bbcode_tag'] == 'post' OR $row['bbcode_tag'] == 'topic' )
					{
								$match[2][$i] = intval( $match[2][$i] );
					}

					$tmp = $row['bbcode_replace'];
					$tmp = str_replace( '{content}', $match[2][$i], $tmp );
					$t = str_replace( $match[0][$i], $tmp, $t );

		}

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


×
×
  • Создать...

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

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