Blog
XE 보안 취약점 긴급 패치 배포합니다.
2008.09.02 12:19
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 공격방법을 이용한 취약점 공격 방법이 공개되지 않았기에 다소 시간적 여유는 있지만 최대한 빨리 패치하시기를 권해드립니다.
- [2019/03/18] 포럼 XE 레이아웃 제작 일주일 코스
- [2019/01/18] 묻고답하기 모바일에서 서 레이아웃 비정상 문의드려요
- [2018/12/31] 묻고답하기 슬라이드 위젯 삽입 후 메뉴가 안보이네요 고수님들 부탁드립니다 *6
- [2018/11/21] Blog [XE3] XE Store 사업설명회 행사 안내 - 2018년 12월 5일 *2
- [2018/03/28] 묻고답하기 $oMail->setSender Sender 이메일 발신자가 공백으로 나옵니다. *3
댓글 60
-
skyatc
2008.09.02 12:26
감사합니다~ -
free4u.dnip.net
2008.09.02 13:12
function removeJSEvent에서 "["가 빠져있네요. 아래처럼 붉은색 [를 추가하면 됩니다.
zip 첨부파일은 이상없습니다 :)
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]); -
라르게덴
2008.09.02 13:13
패치 감사합니다.
근데- if(preg_match('/(src|href)=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/(src|href)=("|\'?)javascript:/i','$1=$2_javascript:', $matches
- [0]);
ps : 켁~ 위에 분이 빠르게 써주셨네요 ^^;;; -
zero
2008.09.02 13:20
네. 소스 코드 소개한 부분에서 잘못 copy되어서 문제가 발생했네요.
해당 부분 수정하였습니다.
감사합니다. -
블루파티
2008.09.02 15:52
감사합니다. 표현상 약간 헷갈리는데, 1.0.5를 받았고 func.inc.php를 전혀 건드리지 않은 사람은 수정부분은 신경쓰지 않아도 되고 단지 덮어씌우기만 하면 끝나는 거죠? 그 이전 버전이거나 또는 funl.inc.php를 건드렸던 사람만 직접 수정을 하라는 의미인 거죠? -
다 영
2008.09.02 17:46
감사합니다.. 'ㅇ' -
대박이
2008.09.02 19:04
감사합니다~ ^^ -
부우우
2008.09.02 19:28
1.0.3에 방금 적용했습니다.
여기저기 돌아다녀보고 있지만 별 탈 없는 것 같습니다. ;-) -
tree
2008.09.02 19:40
초보입니다. xe1.02로 이제 막 홈페제작 시작했습니다. 위의 소스에서 시작부분은 찾았는데, 그 뒤부터는 함수명이 다르고.. 그래서.. xe1.02버젼에서는 어떻게 수정해야 하는지요? 아니면, xe1.05로 다시 설치하는게 좋을까요? 게시판상에서 xe1.05에 대해서 말씀들이 많아서 안전하게 좀 낮춰서 설치했는데...제가 뭘 몰라서.. 조언부탁드립니다. -
미완성7구역
2008.09.02 20:56
업글하십시오 ㅎㅎ;; -
Adios
2008.09.03 11:59
1.0.3 부터 내부 구조가 크게 바뀌어서 아마 맞지 않을겁니다. 최소 1.0.3으로 업데이트 하시는게 좋구요.. 의외로 1.0.3이 1.0.4나 1.0.5보다 안정적인 감이 있더군요.. ('알바트로스'의 진행에 의해 1.0.2의 기능들을 그대로 두고 내부 구조가 개선된것이라서 그런것으로 보고 있습니다) -
HIKARU
2008.09.02 21:07
얼마전에 XE로 운영하다가 한차례 일부 해킹을 당했었는데...
이번 패치하고 관련이 있었는지 모르겠네요..─.─a
아무튼, XE 시작후 긴급패치 1호가 탄생했네요. -
山水菊
2008.09.02 22:32
감사합니다~ -
sbshs77
2008.09.02 22:46
저는 지금가지 2번해킹..ㅠㅠ
게시글이 다날라갔어용..ㅠㅠㅠ -
Dr.Mabin
2008.09.03 00:13
SVN으로 업데이트할 수 있도록 해주시겠어요? -
하늘03
2008.09.04 18:41
svn으로 update하셔도 됩니다- -
一淚™
2008.09.05 12:11
svn으로 업데이트가 안되는데..저만 그런건가요?? -
bncPlan
2008.09.03 06:26
-
어르시니
2008.09.03 09:39
ㅠ.ㅠ
패치후에 운영자 아이디로 로그인시
로그인이 되질 않습니다 ㅠㅠ
머가 문제가 있는거지요 ?? -
William
2008.09.03 09:52
항상 감사합니다.^^ -
Adios
2008.09.03 12:01
패치 리포팅이 뜨자마자 받아서 1.0.5에 적용하였습니다. 빠른 대처에 항상 감사드립니다.. *^^* -
누리
2008.09.03 16:21
건들지도 않았는데 갑자기 요청하신 모듈을 찾을수 없다고 나오는데 그게 이거와 관련된 해킹인가요? -
WhiteAT
2008.09.05 18:01
10일정도 전에 저도 하루종일 그런적이 있었습니다.
그 다음부터는 문제가 생기지 않았습니다.
제 생각에도 그런거 같네요 ㅡㅡ. -
샅샅이
2008.09.03 23:44
아 질문입니다. 다운받은 파일을 위와같이 수정해서 올리라는 뜻인가요? 수정해야 한다면 위에 소스 부분만 에디터로 불려들어서 복사 --> 붙이기 하면 되는건가요?
리플좀 달아주세요 -
하늘03
2008.09.04 18:42
아; 약간 헷갈리게 써있는데요 그냥 받아서 까시면 됩니다 -
대박이
2008.09.03 23:54
패치하시고 캐시파일 재생성하세요. 수정 사항에 따라 로그인이 안되는 현상이 생겨날 수 있더군요.. -
php,cgi어렵네
2008.09.04 00:10
감사합니다..^^ -
태영 (ㅇㅅㅇ
2008.09.04 02:29
감사합니다.업데이트 잘 했습니다. ^^ -
임과장
2008.09.04 03:28
감사합니다. 후딱 패치 해버렸다는 ~^^ -
이권묵
2008.09.04 15:58
유동훈님 고맙습니다^^ -
하늘(skycheer)
2008.09.04 18:10
급함★★★문서작성(첨부파일) 저장이 되지 않은 후 첨부 문서 열리지 않음★★★ - 신규 하늘(skycheer) 계획 : 우선순위 : 종류 : 문제발생 구성요소 : 기타 패키지 : zeroboardXE 발생버전 : 1.0.5 상태 : 신규 소유자 : 서버 OS : 리눅스 서버 PHP 버전 : php 4.1.21 phpMyAdmin - 2.9.1.1 사용 DB : mysql 테스트 브라우저 : IE7 확인 URL : http://skycheer.co.kr 문서 작성후 첨부파일 저장시 무 응답 후 재 저장 클릭 후 무응답
리스트로 돌아가보니 문서가 저장되어 있음..
리스트의 제목을 클릭하여도 문서가 열리지 않음...
이후 다른 게시판의 문서 클릭시 첨부파일이 있는 문서는 열리지가 않습니다.
엄청 급하네요... 누가 도와주세요..
참 문서 작성전 패치 설치는 했습니다. 그 후 이렇게 된건지는 모르겠습니다.
패치후 문서작성은 했었고 첨부파일있는 문서작성은 처음이였습니다.
다른 문의 사항은 쪽지 주세요.
꼭 봐주세요...ㅠㅠ
패치를 깔고 이런현상이 생기네요.. -
月虹
2008.09.04 19:10
지금 1.0.5 버전 다운 받으려고 합니다.
이 패치도 해줘야 하나요? -
이원형
2008.09.05 09:13
감사합니다 꾸벅 ^^ -
톡깽이
2008.09.05 10:04
학교에 와보니 교수 서버에 해킹 흔적이 잇어서 문제를 찾아보고 있었는데 패치 해주셧군요 감사합니다. -
해커
2008.09.05 11:13
이거 제로보드4에도 취약점 통합니다. 직접 시현해 보았습니다. ^^
제로보드4 사용자를 위한 패치도 필요할듯 하군요~ -
nury
2008.09.05 18:05
패치후 페이지 수정을 하려고 하니 로그인 페이지가 뜨더군요.
로그인후 모듈을 찾을수 없다는 메세지가 발생합니다.
이점 확인해보셔야 할듯 하네요.
거의 페이지를 사용하지 않다가 회사 홈페이지의 페이지 수정을 하다보니 이러한 문제가 발생되었습니다.
한번 확인해 주셨으면 감사하겠습니다. -
진교s
2008.09.05 22:20
감사합니다. 버전 1.02에서 패치 덮어 씌우기 아직까지 이상없습니다. ~ -
질문
2008.09.06 04:20
1.0.2 버전에서도 func.inc.php 파일을 바로 덮어쓰기하신 건가요? 아니면 소스를 직접 수정하신 건가요? -
아이루나
2008.09.06 13:59
바로 덮어써도 문제없을듯 ... 아님 소스고쳐도 똑같을테니.. -
질문
2008.09.08 13:44
고맙습니다. 1.0.2 에서도 패치파일을 덮어쓰기해서 잘 사용하고 있습니다. 아무런 문제 없군요. ^0^ -
밤실골
2008.09.06 07:40
고맙습니다~~꾸벅~항상 정보제공 넘 감사! -
momocast
2008.09.06 19:11
아..그렇군요....
감사히 사용 하겠습니다. -
박진원233
2008.09.08 11:35
흠.. 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로 당한거였군요. 몰랐어요 ㅡ.ㅡ;; -
필반
2008.09.09 19:56
너무 수고 많으셨습니다.
고맙습니다. -
yue113
2008.09.10 09:13
감사합ㄴ니다
그리고 수고많으십니다.
덕분에 잘돌아 가고 잇습니다 -
이상민430
2008.09.10 10:20
수고가 많으세요. ^^ -
가브렐
2008.09.11 07:46
★관리자아이디로 로그인이안되는데 어떻게해결해야하는지요??★ -
가브렐
2008.09.11 08:17
로그인이되질않아 db비번을바꾸었더니 모들을찼을수없다고아예나오는군요~이황당한 경우를 어떻게해결해야하는지요~ -
가브렐
2008.09.11 08:19
홈페이지주소입니다~확인후해결방법을알려주시길바랍니다 ㅠㅜ
http://gabriel2007.hosting.paran.com/zbxe/ -
Nesia
2008.09.11 18:06
감사합니다 'ㅂ'
좀 늦은거같지만 업데이트를 완료하였습니다 ^^