XE 보안 취약점 긴급 패치 배포합니다. 알립니다
2008.09.02 12:19 EDIT
INet Corp Security 연구소장이신 유동훈님(Xpl017Elz, x82)님께서 XE CSRF 보안 취약점 제보를 해주셨습니다.
CSRF 라는 공격 방법으로 XE 관리자 세션을 악용할 수 있게 하는 취약점입니다.
이 방법은 1.0.5 이전에 다른 분께 제보를 받아서 관리자 세션을 악용할 수 있는 것을 모두 막아 놓았는데 제가 미처 알지 못하는 방법으로 관리자 세션을 악용할 수 있는 취약점이 발견되었습니다.
func.inc.php.zip 파일을 다운받으시고 압축을 푸시면 func.inc.php 라는 파일이 나타납니다.
이 파일을 사용하시는 XE의 config 디렉토리에 있는 func.inc.php 파일위로 덮어쓰시면 패치는 완료됩니다.
다만 혹시 소스코드를 수정하셨거나 버전이 낮아서 문제가 있을 수 있으니 덮어쓰기 전에 config/func.inc.php 파일을 백업해 놓으세요.
그리고 다음과 같이 직접 수정하시면 됩니다.
config/func.inc.php 파일의 402번째줄부터 있는 removeHackTabk(), removeJsEvent(), removeSrcHack() 함수를 다음과 같은 코드로 바꾸시면 됩니다.
/**
* @brief iframe, script코드 제거
**/
function removeHackTag($content) {
// iframe 제거
$content = preg_replace("!<iframe(.*?)<\/iframe>!is", '', $content);
// script code 제거
$content = preg_replace("!<script(.*?)<\/script>!is", '', $content);
// meta 태그 제거
$content = preg_replace("!<meta(.*?)>!is", '', $content);
// style 태그 제거
$content = preg_replace("!<style(.*?)<\/style>!is", '', $content);
// XSS 사용을 위한 이벤트 제거
$content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content);
/**
* 이미지나 동영상등의 태그에서 src에 관리자 세션을 악용하는 코드를 제거
* - 취약점 제보 : 김상원님
**/
$content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeSrcHack, $content);
return $content;
}
function removeJSEvent($matches) {
$tag = strtolower($matches[1]);
if(preg_match('/(src|href)=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/(src|href)=("|\'?)javascript:/i','$1=$2_javascript:', $matches[0]);
return preg_replace('/ on([a-z]+)=/i',' _on$1=',$matches[0]);
}
function removeSrcHack($matches) {
$tag = strtolower(trim($matches[1]));
$buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0]));
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
$oXmlParser = new XmlParser();
$xml_doc = $oXmlParser->parse($buff);
// src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴
$src = $xml_doc->{$tag}->attrs->src;
$dynsrc = $xml_doc->{$tag}->attrs->dynsrc;
if(_isHackedSrc($src) || _isHackedSrc($dynsrc) ) return sprintf("<%s>",$tag);
return $matches[0];
}
function _isHackedSrc($src) {
if(!$src) return false;
if($src && preg_match('/javascript:/i',$src)) return true;
if($src) {
$url_info = parse_url($src);
$query = $url_info['query'];
$queries = explode('&', $query);
$cnt = count($queries);
for($i=0;$i<$cnt;$i++) {
$pos = strpos($queries[$i],'=');
if($pos === false) continue;
$key = strtolower(trim(substr($queries[$i], 0, $pos)));
$val = strtolower(trim(substr($queries[$i] ,$pos+1)));
if(($key == 'module' && $val == 'admin') || $key == 'act' && preg_match('/admin/i',$val)) return true;
}
}
return false;
}
아직 이 CSRF 공격방법을 이용한 취약점 공격 방법이 공개되지 않았기에 다소 시간적 여유는 있지만 최대한 빨리 패치하시기를 권해드립니다.
엮인글 2
http://www.xpressengine.com/17234648/e33/trackback
-
티 스토리 애드센스 코드 삽입방법 애드센스를 이용하시고자 하는 분들중 html에 익숙하지 않은 분들을 위하여 간단한 가이드를 만들었습니다. (물론 저도 잘 모릅니다. 여기저기서 배웠음) 일반적으로 애드센스 이용자들이 가장 선호하는 광고배치임과 동시에 통계적으로 수입이 가장 많이 발생하는 구역을 위주로 설명하겠습니다. 티 스토리를 선택한 이유는 티 스토리 이용자들의 상당수 사람들이 애드센스를 이용하고 있고, 그래서 이 밖의 여러 가지 팁이나 정보를 얻..
-
티 스토리 애드센스 코드 삽입방법 애드센스를 이용하시고자 하는 분들중 html에 익숙하지 않은 분들을 위하여 간단한 가이드를 만들었습니다. (물론 저도 잘 모릅니다. 여기저기서 배웠음) 일반적으로 애드센스 이용자들이 가장 선호하는 광고배치임과 동시에 통계적으로 수입이 가장 많이 발생하는 구역을 위주로 설명하겠습니다. 티 스토리를 선택한 이유는 티 스토리 이용자들의 상당수 사람들이 애드센스를 이용하고 있고, 그래서 이 밖의 여러 가지 팁이나 정보를 얻..
댓글 60
-
-
지금 1.0.5 버전 다운 받으려고 합니다.
이 패치도 해줘야 하나요? -
감사합니다 꾸벅 ^^
-
학교에 와보니 교수 서버에 해킹 흔적이 잇어서 문제를 찾아보고 있었는데 패치 해주셧군요 감사합니다.
-
이거 제로보드4에도 취약점 통합니다. 직접 시현해 보았습니다. ^^
제로보드4 사용자를 위한 패치도 필요할듯 하군요~ -
패치후 페이지 수정을 하려고 하니 로그인 페이지가 뜨더군요.
로그인후 모듈을 찾을수 없다는 메세지가 발생합니다.
이점 확인해보셔야 할듯 하네요.
거의 페이지를 사용하지 않다가 회사 홈페이지의 페이지 수정을 하다보니 이러한 문제가 발생되었습니다.
한번 확인해 주셨으면 감사하겠습니다. -
감사합니다. 버전 1.02에서 패치 덮어 씌우기 아직까지 이상없습니다. ~
-
1.0.2 버전에서도 func.inc.php 파일을 바로 덮어쓰기하신 건가요? 아니면 소스를 직접 수정하신 건가요?
-
바로 덮어써도 문제없을듯 ... 아님 소스고쳐도 똑같을테니..
-
고맙습니다. 1.0.2 에서도 패치파일을 덮어쓰기해서 잘 사용하고 있습니다. 아무런 문제 없군요. ^0^
-
고맙습니다~~꾸벅~항상 정보제공 넘 감사!
-
아..그렇군요....
감사히 사용 하겠습니다. -
흠.. CSRF라고 검색하니 위키피디아에서 이런 글이 뜨는군요CSRF vulnerabilities have been known and in some cases exploited since the 1990s.Because it is carried out from the user's IP address, CSRF is untraceable.Exploits are under-reported, at least publicly, and as of 2007 there are few well-documented examples. About 18 million users of eBay's Internet Auction Co. at Auction.co.kr in Korea lost personal information in February 2008. Customers of a bank in Mexico were attacked in early 2008 with an image tag in email and were sent through their homerouters to the wrong website. The year before, criminals hijacked a Google Gmail customer's Web domain.[5]
흠.. 올해 초 옥션도 CSRF로 당한거였군요. 몰랐어요 ㅡ.ㅡ;; -
너무 수고 많으셨습니다.
고맙습니다. -
감사합ㄴ니다
그리고 수고많으십니다.
덕분에 잘돌아 가고 잇습니다 -
수고가 많으세요. ^^
-
★관리자아이디로 로그인이안되는데 어떻게해결해야하는지요??★
-
로그인이되질않아 db비번을바꾸었더니 모들을찼을수없다고아예나오는군요~이황당한 경우를 어떻게해결해야하는지요~

-
홈페이지주소입니다~확인후해결방법을알려주시길바랍니다 ㅠㅜ
http://gabriel2007.hosting.paran.com/zbxe/ -
감사합니다 'ㅂ'
좀 늦은거같지만 업데이트를 완료하였습니다 ^^ -
감사합니다.
-
고맙습니다~ 패치완료했습니다!!
-
func.inc.php 파일위로 덮어쓴후 config/func.inc.php 파일의 402번째줄부터 있는 removeHackTabk(), removeJsEvent(), removeSrcHack() 함수를 다음과 같은 코드로 바꾸라고 하셨는데 서버상에 있는 func.inc.php 의 코드를 어떻게 하면 바꿀수 있습니까?
아니면 바꾼후에 덮어쓰기를 해야하는지.. 좀 가르쳐 주시면 감사하겠습니다. -
패치 감사합니다.
-
완전...초보라서 그런데.. ( XE의 config 디렉토리에 있는 func.inc.php 파일위로 ) config 디렉토리가 어디있는...걸까요..;;?^^;;
-
죠기 있답니다. ^-^ -
감사합니다.
-
감사합니당~~
-
1.0.6으로 업그레이드하면
패치 안해도 되는거 맞겠지요?? -
func.inc.php를 덮어쓰기를 했는데 관자페이지에서 게시판생성과 페이지생성 창이 열리지않습니다
메뉴생성과 레이아웃생상 기타는 정상적으로 작동됩니다
버젼은 xe1.1.5 입니다
Leave Comments
댓글 쓰기 권한이 없습니다. 회원 가입후에 사용 가능합니다
리스트로 돌아가보니 문서가 저장되어 있음..
리스트의 제목을 클릭하여도 문서가 열리지 않음...
이후 다른 게시판의 문서 클릭시 첨부파일이 있는 문서는 열리지가 않습니다.
엄청 급하네요... 누가 도와주세요..
참 문서 작성전 패치 설치는 했습니다. 그 후 이렇게 된건지는 모르겠습니다.
패치후 문서작성은 했었고 첨부파일있는 문서작성은 처음이였습니다.
다른 문의 사항은 쪽지 주세요.
꼭 봐주세요...ㅠㅠ
패치를 깔고 이런현상이 생기네요..