Blog

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 공격방법을 이용한 취약점 공격 방법이 공개되지 않았기에 다소 시간적 여유는 있지만 최대한 빨리 패치하시기를 권해드립니다.

제목 최종 글 날짜
공지 XE1 신규 보안 취약점 신고 포상제 종료 안내   2019.10.23
공지 [중요!] Object 클래스의 이름 변경 안내(PHP 7.2 버전 호환성) [7] 2020.08.16 by 천재 2017.11.27
XE 1.5.2 배포 [14] 2012.08.27 by cheap vibram shoes 2012.03.20
1.5.2 쉬운설치 패치 파일 [3] file 2013.12.25 by cheap vibram shoes 2012.03.21
1.5.2.1 배포 [9] 2012.08.27 by vibram shoes 2012.03.23
XE 1.6 부터 TinyMCE가 XE의 단일 에디터가 됩니다. [39] 2020.03.14 by 이온디 2012.03.28
제3회 XE사용자 공모전 디자인 부문을 개최합니다. [3] 2012.08.27 by vibram five fingers 2012.03.30
1.5.2.2 배포(보안패치 포함) [4] 2012.09.07 by Tory Burch Outlet 2012.04.02
[완료]공식사이트 점검 안내 [4] 2020.03.14 by vibram shoes 2012.04.02
1.5.2.3 배포 (보안 패치 포함) [9] 2012.10.16 by ONDAVi40 2012.04.26
2012년 5월 공헌자/커미터 현황 [3] 2012.09.07 by Tory Burch Outlet 2012.05.08
XE 1.6을 사용하기 위한 PHP Version에 대해 알려 드립니다. [12] 2020.03.14 by vibram shoes 2012.05.08
친절한 XE 1.5 업데이트 가이드 [43] 2012.09.03 by Chat 2012.05.10
1.5.2.5 배포(보안패치 포함) [19] 2012.08.27 by vibram shoes 2012.05.14
신디케이션 서비스 문의사항 답변 및 서비스 차단 유형 공유 [3] 2012.09.07 by Tory Burch Outlet 2012.05.16
PHP, Wincache를 포함해 IIS에서 XE를 설정하는 방법 [8] file 2020.03.14 by vibram five fingers 2012.05.21
XE 1.5 업데이트 지원 캠페인 진행 [19] 2020.03.14 by vibram five fingers 2012.05.23
XE 비즈니스 확산을 위한 사업자 간담회를 진행합니다. [4] 2012.08.27 by vibram five fingers 2012.05.30
XE 1.5 캐시 설정 가이드 [9] 2020.03.14 by jackdejack 2012.06.01
XE 사업자 간담회 재신청 부탁드립니다.   2012.06.04
20120613 XE 비즈니스 확산을 위한 사업자 간담회 후기 [5] 2020.03.14 by BNU 2012.06.14
1.5.2.6 보안 배포 [7] 2012.09.21 by staticcling 2012.06.26