경로 조작 (Path Traversal)

Path Traversal

설명

경로 조작(Path Traversal)은 공격자가 파일 경로에 '../' 등과 같은 특수 문자를 포함시켜 애플리케이션의 허가되지 않은 파일 또는 디렉터리에 접근하는 취약점입니다. 주로 사용자로부터 받은 입력값을 검증 없이 파일 시스템 함수에 넘길 때 발생합니다. 공격자는 이를 통해 중요한 시스템 파일이나 민감 정보를 읽거나 덮어쓸 수 있습니다.

잠재적 영향

  • 파일 무단 접근 (허가되지 않은 파일 접근): 공격자가 중요한 시스템 파일이나 다른 사용자의 데이터에 접근할 수 있습니다.

  • 데이터 변조 및 삭제 (데이터 훼손): 공격자가 중요한 파일을 변경하거나 삭제할 수 있습니다.

  • 서비스 장애 유발 (서비스 거부 공격): 시스템의 핵심 파일이 손상되어 서비스가 정상적으로 동작하지 않을 수 있습니다.

해결 방법

  • 사용자 입력값에서 '../', '/', '\' 등 경로 변조 문자열이 포함되어 있는지 검사합니다.

  • 특정 디렉터리 내에서만 파일 접근을 허용하고, 절대 경로 사용을 제한합니다.

  • Node.js의 path.normalize() 등을 이용하여 경로를 정규화 후, 필수 디렉터리 범위 내에 있는지 검증합니다.

  • 파일명 화이트리스트(허용 목록)나 미리 정의된 규칙만 허용합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 사용자의 입력값(fileName)을 검증하지 않고 그대로 파일 시스템 함수(fs.readFile)에 사용해서 '../' 등 경로 조작이 가능해집니다. 공격자는 시스템 내의 임의 파일에 접근할 수 있습니다.

  • 안전한 코드: 입력값을 path.normalize()로 정규화하고, BASE_DIR로 시작하는지 비교하여 상위 디렉터리로의 접근을 차단합니다. 허용된 디렉터리 내에서만 파일 접근을 허용해 안전하게 동작합니다.

참조

Last updated