ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2017 OWASP A4 : XML 외부개체 / XXE (XML External Entity) 취약점
    Knowledge/Web 2019. 6. 16. 00:15

     

    XML External Entity

     

     

     

    XXE 취약점에 대해 알기 위해서는 사전적으로 XML이란 무엇인지에 대해서 알고 있어야한다.

    XML이란 html의 한계를 극복하기 위해 만들어진 마크업 언어로 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하기 위해서 만들어진 언어이다.

    html과 다른점은 서로간의 데이터 전송을 위해서 사용된다는 것과 사용자의 눈에 보이지 않는 비가시적인 특성을 갖고 있다.

     

    이러한 XML에서 오래되고 설정이 부실한 프로세서들은 XML 문서 내에서 외부 개체 참조를 평가하게 된다.

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

     

    OWASP의 위험도 산정 기준을 보면

    공격 가능성 : 2

    확산정도 : 2

    탐지 가능성 : 3

    기술 : 3

    으로 책정이 되었습니다.

     

    - 공격 가능성

    XML 업로드가 가능하며, XML 문서에 취약한 코드, 의존성을 공격하는 악의적인 내용을 포함할 수 있다면 공격자는 취약한 XML 프로세스를 공격할 수 있다.

     

    - 확산 정도 & 탐지 가능성

    오래된 XML의 대부분이 XML을 처리하는 과정에서 참조되고 평가되는 URI에 대하여 외부 개체의 지정을 허용하게 됩니다.

    SAST는 의존성 및 설정을 조사함으로써 이 문제가 있는지 찾을 수 있다.

    그리고 DAST의 경우는 이것이 문제가 있는지 확인하고 공격 가능한지를 알기 위해서는 수작업을 필요로 한다.

     

    - 기술

    XML취약점은 데이터를 가져오거나 서버에서 원격 실행을 요청, 내부 시스템 탐지, 서비스 거부 공격 수행 등에 사용될 가능성이 있습니다.

     

     

    그렇다면 어떤 경우에 XML 취약점이 발생 할 수 있는가?

     

    당연히 XML 기반의 웹 서비스를 사용하거나 다운 스트림을 사용할 경우를 확인해야한다.

    - 애플리케이션이 직접 XML를 입력받거나 특히 신뢰할 수 없는 곳의 XML을 업로드하거나 XML 문서에 신뢰할 수 없는 데이터를 입력할 경우, 이는 XML 프로세서가 처리한다.

    - XML 프로세서나 웹 서비스 기반의 SOAP에 DTD가 활성화 되어있을 때는 DTD 처리를 비활성하는 방법이 다 다르기 때문에 OSASP Cheat Sheet를 참조하면 도움이 된다.

    - 애플리케이션이 페더레이션 보안이나 싱글 사인온의 목적으로 확인 처리를 하기 위해서 SAML을 사용할 경우 SAML이 assertio를 확인하기 위해 XML이 사용되면서 취약점이 터질 수가 있습니다.

    - 1.2 version 이하의 SOAP를 사용하고, XML 개체가 SOAP 프레임워크에 넘겨질 경우엔 취약점이 발생할 수가 잇다.

     

    2017년 당시 임베디드 장비를 포함하여 수많은 XXE 이슈들이 발생하였고 어쩔수 없이 사용되는 곳에서도 수많은 곳이 발생하는 피해를 입었습니다.

    XML을 이용한 공격중 가장 쉬운 방법은 취약한 XML파일을 업로드 하는 것으로 이 업로드가 가능하다면 취약한 것으로 볼 수 있다.

     

     

     

    여기서 XXE의 e자도 entity를 가리키는 이 entity란 무엇일까?

     

     

     

    Entity

    entity는 일종의 함수(혹은 객체나 변수 따위) 정의와도 같다.

    자주 사용되는 문자열따위를 다른 곳에 저장해 놓고 참조하는 개체이다.

    그래서 재사용이 가능한 xml 조각이나 dtd 조각, 상수, non-xml 데이터까지 다양하게 될 수 있다.

    이러한 entity는 xml문서를 물리적 구조화 하는데 도움을 준다.

    entity를 사용하는 방식은 이렇다.

    <!ENTITY 엔티티이름 "엔티티값">

    <!ENTITY 엔티티이름 SYSTEM "URI or URL">

     

     

    시나리오

     

    <공격자는 서버에서 데이터를 가져오려고 시도합니다.>

     <?xml version="1.0" encoding="ISO-8859-1"?> 

    <!DOCTYPE foo [
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> 

     

    공격자는 ENTITY 라인을변경하여서버의사설망을찾으려합니다.

    <!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]> 

     

    공격자는 잠재적으로 무한 파일을 포함하여 서비스 거부 공격을 시도합니다.

    <!ENTITY xxe SYSTEM "file:///dev/random" >]> 

     

    댓글

Designed by Tistory.