Django, 계정 탈취 취약점(CVE-2019-19844) 발견
[이미지 출처: www.sevenmentor.com]
어떤 취약점 인가?
이 취약점은 django의 특정 함수의 취약함에의해 사용자 계정의 비밀번호 재설정 메일이 사용자의 메일이 아닌 공격자의 메일로 발송되게 만들수 있는 취약점이다.
문제된 코드는 무엇인가?
[이미지 출처: https://ryu22e.org/posts/2019/12/25/django-cve-2019-19844/]
특별한 문제가 없는 코드처럼 보이지만 문제점은 iexact에서 대소문자를 구분하지 않는 점에서 발생한다. 본래 데이터베이스상에서는 Ci@cyberone.kr 과 CI@cyberone.kr은 다른 이메일 주소이다. 하지만 iexact에서는 ‘i’ 와 ‘I’를 동일한 문자로 판단하여 같은 메일주소로 인식되어진다.
공격 시나리오
기존 사용자
- 사용자이름 : Ci
- 이메일주소 : Ci@cyberone.kr
공격자
- 서비스에 가입되지 않은 이메일주소 : CI@cyberone.kr
비밀번호 재설정 페이지에 접근하여 사용자:Ci, 이메일주소:CI@cyberone.kr를 입력 후 비밀번호 재설정을 진행한다. 본래대로면 CI@cyberone.kr가 데이터베이스에 존재하지 않으므로 비밀번호 재설정이 진행되지 않아야하지만 iexact는 Ci@cyberone.kr와 CI@cyberone.kr를 동일하게 판단하여 비밀번호 재설정 서비스를 공격자 이메일에 제공한다.
영향받는 버전
- Django master branch
- Django 3.0
- Django 2.2
- Django 1.11
참고사이트:
https://github.com/django/django/blob/3.0/django/contrib/auth/forms.py#L272-L275
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-19844
보안관제센터 MIR Team