- 접근 통제 취약점의 일부
1. XXE 공격 개요
- XML 타입의 데이터가 웹 요청을 통해 전송되고, 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 경우 나타남
- 사용자가 웹 어플리케이션으로 전달되는 XML 데이터를 직접 업로드하거나 수정할 수 있는 경우, 공격자는 외부 엔티티를 참조하는 XML 데이터를 전송하여 파일과 같은 서버 내부의 정보를 탈취하거나 서비스 거부 공격, SSFR 등의 공격 수행 가능
- XML 외부 엔티티 선언 형태
<!DOCTYPE foo [ |
- DOCTYPE 선언 후 ENTITY 태그를 이용하여 xxe라는 외부 엔티티 선언
- 선언된 외부 엔티티는 프로그래밍을 할 때 변수를 참조하는 것처럼 XML 내부에서 참조 가능
→ xxe 엔티티 참조하면, xxe의 값인 SYSTEM 키워드로 지정된 /etc/passwd 파일 참조함
- file:// 사용하면 호스트 내부 파일 참조, http:// 사용하면 외부 리소스 참조 가능
2. XXE 공격 실습
실습 : 버프 스위트의 리피터 기능을 이용하여 XXE 공격 수행 후 /etc/passwd/ 파일 내용 출력
- Any bugs? 버튼은 사용자의 시크릿이 버튼에 표시된 문자열로 초기화하는 기능
- 버프스위트로 웹 요청 메시지 확인 (/bWAPP/xxe-2.php 요청 메시지)
- Content-Type 헤더가 text/xml 타입으로 설정되어 있고, 바디 부분에 XML 형태의 데이터가 전송되고 있음 -> XXE 취약점 공격은 XML이 전송되는 부분을 통해 이루어짐
- XML 요청에 대한 응답 메시지 확인
- 요청 메시지 XML 데이터 중 <login></login> 사이에 전송된 bee 문자열이 bee’s secret has been reset! 형태로 나타남
→ XML 태그의 내용이 응답 페이지에서 발견되면 XXE 공격 시도 가능
- XML을 수정해가며 리피터로 해당 요청 전달
- bee 문자열을 임의로 변경하여 전송하면 응답 메시지도 bee 부분이 임의의 변경 문자로 바뀐 거 확인 가능
→ <login> 태그로 전달된 값이 응답 메시지에 나타나고 있으며, 이를 통해 서버가 XML 처리하고 있는 것 추측 가능
- 웹 애플리케이션이 외부 엔티티 사용을 허용하도록 설정되어 있으면, 웹 서버 내부의 /etc/passwd 파일을 지정하는 외부 엔티티를 선언하고 <login> 태그의 값으로 해당 외부 엔티티를 참조함으로써, /etc/passwd 파일 내용 확인 가능!
→ <login> 태그에서 참조한 외부 엔티티인 /etc/passwd 파일의 내용이 출력됨
3. XXE 공격 대응
- 외부 엔티티 참조 기능이 필요하지 않은 경우 DTDs나 외부 엔티티 관련 설정 비활성화
- 주요 언어별 설정법
: https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
- 시스템 운영자나 보안 관리자 관점에서는, ENTITY 태그가 요청 메시지를 통해 전달되는 것이 확인되면 주의하고, 원래 의도된 요청인지 확인해야함
- 서비스 중인 웹 어플리케이션에서 XML 외부 엔티티 기능을 사용할 필요가 없으면, 웹 방화벽 등의 장비를 이용하여 해당 메시지 차단
'웹해킹' 카테고리의 다른 글
웹해킹 #13 알려진 취약점을 이용한 공격 - 쉘쇼크 취약점 (0) | 2020.04.15 |
---|---|
웹해킹 #13 알려진 취약점을 이용한 공격 - 하트블리드 취약점 (0) | 2020.04.15 |
웹해킹 #11 접근 통제 취약점 공격 (1) | 2020.04.15 |
웹해킹 #10 민감한 데이터 노출 (0) | 2020.04.08 |
웹해킹 #9 파일 업로드 공격 (0) | 2020.04.08 |