▷ 작성자 : indra (indra@a3security.com)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)
A3시큐리티 TeamCR@K의 멤버 indra가 발견한 취약점이며 벤더사의 패치가 완료되었고, 해당 서비스(Zeroboard 4) 를 사용하고 있는 사용자들은 신속한 패치를 하시기 바랍니다.
Zeroboard 4 XSS/CSRF 취약점 보안 권고안
I. 취약점 개요
취약점 |
Zeroboard 4 XSS/CSRF 취약점 | ||
A3SC Advisory ID |
A3AID09-03 |
위험 등급 |
중 |
최초 발표일 |
2009.02.13 |
문서 작성일 |
2008.12.12 |
벤더 |
NZEO |
현재상태(패치여부) |
패치 |
1. 요 약
Zeroboard 4 솔루션에서 XSS/CSRF 취약점이 발견되었다. 현재 솔루션의 업데이트 및 배포를 맡고 있는 NZEO(http://www.nzeo.com) 에서는 Zeroboard 4 솔루션에 대한 버그패치는 현재 이루어지지 않고 있으며, XE 버전에 주력하는 양상을 보이고 있다.
이번 발견된 XSS/CSRF 취약점은 사용자 입력 값에 대한 검증미흡을 통해 발전 되었으며, 이를 이용해 악의적인 외부 사용자는 관리자 권한을 획득하고 의도하지 않은 서버의 명령을 실행 할 수 있는 권한까지도 가능 한 취약점이다.
2. 대상 시스템
- 별도의 패치가 적용되지 않은 모든 Zeroboard 4 패키지
3. 심각도 및 취약점 영향
취약점 영향 |
위험도 |
관리자 권한 획득 |
중 |
II. 취약점 세부 분석
1. 취약점 내용
본 취약점은 write_ok.php 파일의 처리 프로세스 중 글을 수정하는 단계에서 사용자의 입력 값에 대해 검증절차가 마련되어 있지 않아 사용자 입력 값에 악의적인 내용의 스크립트를 작성하여 웹 페이지 사용자를 공격 할 수 있다.
다음 그림은 제로보드 소스코드 중 write_ok.php 파일의 일부분이다.
[그림 1] write_ok.php 파일 내용
위 그림에 의하면 289번 라인 아래로는 “수정글”에 대한 처리 루틴인 것을 알 수 있으며, 변수의 조작만으로 SQL의 file_name1, file_name2 필드에 원하는 문자열을 값으로 처리하도록 변조 할 수 있는 가능성이 있다.
다음 그림은 제로보드 소스코드들 중 include/list_check.php 파일과 view.php 파일의 내용 일부를 캡쳐 한 화면이다.
[그림 2] include/list_check.php 와 view.php 파일의 일부 내용
위 그림에서 좌측 상단에 있는 파일이 include/list_check.php 파일이며 우측 상단과 하단의 내용이 view.php 파일의 내용이다. 먼저 include/list_check.php 파일은 view.php 파일에서 함수를 참조할 때에 함수의 구현부가 있는 파일이며, 우측 상단의 list_check() 함수가 실행될 때 참조 된다.
s_file_name1, s_file_name2 필드에 있는 값 그대로를 참조하며 이러한 값은 결국 아래의 view.php 파일의 내용인 “첨부파일 링크 기능”에 사용된다.
다음 그림은 해당 취약점을 이용해 CSRF 공격을 시도한 화면이다.
[그림 3] CSRF 공격시도를 한 화면
위 그림에서 표면적으로 볼 때 파일 다운로드 부분에는 아무런 문제가 발생하지 않은 것 처럼 보이나, 실제 HTML 소스코드를 확인 할 경우 특정 태그를 사용하여 다른 페이지와의 연결을 시도하는 코드가 발견된다. 이는 제로보드 내 관리자 메뉴를 사용하여 특정 이름을 가진 사용자의 권한상승을 시도하는 코드로서 관리자 권한을 가진 사용자가 해당 게시물을 읽었을 경우 특정 사용자가 관리자 권한으로 변경되는 상황이 일어 날 수 있다.
다음 그림은 CSRF 공격시도가 성공하여 일반 사용자가 관리 권한을 얻어낸 후 관리자 메뉴에 접속 한 화면이다.
[그림 4] 취약점에 의해 일반 사용자가 관리 권한을 얻은 상황
2. 위험 분석
해당 취약점은 현재 패치 되지 않은 상태로 모든 Zeroboard 4 버전을 사용하고 있는 웹 페이지들이 취약하며, 또한 관리자 메뉴에는 서버의 명령을 실행 할 수 있게 하는 기능이 존재하여 이를 이용한 서버 침입 수준의 연계공격이 가능하므로 이를 이용한 공격 시도 및 피해가 예상된다.
III. 대응 방안
1. 보안 대책
가. 공식 패치
현재 Zeroboard 공식 패포처 인 NZEO에서 이에 대한 패치를 이미 내 놓았으며, 해당 패치는 다음의 URL에서 Download 받을 수 있다.
http://www.zeroboard.com/17757124#10
나. 개별 패치
Zeroboard 솔루션에는 HTML 태그에 사용되는 특수문자에 대해 타 문자로 치환하는 방식의 함수가 포함되어 있으며 해당 함수를 이용하여 패치 할 수 있다.
include/list_check.php 파일의 116, 117 번에서 $file_name1, $file_name2 변수에 값을 대입할 때, del_html() 함수를 사용한다.
수정 전:
116 $file_name1=$data[s_file_name1]; 117 $file_name2=$data[s_file_name2]; |
수정 후:
116 $file_name1=del_html($data[s_file_name1]); 117 $file_name2=del_html($data[s_file_name2]); |
2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같다.
http://www.zeroboard.com/17757124#10
Copyright(c) 1998-2009 A3 Security ,LTD
Disclaimer
※ 현재 ㈜에이쓰리시큐리티에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티에서는 일체의 책임을 지지 아니합니다.