🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
위아래 1줄씩 띄우고 중요한 부분은 볼드 효과
📍 XXE Injection이란?
👉🏻 XML External Entity: XML 외부 개체 주입
👉🏻 json의 등장으로 XML 사용은 줄어든 추세이나 아직 사용하는 곳이 많아서 해당 부분도 고려해야 함
📍 공격 대상
👉🏻 XML 파서 기능이 있는 Application에서 공격을 시도함
👉🏻 해당 기능이 많지는 않으나 레거시 시스템에서는 아직 사용 중이라 해커들의 먹잇감이 되고 있음
📍 공격 원리 분석
// 정상적인 XML Parser 예시
사용자 <-> Application <-> XML 파서 <-> XML
// 비정상적인 XML Parser 예시
DTD를 이용한 외부개체 참조
--------------
사용자 <-> Application <-> XML 파서 <-> XML <-> 외부파일
👉🏻 XML에서 끝나는 것이 아니라 외부 파일을 참조하게 함으로써 정보 탈취
// 정상적인 입력값
<?xml version="1.0" encoding("UTF-8"?>
<shop>
<food>
<name>수박</name>
<cost>12,000</cost>
</food>
<food>
<name>사과</name>
<cost>2,000</cost>
</food>
</shop>
// 비정상적인 입력값
<?xml version="1.0" encoding("UTF-8"?>
<!DOCTYPE test[
<!ENTITY testtest SYSTEM "file://etc/passwd">
]>
<result>&testtest;</result>
👉🏻 SYSTEM이라는 지시어를 사용하여 외부 개체를 참조할 수 있게 하는 비정상적인 입력값
📍 대응 방안
👉🏻 JSON 데이터 형식으로 기능 구현
// 외부 개체 비활성화 소스코드 예시
...
factory = dbFactory.newDocumentBuilder();
doc = dBuilder.parse(xmlFile);
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
...
👉🏻 DTD 및 외부 엔티티 비활성화
👉🏻 XML Parser 기능 비활성화
출처