경로 조작 (Path Traversal)
Path Traversal
설명
경로 조작(Path Traversal)은 공격자가 파일 경로에 '../' 등과 같은 특수 문자를 포함시켜 애플리케이션의 허가되지 않은 파일 또는 디렉터리에 접근하는 취약점입니다. 주로 사용자로부터 받은 입력값을 검증 없이 파일 시스템 함수에 넘길 때 발생합니다. 공격자는 이를 통해 중요한 시스템 파일이나 민감 정보를 읽거나 덮어쓸 수 있습니다.
잠재적 영향
파일 무단 접근 (허가되지 않은 파일 접근): 공격자가 중요한 시스템 파일이나 다른 사용자의 데이터에 접근할 수 있습니다.
데이터 변조 및 삭제 (데이터 훼손): 공격자가 중요한 파일을 변경하거나 삭제할 수 있습니다.
서비스 장애 유발 (서비스 거부 공격): 시스템의 핵심 파일이 손상되어 서비스가 정상적으로 동작하지 않을 수 있습니다.
해결 방법
사용자 입력값에서 '../', '/', '\' 등 경로 변조 문자열이 포함되어 있는지 검사합니다.
특정 디렉터리 내에서만 파일 접근을 허용하고, 절대 경로 사용을 제한합니다.
Node.js의 path.normalize() 등을 이용하여 경로를 정규화 후, 필수 디렉터리 범위 내에 있는지 검증합니다.
파일명 화이트리스트(허용 목록)나 미리 정의된 규칙만 허용합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 사용자의 입력값(fileName)을 검증하지 않고 그대로 파일 시스템 함수(fs.readFile)에 사용해서 '../' 등 경로 조작이 가능해집니다. 공격자는 시스템 내의 임의 파일에 접근할 수 있습니다.
안전한 코드: 입력값을 path.normalize()로 정규화하고, BASE_DIR로 시작하는지 비교하여 상위 디렉터리로의 접근을 차단합니다. 허용된 디렉터리 내에서만 파일 접근을 허용해 안전하게 동작합니다.
참조
Last updated