Technique/WEB

XXE ( Xml eXternal Entity ) 문제

kaelina 2016. 9. 6. 16:07
반응형

이번 프로젝트에 api를 담당하게 되었다.


처음엔 curl을 이용한 json만 이용가능한 api를 만들고 싶었으나, 막상 회사의 현실은 구 서비스는 xml 을 사용하고 있다는 사양이 있었고,


따라서 xml 도 대응해야만 했다.


xml 부분은 라이브러리가 어느정도 구비되어 있엇고,


내용을 열어보면 파일 타입과, string 타입에 따라


php 가 가지고 있는 것들중 하나인


SimpleXMLElement 을 사용하고 있다.


파일일 경우엔 simplexml_load_file() 함수를


string 의 경우엔 simplexml_load_string() 함수를 사용하고 있는데


xml 파일안에 사양으로 지정한 Dom이외에 새로은 엔티티가 접송될 경우 그대로 팟이되어 실행되고마는 문제가 발생햇다


즉 이를 Xml External Entity 취약성이라고 하며 XXE  라고 많이 표현한다.


이를 해결 하기 위해선 기존의 simple xml 이 가지고 있는 옵션중 하나인


libxml_disable_entity_loader() 을 사용하면 쉽게 끝나겍네 했는데 막상 옵션을 사용해 보아도 아무런 변화는 없엇다.


그래서 마지막으로 생각해낸게 String 으로 들어와있는 문자열안에 정규표현식으로 <!DOCTYPE 과  <!ENTITY  DOM이 존재하는지를 체크하고 나약 이 것들이 존재하나다면 파싱 실패 에러를 반환하도록 내부함수를 꾸밈으로써 해결되었다.











반응형