728x90
반응형

※ XML 외부 개체(XXE)

XXE는 악의적인 자바스크립트를 막기 위한 필터장치를 우회하는 취약점으로 XML 문서에서 동적으로 외부 URI의 리소스를 포함시킬 수 있는 외부 엔티티(Entity)를 사용할 때 발생한다.

오래되고 설정이 엉망인, 많은 XML 프로세서들은 XML 문서 내에서 외부 개체 참조를 평가한다.

외부 개체는 파일 URL 처리기, 내부 파일 공유, 내부 포트 스캔, 원격 코드 실행과 서비스 거부 공격을 사용하여 내부 파일을 공개하는데 사용할 수 있다.

 

※ XXE Injection

일반적으로 잘못 구성된 XML Parser를 사용하여 신뢰할 수 없는 XML 공격 코드를 주입시켜 실행시키는 응용프로그램에 대한 공격을 말한다. 해당 공격을 통해서 주요 시스템 파일 접근(LFI)이나 외부 악의적인 파일 참조(RFI)가 가능하다. 보통 XML Parser설정에서 External Entity 사용을 금지시키지 않아 발생한다.

 

※ XXE Injection 공격 종류

1) LFI Attack

상대경로(../)를 이용한 원하는 파일 액세스(/etc/passwd, boot.ini)가 가능하다.

2) RFI Attack

외부 악의적인 코드를 실행시킨다.

3) XSS Attack

XML 문서를 파싱할 경우 CDATA 섹션에 둘러싸인 문자는 XML Parser가 구문으로 분석하지 않으므로 XSS 공격 코드를 완성되어 실행된다.(<script>alert('xss')</script>)

4) DoS Attack

일종의 XML Bomb 공격으로 하나의 ENTITY에 다른 ENTITY를 계속적으로 참조하여 관련 응용프로그램의 부하를 일으키는 공격 이다. 해당 코드는 1KB 보다 작은 코드이지만 최종적으로 참조된 ENTITY를 XML Parser가 처리하게 될 때는 10억(2의9승)개의 "lol"문자열을 처리해야 하므로 메모리 상에서는 약 3GB를 차지한다.

(한 문자열 당 1Byte를 차지하며 계산해보면 약 3GB가 나온다).

한 개의 코드로 DoS 공격이 가능하다.

※ XXE Injection 대응방안

XXE Injection은 DOCTYPE 태그를 사용하여 Injection 공격을 수행한다. XML Parser에서 DOCTYPE 태그를 사용하지 않도록 설정하거나 코드 상 DOCTYPE 태그를 포함하는 입력을 차단하도록 입력 검증을 사용한다.

 

PHP 코드 상에서는 libxml_disable_entity_loader 함수를 이용하여 외부 ENTITY 사용을 비활성화할 수 있다.

다른 방법으로는 코드 상 DOCTYPE 태그에 대해 다른 문자열로 치환시키는 방법이 있다.

 

728x90
반응형

+ Recent posts