Step11. XXE(XML 외부 엔티티) 공격
XXE 공격 개요
-
XML 타입의 데이터가 웹 요청을 통해 전송되고, 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 경우 나타날 수 있다.
-
사용자가 웹 애플리케이션으로 전달되는 XML 데이터를 직접 업로드하거나 수정할 수 있는 경우, 공격자는 외부 엔티티를 참조하는 XML 데이터를 전송하여 파일과 같은 서버 내부의 정보를 탈취하거나 서비스 거부 공격, SSRF 등의 공격을 수행할 수 있다.
XML 외부 엔티티 예시
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
-
DOCTYPE 선언 후, ENTITY 태그를 사용하여 외부 엔티티 선언
-
xxe를 참조할 경우 SYSTEM 키워드로 지정된 /etc/passwd 파일을 참조(file://사용)
-
호스트 내부 파일 외에도 http://를 사용하여 외부 리소스를 참조하는 것도 가능
XXE 공격 실습
-
먼저 웹 페이지에 접속 후 사용자의 시크릿이 버튼에 표시된 문자열로 초기화되는 기능을 가진 any bugs를 클릭한다.
-
버프 스위트의 요청 메시지를 확인한다.
-
요청 메시지를 보면 Content-Type : text/xml을 볼 수 있는데, 이는 취약점을 의심해 볼 수 있다.
-
요청 메시지의 <login> 태그 안에 있는 문자열이 응답 메시지의 12번 줄에 그대로 출력되는지 확인한다.
-
위와 같이 <login>태그로 전달된 값이 응답 메시지에 나타나고 있는 것을 알 수 있다.
-
이 사실을 통해 서버가 XML을 처리하고 있다는 것이 추측 가능하다.
-
만일 웹 애플리케이션이 외부 엔티티 사용을 허용하도록 설정되어 있다면, /etc/passwd 파일을 지정하는 외부 엔티티를 선언하고 <login> 태그의 값으로 해당 외부 엔티티를 참조함으로써, /etc/passwd내용을 알아낼 수 있다
XXE 공격 대응
-
외부 엔티티 참조 기능이 필요하지 않은 경우 DTDs나 외부 엔티티 관련 설정을 비활성화한다.
XML External Entity Prevention - OWASP Cheat Sheet Series
XML External Entity Prevention Cheat Sheet Introduction XML eXternal Entity injection (XXE), which is now part of the OWASP Top 10 via the point A4, is a type of attack against an application that parses XML input. XXE issue is referenced under the ID 611
cheatsheetseries.owasp.org
-
시스템 운영자나 보안 관리자 관점에서는 ENTITY 태그가 요청 메시지를 통해 전달되는 것이 확인되면 일단 주의를 기울이고, 원래 의도된 요청인지 확인하는 것이 필요하다.
-
서비스 중인 웹 애플리케이션에서 XML 외부 엔티티 기능을 사용할 필요가 없다면, 웹 방화벽 등의 장비를 이용하여 해당 메시지를 차단하는 것이 좋다.
위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 쓴 글입니다.