사용자가 웹 애플리케이션으로 전달되는 XML 데이터를 직접 업로드하거나 변조할 수 있는 경우, 공격자는 외부 엔티티를 참조하는 XML 데이터를 전송하여 파일과 같은 서버 내부의 정보를 탈취하거나 서비스 거부 공격, SSRF 등의 공격을 수행할 수 있다.
XML 외부 엔티티는 다음과 같은 형태로 선언된다.
<!DOCTYPE foo [
<!ENTITY XXE SYSTEM "file:///etc/passwd">
]>
DOCTYPE 선언을 한 후 ENTITY 태그를 이용하여 xxe라는 외부 엔티티를 선언한다. 선언된 외부 엔티티는 XML 내부에서 참조할 수 있다. 즉, XXE 엔티티를 참조하면, XXE의 값인 SYSTEM 키워드로 지정된 /etc/passwd 파일을 참조하게 된다. 위 예시는 file://을 사용하여 호스트 내부의 파일을 참조하지만 http://를 사용하여 외부 리소스를 참조할 수 있다.
A7 그룹의 XXE 메뉴를 선택한다.
Any bugs? 버튼을 누르고 요청 메시지를 버프스위트로 본다.
요청 메시지를 보면 Content-type이 text/xml이다. 즉, xml 데이터를 보낸다. 또한 post 메시지의 바디부분의 bee 문자열이 응답 메시지에서도 사용되고 있다. 전송한 xml 데이터가 사용되고 있는 것이다.
버프스위트의 리피터 기능을 이용하여 xml 데이터를 아래와 같이 변경하여 전송한다.
/etc/passwd 파일을 지정하는 외부 엔티티 XXE 를 선언하고 <login> 태그의 값으로 XXE 외부 엔티티를 참조함으로써, /etc/passwd 파일이 노출된다.
XXE 공격 대응
외부 엔티티 참조 기능이 필요하지 않은 경우 관련 설정을 비활성화하는 것이다. 설정을 비활성화하는 방법은 프로그래밍 언어나 XML 파서의 종류에 따라 다르다.
'bWAPP(Bee Box)' 카테고리의 다른 글
쉘쇼크 취약점 (0) | 2023.11.15 |
---|---|
하트블리드 취약점 (0) | 2023.11.15 |
접근 통제 취약점 공격 (0) | 2023.11.13 |
민감한 데이터 노출 3 (0) | 2023.11.13 |
민감한 데이터 노출 2 (0) | 2023.11.13 |