[하루한줄] CVE-2021-33203: Django path traversal vulnerability
URL
GHSL-2021-075: Path injection in Django - CVE-2021-33203
Target
- tested version: Django 3.2.2
Explain
파이썬에서 작성된 오픈소스 웹 프레임워크 Django에서 path traversal 취약점이 발견되었습니다. 해당 취약점은 django.contrib.admindocs
모듈이 활성화되었을 때 발생합니다.
class TemplateDetailView(BaseAdminDocsView):
...
def get_context_data(self, **kargs):
...
template_file = Path(directory) / template
if template_file.exists():
template_contents = template_file.read_text()
...
get_context_data()
함수에서 해커는 template 변수를 임의의 값으로 설정할 수 있고 이를 별다른 검증 없이 Path join 합니다. 이를 이용해 template directory 외부 경로의 파일을 제공할 수 있어 http://localhost:8000/admin/doc/templates//etc/passwd/
와 같은 요청을 보내는 것으로 파일 시스템 내 임의 경로의 파일 내용이 렌더링 메서드로 전달되어 파일 내용이 유출될 수 있습니다. 해당 취약점은 아래와 같이 safe_join
함수를 사용해 경로를 합치는 것으로 패치되었습니다.
template_file = Path(safe_join(directory, template))
자세한 패치 히스토리는 https://github.com/django/django/commit/46572de2e92fdeaf047f80c44d52269e54ad68db 에서 확인할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.