OWASP 카테고리: MASVS-STORAGE: 저장소
개요
경로 순회 취약점은 유효성 검증 없이 파일 시스템 API로 전달되는 경로의 일부를 공격자가 제어할 수 있는 경우에 발생합니다. 이로 인해 승인되지 않은 파일 시스템 작업이 발생할 수 있습니다. 예를 들어, 공격자는 ../
와 같은 특수문자를 사용하여 타겟팅된 디렉터리 외부를 순회하는 방식으로 리소스 타겟을 예기치 않게 변경할 수 있습니다.
영향
이 취약점의 영향은 작업 및 파일 콘텐츠에 따라 달라지지만, 일반적으로 파일 덮어쓰기(파일에 쓸 때), 데이터 유출(파일을 읽을 때) 또는 권한 변경(파일/디렉터리 권한을 변경할 때)으로 이어집니다.
완화 조치
File.getCanonicalPath()
를 사용하여 경로를 표준화하고 접두사를 예상 디렉터리와 비교합니다.
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
자바
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
추가적인 권장사항은 예상되는 결과만 발생하도록 유효성 검증을 사용하는 것입니다. 예를 들면 다음과 같습니다.
- 우발적인 덮어쓰기가 이루어지지 않도록 파일이 이미 있는지 확인합니다.
- 데이터 유출이나 올바르지 않은 권한 변경을 방지하기 위해 타겟팅된 파일이 예상된 타겟인지 확인합니다.
- 작업의 현재 디렉터리가 표준 경로의 반환 값에 예상되는 것과 정확히 일치하는지 확인합니다.
- 작업이 루트 권한으로 실행되고 있지 않은지 확인하는 등 권한 시스템의 범위가 해당 작업으로 명시되었는지 확인하고, 디렉터리 권한의 범위가 지정된 서비스 또는 명령어로 지정되었는지 확인합니다.
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 압축 파일 경로 순회