이 글은 XXE Injection에 대해 공부하기 위해 레퍼런스를 참고해 작성했습니다.
XXE(XML External Entity) Injection
직역하면 XML 외부 객체 삽입 공격이라고 할 수 있다.
XXE는 외부 엔티티(Entity) 정의의 보안 취약점을 이용한 공격이다.
엔티티는 반복적으로 나오는 문장이나 문자열을 다른 곳에 저장해 놓고 참조하는 객체이다.
재사용이 가능한 XML 조각, DTD 조각, 긴 문자열, 상수, non-XML 데이터가 될 수 있다.
엔티티는 XML 문서뿐만 아니라 DTD 문서 안에서도 참조가 가능하다.
XXE Injection으로 할 수 있는 공격의 종류
LFI, RFI, XXS Attack, DOS가 있다.
LFI는 상대경로를 이용해 원하는 파일에 접근할 수 있다.
RFI는 외부의 악의적인 코드를 실행시킨다.
XXS는 XML문서를 파싱할 때 CDATA 섹션에 둘러싸인 문자는 XML 파서가 구문으로 해석하지 않아 XSS코드가 완성되면서 실행된다.
DOS는 일종의 XML bomb 공격으로 하나의 엔티티에 다른 엔티티를 계속적으로 참조하여 관련 프로그램의 과부하를 유도한다.
(POC는 아래 레퍼런스 참조)
XXE Injection을 막으려면
XML 파서에서 DOCTYPE 태그를 사용하지 못하도록 설정하거나 필터링을 해줘야 한다.
PHP의 libxml_disable_entity_loader 함수를 사용해 외부 엔티티 사용을 비활성화 할 수도 있다.
레퍼런스
https://soft.plusblog.co.kr/95
https://koromoon.blogspot.com/2020/02/xxe-injection.html
'background > web' 카테고리의 다른 글
SSTI(Server Side Template Injection) (0) | 2022.09.29 |
---|---|
XXE Injection 이해를 위한 XML 기초 지식 (0) | 2022.08.29 |
[MySQL] select 문의 where 절에서 문자열과 숫자의 비트 연산으로 테이블의 모든 데이터 출력되는 현상 (0) | 2022.08.09 |
Same Origin Policy(SOP) (0) | 2022.07.27 |
웹 브라우저 엔진과 웹 브라우저 엔진의 렌더링 과정 (0) | 2022.07.08 |