▷ 작성자 : indra (indra@a3security.com)
▷ 편집자 : indra (indra@a3security.com)
Castle (PHP버전) 공격 탐지 우회 보안 권고안
By indra@a3security.com
(A.K.A 1ndr4)
취약점 |
Castle (PHP버전) 의 XSS 공격 탐지 우회 | ||
A3S Advisory ID |
A3AID09-01 |
위험 등급 |
중 |
최초 발표일 |
|
문서 작성일 |
|
벤더 |
KrCert |
현재 상태(패치여부) |
패치 완료 |
1. 요 약
Castle의 PHP 버전에서 XSS 공격 탐지를 우회할 수 있는 취약점이 발견되었다. Castle은 KrCert에서 웹 공격 차단 및 로그 채취를 위해 배포하고 있는 솔루션이며, 해당 솔루션은 PHP, JSP, ASP의 언어로 작성되어 여러 환경에서 사용할 수 있도록 배포 되고 있다. 업데이트 및 배포를 맡고 있는 대표 사이트는 KrCert - http://www.krcert.or.kr 이며, 당 사이트에서는
이번 발견된 탐지 우회 취약점은 사용자의 입력에 대해 pattern-matching을 수행하여 공격 패턴을 찾아내는 루틴에서 특정 함수를 사용하는 것으로 비롯되었으며, 이를 이용해 악의적인 외부 사용자는 XSS 공격 탐지를 우회하고 실행 할 수 있는 취약점이다.
2. 대상 시스템
- Castle PHP Version
3. 심각도 및 취약점 영향
취약점 영향 |
위험도 |
XSS 공격 탐지 우회 |
중 |
II. 취약점 세부 분석
1. 취약점 내용
본 취약점은 사용자 입력 값을 검증하는 루틴에서 NUL 문자를 제대로 처리하지 못하는 루틴을 사용함으로 발생되는 취약점으로, PHP 함수의 적법하지 않은 사용에서 기인한다.
[그림 1] castle_referee.php 파일의 일 부분
위
그림은 castle_referee.php 파일의 일 부분으로 castle_referee_eregi() 함수 내용을 보여주고 있다. castle_referee_eregi() 함수는 castle 에서 정의하고 구현된 wrapper 함수이며, 해당 함수는 내부적으로 eregi() 함수를 사용하여 pattern-matching기법을 사용한 문자열 탐지를 수행한다.먼저 magic_quotes_gpc 의 설정 정보를 받아 해당 옵션이 enable 되어 있으면 stripslashes() 함수를 사용하여 문자열 사이에 존재하는 백 슬래시(‘\’) 문자를 제거하게 된다. magic_quotes_gpc 옵션은 php 설치 시 기본적으로 enable 되도록 설정된 옵션이며, 이는 GET, POST, COOKIE 데이터에 특수문자가 존재하는 경우 자동으로 특수 문자 앞에 백 슬래시(‘\’) 문자를 추가하는 기능이다.
그 후, eregi() 함수를 사용하여 문자열을 탐지하게 되는데 이 때 $regexp 변수와 $str 변수가 argument로 사용된다. $regexp 변수는 기 정의된 검색 패턴의 정보가 들어가고, $str 변수에는 사용자 입력 값이 들어가게 된다. 해당eregi() 함수의 사용 루틴은 321번 라인에서 327번 라인까지 진행된다.
이러한 루틴에서 NUL 문자를 검출하기 위한 패턴은 eregi() 함수 사용과 맞물려 그 기능을 제대로 수행하지 못하게 되고, 악의적인 공격자가 패턴 탐지를 우회하여 XSS 공격을 시도할 수 있는 취약점을 노출 시킨다.
다음의 그림은 “<script>” 라는 문자열을 정상적으로 탐지하여 차단 메시지를 출력한 화면이다.
[그림 2] 정상적으로 공격 탐지를 한 화면
위 그림에서 사용된 소스코드는 다음과 같다
.단순히 GET 방식으로 전달 된 msg 라는 변수의 값을 출력해 주는 소스코드이며, 변수 값에 존재하는 “<script>” 라는 문자열을 제대로 탐지해 낸 경우이다.
다음 그림은 발견된 우회방법을 이용해 사용자 Cookie를 출력하는 스크립트를 실행 한 화면이다.
[그림 3] 취약점에 의해 스크립트가 실행된 화면
해당 취약점은 현재 공식 패치를 적용하지 않은 Castle의 PHP버전을 사용하고 있는 웹 페이지들이 취약하며, 이를 이용한 탐지 우회 시도 및 피해가 예상된다.
III. 대응 방안
1. 보안 대책
가. 공식 패치
본 취약점과 관련하여 현재 KrCERT 에서 패치가 되어 배포되고 있으며, 패치 된 버전은 1.0.1 버전이다.
Castle 1.0.1 Version Download : http://www.krcert.or.kr