제로보드4의 보안 취약점에 대한 정보와 패치 자료들을 공유하는 곳입니다.
제로보드4로 사이트를 운영하시는 분들의 많은 관심과 정보 공유 부탁드립니다.
보안 관련 내용이 아닌 경우 삭제될 수 있습니다.
[수정 #1] outlogin.php 파일은 패치 대상이 아니어서 제거되었고 skin/zero_vote/setup.php 파일이 추가되었습니다.
취약점 안내
- 일자 : 2009. 09. 22
- 내용 : _zb_path, dir 변수에 대해 웹쉘 없이 직접 서버내 파일을 실행 할 수 있는 취약점 발생보고 : 한국 인터넷 진흥원 (http://www.kisa.or.kr)
- 대상 : 제로보드4 모든 버전
- 비고 : php5.2 이상에서만 발생하는 취약점과 php 버전 상관없이 발생하는 취약점
취약점 보완
- 패치 파일 적용 : 첨부된 patch.2009.02.22.zip 파일의 압축을 풀고 덮어쓰기
- 패치 적용 : 첨부된 zb4.20090922.patch 파일의 patch 명령어를 이용한 적용
- 직접 수정
- 대상 파일
- _head.php
- skin/zero_vote/ask_password.php
- skin/zero_vote/error.php
- skin/zero_vote/login.php
- skin/zero_vote/setup.php
- 수정 내용
- _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 ="./"; - skin/zero_vote/ 파일들
[수정전]
if(eregi(":\/\/",$dir)||eregi("\.\.",$dir)) $dir ="./";
[수정후]
if(eregi(":\/\/",$dir)||eregi("\.\.",$dir)||eregi("^\/",$dir)||eregi("data:;",$dir)) $dir ="./";
엮인글 '3'
http://www.xpressengine.com/18319857/7b3/trackback
제로보드(Zeroboard) 보안패치와 메인화면 백지화 문제 - 희망을 보고, 나는 쓰네
제로보드에 새로운 보안패치가 나왔습니다. http://www.xpressengine.com/zb4_security/18319857 설문 스킨을 사용하지 않는다면 _head.php 파일만 수정을 하면 되는데, 문제는 head.php 파일을 보안패치 적용을 하고 나면 메인화면이 하얗게 아무것도 안나온다는...-_-;; 호스팅업체쪽에 문제가 있나 싶어서 문의를 했더니 답변이 왔는데, 확인해 보니 outlogin.php와 _head.php 에서 오류가 생깁..
dragonJK의 생각 - jinkpark's me2DAY
제로보드4로 만들어진 홈페이지를 여기 에 나오는대로 보안패치를 했더니 메인 페이지가 백지로 나옵니다 ㅜ.ㅜ 어떻케 해야할까요 해결방법을 알려주세요..
제로보드 4.1 pl9 보안 패치, 여러 파일 한꺼번에 하기. - 如是我聞
자세한 설명은 제로보드 공지 http://www.xpressengine.com/zb4_security/18319857 인터넷 침해사고 대응 지원센터 http://www.krcert.net/secureNoticeView.do?seq=-1&num=359 참고. 호스팅 업체나 서버를 가지고 계신 분 중 여러 계정에 제로보드를 설치하신 경우. 보통 /home 디렉토리에 가서 아래 명령을 실행하면 됩니다. _head.php 파일 find...
http://www.krcert.or.kr/index.jsp
보안문제 알고싶어서...제가 이 사이트 자주 들여다보는데...
인터넷침해대응센타 이 사이트에 제로님이 이곳에 올리신 공지가
오늘 그곳에 보안공지로 올려졌네요.
_head.php 파일을 위와 같이(if 문 안에 eregi가 4개인 경우) 수정하면 if 문의 세번째 eregi("^\/",$_zb_path) 때문에 에러가 발생합니다. 제로보드 4의 원프레임 설명서를 보면 상단에 불러들이는 파일에 $_zb_path = '자신의 절대경로' 를 쓰게 되어 있는데 여기서 세번째 eregi 문에 걸리게 됩니다. 그래서 $_zb_path가 제대로 지정이 안되는 겁니다.
상단 불러들이는 파일에 $_zb_path 를 지정해주는 방식으로 개발된 사이트는 패치하면 문제가 발생합니다. 저 조건문이 정확히 어떤 역할을 하는지 아직 모르겠는데 누가 설명 좀 해주시면 다른 조건문을 쓸 수 있을 거 같은데요. 만약 저 조건문을 꼭 써야 한다면 악몽인데요. ㅡ.ㅡ;;
_head.php 의 $_zb_path 경우는 사용 목적이 명확하기 때문에 문제가 발생할 때마다 조건문을 추가하는 방식보다는 사용목적에 맞는 경우만 점검하도록 하는 게 더 낫지 않을까 싶습니다. 즉 _head.php 파일이 위치한 곳의 경로가 $_zb_path 와 일치한다는 뜻이죠. 제로보드 설명서에도 $_zb_path는 절대 경로로 지정하라고 되어 있으니까요.
이런 경우에 조건문을 다음과 같이 바꾸는 게 어떨까요?
if(!preg_match('/^' . addcslashes(dirname(__FILE__), '/') . '/i', $_zb_path)) $_zb_path = './';
이렇게 사용하시려면 어떻게 돌아가는지 이해를 하신 후에 적용하셔야 합니다.
수정후에 글수정을 하니 이런 에러가 나네요. _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

제로님! 이렇게 알려주셔서 너무나 고맙습니다.
정말 수고많으셨어요.