[보안패치] 그누보드 4.33.09
4.33.09 (11.04.15)
: 아래 두개의 취약점은 한국인터넷진흥원(KISA)을 통하여
선린인터넷고등학교 1학년에 재학중인 강인욱님께서 알려 주셨습니다.
XSS 취약점
embed, object 태그를 막지 않는 경우의 우회적인 공격에 대한 취약점
lib/common.lib.php 의 두개 함수가 수정 되었습니다.
function conv_content($content, $html)
...
//$content = preg_replace("/(ex)(pression)/i", "ex$2", $content);
...
// 이런 경우를 방지함 <IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
$content = preg_replace("#\/\*.*\*\/#iU", "", $content);
$pattern = "";
$pattern .= "(e|&#(x65|101);?)";
$pattern .= "(x|&#(x78|120);?)";
$pattern .= "(p|&#(x70|112);?)";
$pattern .= "(r|&#(x72|114);?)";
$pattern .= "(e|&#(x65|101);?)";
$pattern .= "(s|&#(x73|115);?)";
$pattern .= "(s|&#(x73|115);?)";
$pattern .= "(i|&#(x6a|105);?)";
$pattern .= "(o|&#(x6f|111);?)";
$pattern .= "(n|&#(x6e|110);?)";
$content = preg_replace("/".$pattern."/i", "__EXPRESSION__", $content);
...
function bad_tag_convert($code)
...
if ($is_admin && $member[mb_id] != $view[mb_id]) {
//$code = preg_replace_callback("#(\<(embed|object)[^\>]*)\>(\<\/(embed|object)\>)?#i",
// embed 또는 object 태그를 막지 않는 경우 필터링이 되도록 수정
$code = preg_replace_callback("#(\<(embed|object)[^\>]*)\>?(\<\/(embed|object)\>)?#i",
create_function('$matches', 'return "<div class=\"embedx\">보안문제로 인하여 관리자 아이디로는 embed 또는 object 태그를 볼 수 없습니다. 확인하시려면 관리권한이 없는 다른 아이디로 접속하세요.</div>";'),
$code);
}
//return preg_replace("/\<([\/]?)(script|iframe)([^\>]*)\>/i", "<$1$2$3>", $code);
// script 나 iframe 태그를 막지 않는 경우 필터링이 되도록 수정
return preg_replace("/\<([\/]?)(script|iframe)([^\>]*)\>?/i", "<$1$2$3>", $code);
: 아래 두개의 취약점은 한국인터넷진흥원(KISA)을 통하여
선린인터넷고등학교 1학년에 재학중인 강인욱님께서 알려 주셨습니다.
XSS 취약점
embed, object 태그를 막지 않는 경우의 우회적인 공격에 대한 취약점
lib/common.lib.php 의 두개 함수가 수정 되었습니다.
function conv_content($content, $html)
...
//$content = preg_replace("/(ex)(pression)/i", "ex$2", $content);
...
// 이런 경우를 방지함 <IMG STYLE="xss:expr/*XSS*/ession(alert('XSS'))">
$content = preg_replace("#\/\*.*\*\/#iU", "", $content);
$pattern = "";
$pattern .= "(e|&#(x65|101);?)";
$pattern .= "(x|&#(x78|120);?)";
$pattern .= "(p|&#(x70|112);?)";
$pattern .= "(r|&#(x72|114);?)";
$pattern .= "(e|&#(x65|101);?)";
$pattern .= "(s|&#(x73|115);?)";
$pattern .= "(s|&#(x73|115);?)";
$pattern .= "(i|&#(x6a|105);?)";
$pattern .= "(o|&#(x6f|111);?)";
$pattern .= "(n|&#(x6e|110);?)";
$content = preg_replace("/".$pattern."/i", "__EXPRESSION__", $content);
...
function bad_tag_convert($code)
...
if ($is_admin && $member[mb_id] != $view[mb_id]) {
//$code = preg_replace_callback("#(\<(embed|object)[^\>]*)\>(\<\/(embed|object)\>)?#i",
// embed 또는 object 태그를 막지 않는 경우 필터링이 되도록 수정
$code = preg_replace_callback("#(\<(embed|object)[^\>]*)\>?(\<\/(embed|object)\>)?#i",
create_function('$matches', 'return "<div class=\"embedx\">보안문제로 인하여 관리자 아이디로는 embed 또는 object 태그를 볼 수 없습니다. 확인하시려면 관리권한이 없는 다른 아이디로 접속하세요.</div>";'),
$code);
}
//return preg_replace("/\<([\/]?)(script|iframe)([^\>]*)\>/i", "<$1$2$3>", $code);
// script 나 iframe 태그를 막지 않는 경우 필터링이 되도록 수정
return preg_replace("/\<([\/]?)(script|iframe)([^\>]*)\>?/i", "<$1$2$3>", $code);
첨부파일
|
댓글을 작성하시려면 로그인이 필요합니다.
로그인
댓글 36개
그누보드에만 해당하는 취약점은 아닙니다.
=======================================
근데 프로그램알고리즘,함수 저같은초보들은 설명들어도 모릅니다..그저 패치나오면
코드만 붙여넣거나 바꿔넣기 바빠요: 메모장기준 어느 파일의 몇번째줄 코드부분을 어떻게 바꿔라 ,수정해라 주석좀 꼭 달아주시면 감사하겠어요...예전에는 그렇게 해주셔서 따라하기가 쉬웠는데 언제부터 패치도 많아지구 일정한 프로그래머 수준의분들만 알아들을수 있는 내용만 덩그라니 올리시니
어느것을 찾아서 어떤부분을 수정하라는건지 헤메느라 곤욕이네요"""
파일하나만 비교하고 코드찾구 하는것두 엄청 힘든데 패치내용이 뜨면 덜커텅 겁부터 납니다ㅜ,ㅜ
http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=882
윗분 말씀 처럼 어디 몇번째 줄이라고 대충이라도 좀 알려 주시면 좋겠습니다.
초보에게는 어려움이 좀 있어요.
function conv_content($content, $html)
function bad_tag_convert($code)
그냥 다운로드 받아서 common.lib.php만 교체하면 됩니다
utf-8버전에서 관리자에서 보드를 생성했을 때에는 정확히 캐릭터셋이 utf-8_collection으로 되는데
보드 복사해서 생성하면 mysql의 캐릭터셋이 euckr_collection으로 생성됩니다.
다음 판올림 때에는 수정되면 좋겠습니다..ㅎ 수고 부탁드립니다~