Path Manipulation

2023. 1. 17. 06:09지식정리

Path manipulation

위험도

  • high

요약

file 시스템 경로를 입력값이나 변수로 제어가능할 때, 공격자가 의도할 경우 보호해야할 파일이 접근, 수정될 수 있습니다.

설명

path manipulation은 공격자가 파일 시스템 작업에 사용되는 경로를 지정할 수 있고,

리소스를 지정해서 다른식으로는 허용될수 없는 권한을 얻을 수 있을 때, 이 두 조건을 만족할 때 성립한다.

공격자는 특정 파일을 덮어쓰거나, 제어하는 식으로 실행권한을 획득할 수 있다.

예시

file 접근 시 file 경로에 request.getParameter(NAME) 같이 parameter 값이 포함 되는 경우가 있는데,

해당 parameter 값을 제어해서 ../../tomcat/conf/server.xml 같이 상위 디렉토리를 타고 서버 설정파일에 접근할 수 있다.

EX1

../../tomcat/conf/server.xml 같은 파일이름을 통해 서버의 구성파일을 접근 및 삭제

String rName = request.getParameter("reportName"); 
File rFile = new File("/usr/local/apfr/reports/" + rName); 
... 
rFile.delete();

EX2

구성파일 입력을 통해 파일을 열고 사용자에게 반환, 프로그램을 사용해서 txt 확장자 파일을 읽을 수 있게 한다

fis = new FileInputStream(cfg.getProperty("sub") + ".txt"); 
amt = fis.read(arr); 
out.println(arr);

EX3(Android)

같은 장치에 여러 소스 프로그램이 다운, 실행되는 특성을 이용한 모바일 환경 상의 자가 공격

String rName = this.getIntent().getExtras().getString("reportName"); 
File rFile = getBaseContext().getFileStreamPath(rName); 
... 
rFile.delete();

방지법

  1. file upload 시
  • 상위 디렉토리 접근을 방지하기 위한 .. 문자열 제거.
  • 업로드 디렉토리를 지정
  • 웹서버에서 실행가능한 확장자인 .jsp, .asp, .js 와 같은 확장자 제거
  • 업로드 디렉토리의 실행 권한을 제거 - 770 -> chmod 660 FILENAME

ex)

fileName = request.getParameter("filename").replaceAll("..","");

if( !fileName.endsWith(".js") || !fileName.endsWith(".asp") || !fileName.endsWith(".js")) {

    File f = new File("/was/upload/" + fileName);

    ~~ UPLOAD LOGIC ~~~

}
  1. file download 시
  • .. 문자열 제거
  • 다운로드 디렉토리 지정
  • .jsp, .asp, .js , .properties , web.xml 같은 중요한 파일 다운로드 금지 구문 추가

ex) upload 예시와 같음

핵심은 파일 접근시 외부 입력을 받아들이는 경우, 경로조작에 이용될 수 있는 문자열을 충분히 필터링하는 것이다.

그리고 경로에 사용되는 외부 입력 값에 대한 화이트리스트를 만들어 해당 문자만 허용하는 것이다.

JAVA 예시

name = name.replaceAll("/","");
name = name.replaceAll("\\","");
name = name.replaceAll(".","");
name = name.replaceAll("&","");

'지식정리' 카테고리의 다른 글

Division by Zero(0으로 나누기)  (2) 2023.01.17
7. CSS  (0) 2022.05.20
6. Browser는 어떻게 동작하는가?  (0) 2022.05.15
5. Domain name이란?  (0) 2022.05.13
4. Web Hosting이란?  (0) 2022.05.12