| Xpress Engine 1.4.5.5 최신 버전 취약점 대응방안 권고 보고서 | 2011.04.27 |
회원가입(수정),게시판 글쓰기(글수정)에서의 SQL Injection 취약점 개요 이 취약점은 회원 가입(수정)을 처리하는 파일인 DBMysql(Mssql 등등.).class.php 파일에서 숫자형 데이터를 처리하는 부분의 허점을 이용하여 일어나는 취약점이다. 발생 버전 Xpress Engine 1.4.5.5 버전 이하 모든 버전 발생 원인 $value의 숫자형 변수의 조작이 가능하다. 분석 /xe/classes/db/DBMysql.class.php 파일을 열어 441번 라인 부근을 보면 다음과 같은 부분이 있다. /xe/classes/db/DBMysql.class.php 파일의 441번 라인 부근 445번 라인에서 변수 타입이 ‘number’일 경우와 아닐 경우가 따로 나뉘고 있다. 숫자가 아닐 때는 ‘addQuotes’라는 함수로 쿼터를 붙여주고 있다. 그러나 문제가 되는 부분은 458라인 이다. ‘is_numeric’ 함수로 숫자형인지 확인한 후 $value 변수를 int형으로 형변환 하고 있다. 공격자가 이곳에 쿼터를 넣으면 ‘addQuotes’라는 함수를 사용하지 않았기 때문에 에러가 날 것이란 것을 예측할 수 있다.
find_account_question 변수 값을 조작하는 부분
게시판 에서의 조작 가능한 변수 readed_count, blamed_count, voted_count, comment_count, trackback_count, uploaded_count, member_srl (중간 생략…) 공격 시연 1 회원가입 쿼리를 살펴보겠다.
‘is_admin’이라는 컬럼은 21번째에 존재한다. ‘find_account_question’ 값에 공격 코드를 삽입해보았다.
다음으로 게시판 글쓰기 쿼리를 살펴보겠다.
‘readed_count’ 컬럼 뒤에 값은 임의의 숫자를 넣어준 후 ‘content’ 컬럼에는 ‘db.config.php’ 파일의 내용을 넣어 주었다. 그러면 데이터베이스의 이름과 이이디, 비밀번호를 알아낼 수 있다.
패치 방법 위에서 말했듯이 XE개발자가 무엇 때문에 변수 초기화를 하지 않았는지는 모르지만 특별한 이유가 있어서 초기화를 하지 않은 것이라면 이렇게 수정해주면 된다. (MYSQL 뿐만 아니라 다른 파일들도 이러한 형식으로 패치 하면 될 것이다. MSSQL에는 int형 컬럼에 문자가 들어가면 오류가 날 것 같은데 이 부분은 따로 패치 하면 될 것 같다.) 게시판과 회원페이지 말고도 insert 문이나 update 문을 쓰는 곳이 있기 때문에 그 부분도 따로 패치 하면 될 것 같다.
<저작권자: 보안뉴스(http://www.boannews.com/) 무단전재-재배포금지> |
|
|
|