XPath 인젝션

XPath 인젝션

설명

사용자 입력을 문자열 결합이나 포맷팅으로 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 필터는 구현하지 않습니다. 필요한 사용자 선택과 권한 검증을 별도로 구현한 뒤 결과를 반환하세요.

참조