본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

XPath 인젝션(XPath Injection)은 응용 프로그램이 외부 입력을 검증 없이 이어 붙여 XPath 질의를 만들 때, 공격자가 질의 구조를 바꾸는 문자열을 넣어 인증을 우회하거나 허가되지 않은 XML 데이터를 읽어 내는 공격이다.

XPath 는 XML 문서에서 원하는 요소와 속성을 골라내는 경로 언어로, W3C 가 표준을 낸다.[1] 사용자 계정이나 설정을 XML 파일에 두는 응용 프로그램은 로그인할 때 입력받은 아이디와 비밀번호를 XPath 식에 넣어 일치하는 노드를 찾는다. 이 식을 문자열 연결로 만들면 SQL 인젝션과 똑같은 구조의 약점이 생긴다. MITRE 는 이를 CWE-643 으로 두고, 외부 입력으로 XML 데이터베이스를 조회하는 XPath 식을 동적으로 만들면서 그 입력을 중화하지 않거나 잘못 중화하는 약점이라고 정의한다.[2]

String expr = "//users/user[login/text()='" + id +
              "' and password/text()='" + pw + "']/home_dir/text()";
  • 비밀번호 칸에 ' or '1'='1 을 넣으면 조건이 항상 참이 되어 비밀번호 없이 첫 사용자의 노드가 선택된다
  • XPath 에는 SQL 의 테이블 권한 같은 접근 통제가 없어서, 질의를 조작하면 XML 문서 전체를 읽을 수 있다. CWE-643 도 공격자가 XPath 질의를 바꿔 제한된 XML 내용을 골라 읽을 수 있다고 적는다[2]
  • 결과가 참·거짓으로만 드러나도 한 글자씩 추측해 문서 구조와 값을 알아내는 블라인드 기법이 쓰인다
  • 매개변수화된 XPath 질의를 쓴다. 변수 바인딩을 지원하는 API(XQuery, XPath 변수 확인자)로 입력을 데이터로만 넘기면 질의 구조와 값이 분리된다[2]
  • 입력값을 허용 목록으로 검사하고, 따옴표·대괄호·/ 같은 XPath 특수 문자를 거부하거나 이스케이프한다 → 입력값 검증
  • 오류 메시지에 질의나 문서 구조를 드러내지 않는다
  • 행정안전부·KISA 소프트웨어 개발보안 기준은 이 약점을 '입력데이터 검증 및 표현' 유형에 둔다 → 시큐어 코딩

비슷한 인젝션·웹 취약점과 구별하기

편집 원본 편집
취약점 주입 대상 실행 위치·결과
XPath 인젝션 XML 문서를 조회하는 XPath 식 서버에서 XML 데이터 노출, 인증 우회
SQL 인젝션 관계형 DB 의 SQL 문 서버의 DBMS 에서 실행
LDAP 인젝션 디렉터리 검색 필터 디렉터리 서버 조회 조작
크로스사이트 스크립트(XSS) 웹 페이지에 출력되는 스크립트 다른 사용자의 브라우저에서 실행
크로스사이트 요청위조(CSRF) 사용자가 모르게 보내는 요청 로그인한 사용자의 권한으로 서버 기능 실행
디렉토리 리스팅 주입 없음(서버 설정 문제) 기본 문서가 없는 디렉터리의 파일 목록 노출
  1. ↑ 「XML Path Language (XPath) 3.1」, W3C Recommendation, https://www.w3.org/TR/xpath-31/, 확인일: 2026-11-04.
  2. ↑ 2.0 2.1 2.2 「CWE-643: Improper Neutralization of Data within XPath Expressions ('XPath Injection')」, MITRE, https://cwe.mitre.org/data/definitions/643.html, 확인일: 2026-11-04.