XML 외부개체(XXE) (XML External Entity)

정보보안학
한 줄 정의: XML 문서 안에 외부 자원을 참조하는 개체 선언을 악용하여 서버의 파일이나 내부 시스템 정보를 유출시키는 공격 기법입니다.

쉽게 풀면

XXE는 문서 양식 안에 "이 부분은 다른 서류철에서 가져와 채워 넣어라"라는 지시문을 몰래 끼워 넣는 것과 비슷합니다. XML 문서는 특정 값을 외부의 다른 파일이나 위치에서 불러와 채워 넣도록 지시하는 기능을 가지고 있는데, 이를 처리하는 서버가 이 지시문을 제한 없이 실행해 버리면 공격자는 서버 내부의 비밀 파일 내용을 응답 결과에 그대로 포함시켜 빼돌릴 수 있습니다.

왜 중요한가

XXE는 서버 내부 파일 유출뿐 아니라 내부 네트워크 접근이나 서비스 거부 공격으로도 이어질 수 있어 웹 애플리케이션 보안에서 심각도가 높은 취약점으로 다뤄집니다. XML을 다루는 다양한 시스템, 파일 업로드 기능, 문서 변환 서비스 등에서 반복적으로 발견되는 취약점 유형입니다.

논문에서는 이렇게 쓰입니다

"업로드된 XML 파일을 파싱하는 과정에서 외부 개체 참조가 제한되지 않아, 공격자가 서버의 시스템 파일을 읽어낼 수 있는 XXE 취약점이 발견되었다."

파일 업로드 기능에서 발생한 XXE 취약점 사례를 설명하는 문장입니다.

"본 연구에서는 XML 파서 설정에서 외부 개체 처리 기능을 비활성화하는 것만으로도 XXE 공격 표면을 효과적으로 줄일 수 있음을 확인하였다."

XXE 방어 방안으로서 파서 설정 변경의 효과를 언급하는 문장입니다.

조금 더 깊게 보면

XXE는 XML 문서 정의(DTD) 안에서 외부 개체(external entity)를 선언하는 기능을 악용합니다. 이를 통해 서버 내부 파일을 읽어내는 것 외에도, 내부 네트워크의 다른 서버에 요청을 보내게 하거나, 재귀적인 개체 참조를 통해 서버 자원을 고갈시키는 방식으로도 악용될 수 있습니다. 대부분의 최신 XML 파서는 외부 개체 처리 기능을 기본적으로 비활성화하거나 선택적으로 끌 수 있는 옵션을 제공합니다.

주의할 점

JSON 기반 API로 전환했다고 해서 XXE 위험이 완전히 사라지는 것은 아니며, 문서 업로드나 변환 기능 등 여전히 XML을 내부적으로 처리하는 구간이 남아 있는지 함께 점검해야 합니다.

관련 용어