IgnatiusHeo

구현단계 보안약점 제거 기준-부적절한 XML 외부개체 참조 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-부적절한 XML 외부개체 참조

Ignatius Heo 2023. 7. 4. 03:52

작성일: 230704

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(244~250p)

 

구분 - 입력데이터 검증 및 표현
설계단계 - XML 조회 및 결과 검증
https://cryptocurrencyclub.tistory.com/90
개요
XML 문서에는 DTD(Document Type Definition)를 포함할 수 있으며, DTD는 XML 엔티티 (entitiy)*를 정의한다. 부적절한 XML 외부개체 참조 보안약점은 서버에서 XML 외부 엔티티를 처리할 수 있도록 설정된 경우에 발생할 수 있다.

취약한 XML parser가 외부 값을 참조하는 XML 값을 처리할 때, 공격자가 삽입한 공격 구문이 동작되어 서버 파일 접근, 불필요한 자원 사용, 인증 우회, 정보 노출 등이 발생 할 수 있다.

진단 세부사항
(설계단계)
 
 ① XML문서를 조회하는 기능을 구현하는 경우 XML쿼리 파라미터는 반드시 쿼리를 조작할 수 없도록 필터링해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다. 또한 XML 조회를 위한 질의문 생성 시 사용되는 입력값과 조회결과에 대한 검증방법(필터링 등)을 설계하고 유효하지 않은 값에 대한 처리방법이 명시되어 있는지 확인한다.
 
  ㅇ  XML 조회에 사용되는 외부 입력값을 안전하게 필터링하는 기능이 설계되어 있거나 안전한 외부라이브러리를 사용하도록 설계되어 있는지 확인
  ㅇ  XML데이터를 조회하는 기능 구현시, XML필터링을 적용하기 위한 코딩규칙이나 안전하게 사용할 수 있는 API에 대한 설명이 개발가이드에 정의되어 있는지 확인
  ㅇ XML조회 구문을 변경할 수 있는 입력값을 사용하여 XML조회 구문이 변경되는지를 점검하는 테스트계획의 수립 여부 확인
    → 구문 변경 가능 입력값: 쿼리예약어, * [ ] / = @
 
보안대책
(구현단계)

로컬 정적 DTD를 사용하도록 설정하고, 외부에서 전송된 XML문서에 포함된 DTD를 완전하게 비활성화해야 한다.

비활성화를 할 수 없는 경우에는 외부 엔티티 및 외부 문서 유형 선언을 각 파서에 맞는 고유한 방식으로 비활성화 한다.

진단방법
(구현단계)

① XML 파일을 파싱하고 있는지 확인한 후 신뢰할 수 없는 외부 입력 값의 파일에 대한 외부 엔티티를
비활성화하는 코드가 없을 경우 취약하다고 판정한다.

 

다. 코드예제


ㅇ 분석

1: public void unmarshal(File receivedXml)
2:throws JAXBException, ParserConfigurationException, SAXException, IOException {
3: JAXBContext jaxbContext = JAXBContext.newInstance( Student.class );
4: Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
5: 
6: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
7: dbf.setNamespaceAware(true);
8: DocumentBuilder db = dbf.newDocumentBuilder();
9: Document document = db.parse(receivedXml);
10: 
11: Student employee = (Student) jaxbUnmarshaller.unmarshal( document );
12: }

ㅇ 설명

1. receivedXml을 별 검증 없이 r9에서 파싱 후 11에서 언마샬을 수행하는데 이 과정에서 입력 xml의 검증 내용이 없음

2. r9 전에 검증하는 내용이 있어야 할듯

 

 

 

끝.