가. 취약점 개요
XML 문서를 조회할 경우 입력값 조작으로 XQuery나 XPath와 같은 XML 질의문의 구조를 임의 로 변경하여 허가되지 않은 데이터를 조회하거나 인증절차를 우회할 수 있다.
나. 설계시 고려사항
① XML문서를 조회하는 기능을 구현해야 하는 경우 XML질의문에 사용되는 파라미터는 반드시 XML질의문을 조작할 수 없도록 필터링해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 바인딩해서 사용해야 한다.
(ㄱ) 공통 검증 컴포넌트를 이용한 입력값 필터링 외부입력값에서 XML삽입 공격이 가능한 문자열들을 필터링하 Validator 컴포넌트를 개발하여 XML조회를 수행하는 애플리케이션 작성시 입력값에 대한 검증 작업이 일괄 적용되도록 설계한다.
(ㄴ) 필터 컴포넌트를 이용한 입력값 필터링 Filter컴포넌트에서 XML 삽입 공격에 활용될 수 있는 입력값(“, [, ], /, =, @)을 필터링하도록 작성하여 전체 요청 또는 XML필터링이 요구되는 요청에 대해 프레임워크에서 일괄 적용하도록 설계한다.
(ㄷ) 개별 코드에서 입력값 필터링하도록 시큐어코딩 규칙 정의 각각의 컴포넌트에서 입력값에 대해 XML삽입을 발생시킬 수 있는 문자열(“, [, ], /, =, @ 등)을 제거 또는 안전하게 치환하여 사용할 수 있도록 시큐어코딩 규칙을 정의한다.
(ㄹ) 안전한 API를 사용하도록 시큐어코딩 규칙 정의 XML 조회를 수행하는 질의문 작성 시 외부입력값이 질의문의 구조를 바꿀 수 없는 API(예. Java API‐ XQuery) 를 사용하도록 시큐어코딩 규칙을 정의한다.
[테스트 문제]
문제: XML문서를 조회하는 기능을 구현해야 하는 경우 XML질의문에 사용되는 파라미터는 XML질의문을 조작할 수 있도록 필터링해서 사용해야한다.
정답: X
해설: XML문서를 조회하는 기능을 구현해야 하는 경우 XML질의문에 사용되는 파라미터는 반드시 XML질의문을 조작할 수 없도록 필터링해서 사용하거나
문제: 보안대책을 서술하시오.
정답: XML쿼리를 조작할 수 없도록 필터링하고, 입력값을 자료형에 따라 바인딩한다.
① XML문서를 조회하는 기능을 구현해야 하는 경우 XML질의문에 사용되는 파라미터는 반드시 XML질의문을 조작할 수 없도록 (ㄱ)해서 사용하거나, 미리 작성된 질의문에 입력값을 자료형에 따라 (ㄴ)해서 사용해야 한다.
1-1. 공통 검증 컴포넌트를 이용한 입력값 필터링 외부입력값에서 XML삽입 공격이 가능한 문자열들을 필터링하는 (ㄷ)를 개발하여 XML조회를 수행하는 애플리케이션 작성시 입력값에 대한 검증 작업이 일괄 적용되도록 설계한다.
1-2. 필터 컴포넌트를 이용한 입력값 필터링 (ㄹ)에서 XML 삽입 공격에 활용될 수 있는 입력값(“, [, ], /, =, @)을 필터링하도록 작성하여 전체 요청 또는 XML필터링이 요구되는 요청에 대해 프레임워크에서 일괄 적용하도록 설계한다.
1-3. 개별 코드에서 입력값 필터링하도록 시큐어코딩 규칙 정의 각각의 컴포넌트에서 입력값에 대해 XML삽입을 발생시킬 수 있는 문자열(“, [, ], /, =, @ 등)을 제거 또는 안전하게 (ㅁ)하여 사용할 수 있도록 (ㅂ) 규칙을 정의한다.
(ㄹ) 안전한 (ㅅ)를 사용하도록 시큐어코딩 규칙 정의 XML 조회를 수행하는 질의문 작성 시 외부입력값이 질의문의 구조를 바꿀 수 없는 (ㅅ)(예. Java API‐ XQuery) 를 사용하도록 시큐어코딩 규칙을 정의한다.
정답
ㄱ: 필터링
ㄴ: 바인딩
ㄷ: Validator 컴포넌트
ㄹ: Filter 컴포넌트
ㅁ: 치환
ㅂ: 시큐어코딩
ㅅ: API