설명
사용자 입력을 문자열 결합이나 포맷팅으로 XPath 표현식에 포함하면 공격자가 조건을 우회하거나 의도하지 않은 XML 노드를 조회할 수 있습니다.
잠재적 영향
- 인증 또는 권한 검증 우회가 발생할 수 있습니다.
- XML 기반 데이터에서 민감 정보가 노출될 수 있습니다.
해결 방법
- XPath 표현식은 상수로 두세요. 사용하는 API가 지원하면 값만 변수로 바인딩하고, 그렇지 않으면 고정된 경로로 노드를 선택한 뒤 애플리케이션에서 값을 비교하세요.
- 입력값의 형식과 길이를 허용 목록으로 검증하고, 반환할 노드에 대한 접근 권한도 확인하세요.
예시
goxpath, XML 문서 doc, 요청 r이 준비된 코드 일부입니다.
변경 전
go
expr := "//user[@id='" + r.FormValue("id") + "']"
goxpath.MustExec(expr, doc)
변경 후
go
expr := "/root/user"
goxpath.MustExec(expr, doc)
설명:
- 변경 전: 입력이 XPath 문법에 직접 포함되어 조건을 바꿀 수 있습니다.
- 변경 후: 고정 경로만 조회하며 변수 바인딩이나 ID 필터는 구현하지 않습니다. 필요한 사용자 선택과 권한 검증을 별도로 구현한 뒤 결과를 반환하세요.