InfoGrab DocsInfoGrab Docs

경로 탐색 (Path Traversal)

요약

많은 파일 작업은 제한된 디렉터리 안에서 수행되도록 설계됩니다. 많은 프로그래밍 언어에서 null 바이트(0 또는 NULL)를 주입하면 공격자가 생성된 파일명을 잘라내어 공격 범위를 넓힐 수 있습니다. 이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일과 웹 루트 외부의 파일에 접근을 시도합니다.

설명#

많은 파일 작업은 제한된 디렉터리 안에서 수행되도록 설계됩니다. 공격자는 .. 나 / 구분자와 같은 특수 요소를 사용하여 제한된 위치를 벗어나 시스템의 다른 곳에 있는 파일이나 디렉터리에 접근할 수 있습니다. 가장 흔한 특수 요소 중 하나는 ../ 시퀀스이며, 대부분의 현대 운영 체제에서 현재 위치의 상위 디렉터리로 해석됩니다. 이를 상대 경로 탐색이라고 합니다. 경로 탐색에는 /usr/local/bin과 같은 절대 경로명의 사용도 포함되며, 이 역시 예상치 못한 파일에 접근하는 데 이용될 수 있습니다. 이를 절대 경로 탐색이라고 합니다.

많은 프로그래밍 언어에서 null 바이트(0 또는 NULL)를 주입하면 공격자가 생성된 파일명을 잘라내어 공격 범위를 넓힐 수 있습니다. 예를 들어 소프트웨어가 모든 경로명에 .txt를 덧붙여 공격자를 텍스트 파일로 제한하더라도, null 주입으로 이 제한을 사실상 무력화할 수 있습니다.

이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일과 웹 루트 외부의 파일에 접근을 시도합니다. 이후 로그와 응답을 분석하여 파일에 실제로 접근했는지 탐지합니다.

해결 방법#

경로 탐색 공격 기법을 사용하면 공격자가 웹 문서 루트 디렉터리 외부에 있을 수 있는 파일, 디렉터리, 명령에 접근할 수 있습니다. 공격자는 웹 서버의 임의 파일 내용을 실행하거나 노출하도록 URL을 조작할 수 있습니다. HTTP 기반 인터페이스를 노출하는 모든 장치는 경로 탐색에 취약할 수 있습니다.

대부분의 웹 사이트는 사용자 접근을 파일 시스템의 특정 영역, 일반적으로 "웹 문서 루트" 또는 "CGI 루트" 디렉터리로 제한합니다. 이러한 디렉터리에는 사용자 접근을 위한 파일과 웹 애플리케이션 기능을 구동하는 데 필요한 실행 파일이 들어 있습니다. 경로 탐색 공격은 파일 시스템의 어느 위치에서든 파일에 접근하거나 명령을 실행하기 위해 특수 문자 시퀀스의 동작을 활용합니다.

가장 기본적인 경로 탐색 공격은 ../ 특수 문자 시퀀스를 사용하여 URL에서 요청되는 리소스 위치를 변경합니다. 널리 쓰이는 대부분의 웹 서버는 이 기법으로 웹 문서 루트를 벗어나는 것을 막지만, ../ 시퀀스의 대체 인코딩은 보안 필터를 우회하는 데 쓰일 수 있습니다. 이러한 변형에는 슬래시 문자의 유효하거나 유효하지 않은 유니코드 인코딩(..%u2216 또는 ..%c0%af), Windows 기반 서버의 백슬래시 문자(..), URL 인코딩된 문자(%2e%2e%2f), 백슬래시 문자의 이중 URL 인코딩(..%255c) 등이 있습니다.

웹 서버가 URL 경로에서 경로 탐색 시도를 적절히 차단하더라도, 웹 애플리케이션 자체가 사용자 입력을 부적절하게 처리하여 여전히 취약할 수 있습니다. 이는 템플릿 메커니즘을 사용하거나 파일에서 정적 텍스트를 읽어 오는 웹 애플리케이션에서 흔히 발생하는 문제입니다. 이 공격의 변형에서는 원래 URL 파라미터 값이 웹 애플리케이션의 동적 스크립트 파일명으로 대체됩니다. 그 결과 해당 파일이 실행 가능한 스크립트가 아니라 텍스트로 해석되어 소스 코드가 노출될 수 있습니다. 이러한 기법은 현재 작업 디렉터리의 목록을 드러내기 위한 점(.)이나, 기초적인 파일 확장자 검사를 우회하기 위한 %00 NULL 문자와 같은 추가 특수 문자를 함께 사용하는 경우가 많습니다.

링크#

경로 탐색 (Path Traversal)

GitLab v19.5
원문 보기

요약

많은 파일 작업은 제한된 디렉터리 안에서 수행되도록 설계됩니다. 많은 프로그래밍 언어에서 null 바이트(0 또는 NULL)를 주입하면 공격자가 생성된 파일명을 잘라내어 공격 범위를 넓힐 수 있습니다. 이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일과 웹 루트 외부의 파일에 접근을 시도합니다.

설명#

많은 파일 작업은 제한된 디렉터리 안에서 수행되도록 설계됩니다. 공격자는 .. 나 / 구분자와 같은 특수 요소를 사용하여 제한된 위치를 벗어나 시스템의 다른 곳에 있는 파일이나 디렉터리에 접근할 수 있습니다. 가장 흔한 특수 요소 중 하나는 ../ 시퀀스이며, 대부분의 현대 운영 체제에서 현재 위치의 상위 디렉터리로 해석됩니다. 이를 상대 경로 탐색이라고 합니다. 경로 탐색에는 /usr/local/bin과 같은 절대 경로명의 사용도 포함되며, 이 역시 예상치 못한 파일에 접근하는 데 이용될 수 있습니다. 이를 절대 경로 탐색이라고 합니다.

많은 프로그래밍 언어에서 null 바이트(0 또는 NULL)를 주입하면 공격자가 생성된 파일명을 잘라내어 공격 범위를 넓힐 수 있습니다. 예를 들어 소프트웨어가 모든 경로명에 .txt를 덧붙여 공격자를 텍스트 파일로 제한하더라도, null 주입으로 이 제한을 사실상 무력화할 수 있습니다.

이 검사는 요청의 파라미터(경로, 쿼리 문자열, 헤더, JSON, XML 등)를 수정하여 제한된 파일과 웹 루트 외부의 파일에 접근을 시도합니다. 이후 로그와 응답을 분석하여 파일에 실제로 접근했는지 탐지합니다.

해결 방법#

경로 탐색 공격 기법을 사용하면 공격자가 웹 문서 루트 디렉터리 외부에 있을 수 있는 파일, 디렉터리, 명령에 접근할 수 있습니다. 공격자는 웹 서버의 임의 파일 내용을 실행하거나 노출하도록 URL을 조작할 수 있습니다. HTTP 기반 인터페이스를 노출하는 모든 장치는 경로 탐색에 취약할 수 있습니다.

대부분의 웹 사이트는 사용자 접근을 파일 시스템의 특정 영역, 일반적으로 "웹 문서 루트" 또는 "CGI 루트" 디렉터리로 제한합니다. 이러한 디렉터리에는 사용자 접근을 위한 파일과 웹 애플리케이션 기능을 구동하는 데 필요한 실행 파일이 들어 있습니다. 경로 탐색 공격은 파일 시스템의 어느 위치에서든 파일에 접근하거나 명령을 실행하기 위해 특수 문자 시퀀스의 동작을 활용합니다.

가장 기본적인 경로 탐색 공격은 ../ 특수 문자 시퀀스를 사용하여 URL에서 요청되는 리소스 위치를 변경합니다. 널리 쓰이는 대부분의 웹 서버는 이 기법으로 웹 문서 루트를 벗어나는 것을 막지만, ../ 시퀀스의 대체 인코딩은 보안 필터를 우회하는 데 쓰일 수 있습니다. 이러한 변형에는 슬래시 문자의 유효하거나 유효하지 않은 유니코드 인코딩(..%u2216 또는 ..%c0%af), Windows 기반 서버의 백슬래시 문자(..), URL 인코딩된 문자(%2e%2e%2f), 백슬래시 문자의 이중 URL 인코딩(..%255c) 등이 있습니다.

웹 서버가 URL 경로에서 경로 탐색 시도를 적절히 차단하더라도, 웹 애플리케이션 자체가 사용자 입력을 부적절하게 처리하여 여전히 취약할 수 있습니다. 이는 템플릿 메커니즘을 사용하거나 파일에서 정적 텍스트를 읽어 오는 웹 애플리케이션에서 흔히 발생하는 문제입니다. 이 공격의 변형에서는 원래 URL 파라미터 값이 웹 애플리케이션의 동적 스크립트 파일명으로 대체됩니다. 그 결과 해당 파일이 실행 가능한 스크립트가 아니라 텍스트로 해석되어 소스 코드가 노출될 수 있습니다. 이러한 기법은 현재 작업 디렉터리의 목록을 드러내기 위한 점(.)이나, 기초적인 파일 확장자 검사를 우회하기 위한 %00 NULL 문자와 같은 추가 특수 문자를 함께 사용하는 경우가 많습니다.

링크#