설계단계 보안설계 기준 - XML 조회 및 결과 검증
유형 | 입력데이터 검증 및 표현 |
설계항목 | XML 조회 및 결과 검증 |
설명 | XML 조회 시 질의문(XPath, XQuery 등) 내 입력값과 그 조회결과에 대한 유효성 검증방법(필터링 등)과 유효하지 않은 값에 대한 처리방법을 설계해야 한다. |
보안대책 | ① XML 문서를 조회하는 기능을 구현해야 하는 경우 XML 질의문에 사용되는 파라미터는 반드시 XML 쿼리를 조작할 수 없도록 필터링해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다. |
연관된 구현단계 기준 | XML 삽입 부적절한 XML 외부개체 참조 |
취약점 개요
XML 문서를 조회할 경우 입력값 조작으로 XQuery나 XPath와 같은 XML 질의문의 구조를 임의로 변경하여 허가되지 않은 데이터를 조회하거나 인증절차를 우회할 수 있다.
설계 시 고려사항
① XML 문서를 조회하는 기능을 구현해야 하는 경우 XML 질의문에 사용되는 파라미터는 반드시 XML 질의문을 조작할 수 없도록 필터링해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
(ㄱ) 공통 검증 컴포넌트를 이용한 입력값 필터링
외부입력값에서 XML 삽입 공격이 가능한 문자열들을 필터링하는 Validator 컴포넌트를 개발하여 입력값 검증 작업에 일괄 적용하도록 설계한다.
(ㄴ) 필터 컴포넌트를 이용한 입력값 필터링
XML 삽입 공격에 활용될 수 있는 입력값(" , [ , ] , / , = , @)을 필터링하는 Filter 컴포넌트를 개발하여 관련 프레임워크에 일괄 적용하도록 설계한다.
(ㄷ) 개별 코드에서 입력값 필터링하도록 시큐어코딩 규칙 정의
각각의 컴포넌트에서 입력값에 대해 XML 삽입을 발생시킬 수 있는 문자열(" , [ , ] , / , = , @)을 제거 또는 안전하게 치환할 수 있는 시큐어코딩 규칙을 정의한다.
(ㄹ) 안전한 API를 사용하도록 시큐어코딩 규칙 정의
외부입력값이 질의문의 구조를 바꿀 수 없는 API(ex. Java API-XQuery)를 사용하도록 시큐어코딩 규칙을 정의한다.
진단 세부사항
요구사항 ① XML 문서를 조회하는 기능을 구현해야 하는 경우 XML 질의문에 사용되는 파라미터는 반드시 XML 질의문을 조작할 수 없도록 필터링해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
- 외부 입력값이 XML 데이터 조회에 사용되는 경우, 입력값이 조회 구문을 변경하지 않도록 보안설계가 적용되어 있는지 확인
- XML 삽입 취약점을 점검할 수 있는 테스트 계획이 수립되어 있는지 확인