URL 매개변수, POST 데이터 페이로드 또는 쿠키와 같이 사용자가 제공한 데이터는 항상 신뢰할 수 없고 오염된 것으로 간주해야 합니다. 공격자가 오염된 데이터에서 직접 파일 시스템 경로를 구성하면 ‘../’와 같이 특수하게 조작된 값을 삽입하여 초기 경로를 변경하고 액세스 시 사용자가 일반적으로 액세스해서는 안 되는 파일 시스템의 경로로 확인할 수 있습니다.
공격이 성공하면 공격자는 파일 시스템에서 중요한 정보를 읽거나 수정 또는 삭제할 수 있으며, 때로는 임의의 운영 체제 명령을 실행할 수도 있습니다. 이를 흔히 ‘경로 탐색’ 또는 ‘디렉터리 탐색’ 공격이라고 합니다.
방어 전략은 허용된 경로 또는 문자의 화이트리스트에 기반해야 합니다.
규칙을 어긴 코드
from flask import request, send_file
@app.route('/download')
def download():
file = request.args['file']
return send_file("static/%s" % file, as_attachment=True) # 규칙을 어긴 코드
규칙을 준수한 해결책
from flask import request, send_from_directory
@app.route('/download')
def download():
file = request.args['file']
return send_from_directory('static', file) # 규칙을 준수한 코드
같이보면 좋은 자료
- OWASP Top 10 2021 Category A1 - 취약한 접근 제어
- OWASP Top 10 2021 Category A3 - 인젝션
- OWASP Top 10 2017 Category A1 - 인젝션
- OWASP Top 10 2017 Category A5 - 취약한 접근 제어
- MITRE, CWE-20 - 부적절한 입력 유효성 검사
- MITRE, CWE-22 - 제한된 디렉토리에 대한 경로 이름의 부적절한 제한(‘Path Traversal’)
- MITRE, CWE-99 - 리소스 식별자의 부적절한 제어(‘Resource Injection’)
- MITRE, CWE-641 - 파일 및 기타 리소스에 대한 부적절한 이름 제한
-
SANS Top 25 - 위험한 리소스 관리
If you like SONARKUBE, don’t forget to give me a star.