경로 탐색

C# 경로 탐색

설명

요청 입력이 파일 경로에 직접 결합되어 File.ReadAllText, File.WriteAllText, FileStream 같은 API에 전달되면 의도한 디렉터리 밖의 파일을 읽거나 쓸 수 있습니다.

잠재적 영향

  • 설정 파일, 비밀정보, 소스 코드 노출 또는 임의 파일 쓰기가 발생할 수 있습니다.

해결 방법

파일명을 정규화하고 기준 디렉터리 안에 있는지 검증합니다. 가능한 경우 허용된 파일명만 사용합니다.

예시

변경 전

csharp
var path = Path.Combine(baseDirectory, filename);
var content = File.ReadAllText(path);

변경 후

csharp
var safeName = Path.GetFileName(filename);
var path = Path.Combine(baseDirectory, safeName);
var content = File.ReadAllText(path);

설명:

  • 변경 전: 사용자가 제어하는 데이터로 파일 경로를 만들면 공격자가 의도한 디렉터리 밖에서 읽기 또는 쓰기를 수행할 수 있습니다.
  • 변경 후: Path.GetFileName으로 마지막 파일명 부분만 사용합니다. 기준 디렉터리와 그 안의 파일·링크를 공격자가 변경할 수 없어야 하며, 접근할 수 있는 파일을 제한해야 한다면 파일명 허용 목록도 검증하세요.

참조