제로보드4의 보안 취약점에 대한 정보와 패치 자료들을 공유하는 곳입니다.
제로보드4로 사이트를 운영하시는 분들의 많은 관심과 정보 공유 부탁드립니다.
보안 관련 내용이 아닌 경우 삭제될 수 있습니다.

[수정#1] 2009. 09. 22 보안 취약점 패치

조회 수 21304 추천 수 0 2009.09.22 12:09:35

[수정 #1] outlogin.php 파일은 패치 대상이 아니어서 제거되었고 skin/zero_vote/setup.php 파일이 추가되었습니다.

취약점 안내

  • 일자 : 2009. 09. 22
  • 내용 : _zb_path, dir 변수에 대해 웹쉘 없이 직접 서버내 파일을 실행 할 수 있는 취약점 발생보고 : 한국 인터넷 진흥원 (http://www.kisa.or.kr)
  • 대상 : 제로보드4 모든 버전
  • 비고 : php5.2 이상에서만 발생하는 취약점과 php 버전 상관없이 발생하는 취약점

취약점 보완

  1. 패치 파일 적용 : 첨부된 patch.2009.02.22.zip 파일의 압축을 풀고 덮어쓰기
  2. 패치 적용 : 첨부된 zb4.20090922.patch  파일의 patch 명령어를 이용한 적용
  3. 직접 수정
    1. 대상 파일
      1. _head.php
      2. skin/zero_vote/ask_password.php
      3. skin/zero_vote/error.php
      4. skin/zero_vote/login.php
      5. skin/zero_vote/setup.php
    2. 수정 내용
      1. _head.php
        [수정전]
        if(eregi(":\/\/",$_zb_path)||eregi("\.\.",$_zb_path)) $_zb_path ="./"; 
        [수정후]
        if(eregi(":\/\/",$_zb_path)||eregi("\.\.",$_zb_path)||eregi("^\/",$_zb_path)||eregi("data:;",$_zb_path)) $_zb_path ="./";
      2. skin/zero_vote/ 파일들
        [수정전]
        if(eregi(":\/\/",$dir)||eregi("\.\.",$dir)) $dir ="./";
        [수정후]
        if(eregi(":\/\/",$dir)||eregi("\.\.",$dir)||eregi("^\/",$dir)||eregi("data:;",$dir)) $dir ="./";

이 취약점은 매우 위험한 취약점으로 꼭 패치를 해주세요.
그리고 가능하다면 제로보드4를 XpressEngine 또는 다른 프로그램으로 전환하는 것을 권장합니다.

늘 취약점과 해결 방법을 알려주시는 한국 인터넷 진흥원(http://www.kisa.or.kr) 에 감사드립니다.


엮인글 '3'

http://www.xpressengine.com/18319857/e71/trackback

2009.09.28 14:23

제로보드(Zeroboard) 보안패치와 메인화면 백지화 문제 - 희망을 보고, 나는 쓰네

제로보드에 새로운 보안패치가 나왔습니다. http://www.xpressengine.com/zb4_security/18319857 설문 스킨을 사용하지 않는다면 _head.php 파일만 수정을 하면 되는데, 문제는 head.php 파일을 보안패치 적용을 하고 나면 메인화면이 하얗게 아무것도 안나온다는...-_-;; 호스팅업체쪽에 문제가 있나 싶어서 문의를 했더니 답변이 왔는데, 확인해 보니 outlogin.php와 _head.php 에서 오류가 생깁..

2009.09.27 13:53

dragonJK의 생각 - jinkpark''s me2DAY

제로보드4로 만들어진 홈페이지를 여기 에 나오는대로 보안패치를 했더니 메인 페이지가 백지로 나옵니다 ㅜ.ㅜ 어떻케 해야할까요 해결방법을 알려주세요..

2009.09.22 21:40

제로보드 4.1 pl9 보안 패치, 여러 파일 한꺼번에 하기. - 如是我聞

자세한 설명은 제로보드 공지 http://www.xpressengine.com/zb4_security/18319857 인터넷 침해사고 대응 지원센터 http://www.krcert.net/secureNoticeView.do?seq=-1&num=359 참고. 호스팅 업체나 서버를 가지고 계신 분 중 여러 계정에 제로보드를 설치하신 경우. 보통 /home 디렉토리에 가서 아래 명령을 실행하면 됩니다. _head.php 파일 find...


profile

[레벨:17]제이엔지

2009.09.22 20:29:28
*.78.140.240

제로님! 이렇게 알려주셔서 너무나 고맙습니다.

정말 수고많으셨어요.

profile

[레벨:17]제이엔지

2009.09.22 20:31:15
*.78.140.240

취약점 알려주신 한국인터넷진흥원에도 저 역시 너무나 감사드려요.

제가 아직 제로보드4 쓰고 있는데 고민스럽네요.

제로보드XE로 언젠간 쓰긴 써야겠다싶은 생각이 들어요.

 

profile

[레벨:17]제이엔지

2009.09.22 20:37:33
*.78.140.240

http://www.krcert.or.kr/index.jsp

 

보안문제 알고싶어서...제가 이 사이트 자주 들여다보는데...

인터넷침해대응센타 이 사이트에 제로님이 이곳에 올리신 공지가

오늘 그곳에 보안공지로 올려졌네요.

[레벨:2]다크진

2009.09.22 20:38:20
*.125.24.37

_head 파일을 위와 같이 수정하면 도메인 www 를 인식못하는거 같습니다. 제 서버만의 문제인지 모르겠네요

[레벨:2]다라나

2009.09.22 20:48:58
*.192.139.169

 _head.php 파일을 위와 같이(if 문 안에 eregi가 4개인 경우) 수정하면 if 문의 세번째 eregi("^\/",$_zb_path) 때문에 에러가 발생합니다. 제로보드 4의 원프레임 설명서를 보면 상단에 불러들이는 파일에 $_zb_path = '자신의 절대경로' 를 쓰게 되어 있는데 여기서 세번째 eregi 문에 걸리게 됩니다. 그래서 $_zb_path가 제대로 지정이 안되는 겁니다.


상단 불러들이는 파일에 $_zb_path 를 지정해주는 방식으로 개발된 사이트는 패치하면 문제가 발생합니다. 저 조건문이 정확히 어떤 역할을 하는지 아직 모르겠는데 누가 설명 좀 해주시면 다른 조건문을 쓸 수 있을 거 같은데요. 만약 저 조건문을 꼭 써야 한다면 악몽인데요. ㅡ.ㅡ;;

[레벨:2]다크진

2009.09.22 21:02:32
*.125.24.37

아하 그래서 제 사이트가 패치하고 나서 경로를 찾지 못했던 거군요... 이를 어쩌나 난감하네요
profile

[레벨:17]제이엔지

2009.09.22 21:28:54
*.78.140.240

모두 그대로 패치해주고 왔는데

제 홈은 현재 아무 문제없이 잘 열리고 있네요.

제로보드4 사용자분들은 모두 꼭 얼른 패치하셔요~

 

그리고 항상 만일의 경우 대비해서

반드시 계정홈자료를 가끔씩 꼬옥 자주 백업해주세요.

제로보드4 사용자라면 디비백업도 필수!! 제일 중요!!

 

[레벨:2]다라나

2009.09.23 10:07:26
*.192.139.169

 _head.php 의 $_zb_path 경우는 사용 목적이 명확하기 때문에 문제가 발생할 때마다 조건문을 추가하는 방식보다는 사용목적에 맞는 경우만 점검하도록 하는 게 더 낫지 않을까 싶습니다. 즉 _head.php 파일이 위치한 곳의 경로가 $_zb_path 와 일치한다는 뜻이죠. 제로보드 설명서에도 $_zb_path는 절대 경로로 지정하라고 되어 있으니까요.


이런 경우에 조건문을 다음과 같이 바꾸는 게 어떨까요?

if(!preg_match('/^' . addcslashes(dirname(__FILE__), '/') . '/i', $_zb_path)) $_zb_path = './';
이렇게 사용하시려면 어떻게 돌아가는지 이해를 하신 후에 적용하셔야 합니다.

[레벨:0]秘傳

2009.09.24 02:22:49
*.70.64.140

사실상 GET이나 POST 를 통해 dir이나, _zb_path의 값을 지정했을때의 문제가 되므로,


    if(isset($_GET[_zb_path]) || isset($_POST[_zb_path]))
        return;
or

    if(isset($_GET['dir']) || isset($_POST['dir']))
        return;


도 좋은 방법인것 같습니다

[레벨:1]지오넥스

2009.09.25 00:45:27
*.22.13.61

_head파일 패치를 하면 index페이지만 백지상태로 나오는데

위에 다라나 님의 말씀처럼 outlogin에서 문제가 생기는듯합니다.

이거 어떻게 해결 할 수 있는 방법이 없는가요???

 

[레벨:1]클래식웨딩

2009.09.25 23:31:40
*.144.208.161

저도 패치 후 인덱스는 백지로 나오네요...ㅜㅜ

이거 어떻게 해야 하는지 방법을 좀 가르쳐 주세요~

[레벨:6]봄군

2009.09.26 00:13:41
*.159.170.241

저도 그러네요...;

[레벨:1]단비스

2009.09.28 19:28:46
*.110.236.54

 메인화면이나 로그인관련 부분이 백지로 하얗게 나오시는 분들은

http://danbisw.tistory.com/6769 를 참고해보세요~

[레벨:1]클래식웨딩

2009.09.29 00:25:58
*.144.208.161

정보 감사합니다^^

홈에 뭘적어야 하는지 몰라서 한참 찾았는데^^;;;

드뎌 찾았습니당~ㅎㅎㅎ

감사합니다~~~

[레벨:3]국가대표

2009.09.30 13:18:01
*.132.102.184

문제가 잇을경우 zb4 절대경로를 초기화 시키는것인데

오히려 문제있을때 zb4 경로를 변수에 넣어주네요-_-;;

이건 해결방법이 아닙니다.

[레벨:1]강진택

2009.10.06 19:09:52
*.36.230.132

좋은 정보 감사합니다.

 

그런데 eregi("data:;",$dir) 이 부분은 도저히 뭔지 이해가 안가네요.

 

저렇게 마킹하면 왜 해킹처리가 되는건지 아시는 분은 답변 부탁드릴께요. :-)

[레벨:4]James964

2009.10.08 10:45:48
*.34.255.243

수정후에 글수정을 하니 이런 에러가 나네요.  _head.php를 원상복귀하니 괜찮고요.

Warning: include(./lib.php) [function.include]: failed to open stream: No such file or directory in /web/home/chea/html/bbs/_head.php on line 16

Warning: include() [function.include]: Failed opening './lib.php' for inclusion (include_path='.:/usr/share/pear') in /web/home/chea/html/bbs/_head.php on line 16

Fatal error: Call to undefined function dbconn() in /web/home/chea/html/bbs/_head.php on line 44

[레벨:1]시요님

2009.10.24 15:59:56
*.36.145.200

  1. _head.php

이건 어디다가 덮어 써야 하는 건가요? ㅜㅜ

[레벨:2]하늘물가

2009.10.26 18:38:55
*.43.89.27

설치된 제로보드4의 경로에 덮어씌우시면됩니다.  /home/자신의계정/bbs 가 제로보드 설치경로라면 /home/자기계정/bbs에 기존파일을

백업하신후(만약을대비해서) 복사해서 넣으시면됩니다.

[레벨:2]권성현167

2009.10.28 15:33:03
*.147.215.139

해결책을 취합해보니 이런 결과가 나옵니다.^^

 

 if(eregi(":\/\/",$_zb_path)||eregi("\.\.",$_zb_path)||eregi("data:;",$_zb_path)) $_zb_path ="./";
 if(!preg_match('/^' . addcslashes(dirname(__FILE__), '/') . '/i', $_zb_path)) $_zb_path = './';

 

현재 이상 없이 동작을 하지만 위 설정이 문제가 될런지 고수분들 조안 주세요.^^

 

[레벨:1]박종진

2010.12.20 18:06:34
*.187.108.176

저도 잘 됩니다만 취약점 해결책인지는 모르겠네요~

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 2010년 12월 22일 RFI 취약점 보안 패치 [1] XE Core 개발XE Developers 2010-12-22 8290
공지 보안 정보 공유 게시판 안내 [1] [레벨:30]zero 2009-09-11 7132
12 phpmyadmin을 이용한 해킹방어 [레벨:6]아빠불당 2009-09-22 7435
11 해킹을 막는 시작은 pc의 보안입니다 [1] [레벨:6]아빠불당 2009-09-22 5507
10 보안정보 있으면 같이 공유좀 합시다 [레벨:2]다크진 2009-09-22 4844
» [수정#1] 2009. 09. 22 보안 취약점 패치 file [21] [3] [레벨:30]zero 2009-09-22 21304
8 $sn, $ss, $sc의 escape [2] [레벨:6]아빠불당 2009-09-21 1425
7 $keyword 변수의 escape [1] [레벨:6]아빠불당 2009-09-21 4305
6 $id, $no, $category, $page_num 변수를 통한 inject 해킹 방어 [3] [레벨:6]아빠불당 2009-09-21 5102
5 프로그램 개발시 strip_tags 함수를 쓰세요 [레벨:6]불당 2009-09-19 5015
4 해킹을 막거나 해결하는 나만의 방법 [2] [레벨:1]huny429 2009-09-18 6352
3 반가운 게시판^^; file [레벨:1]friday71 2009-09-13 5245
2 보안정보공유 게시판 탄생!! [2] [레벨:17]제이엔지 2009-09-12 4797
1 2009. 02. 16 CSRF 대응 패치 file [24] [2] [레벨:30]zero 2009-02-16 39237