
POC-Django: уязвимость SQL-инъекции в JSONField/HStoreField (CVE-2019-14234)
1 августа 2019 года Django выпустил обновление безопасности, исправляющее уязвимость SQL-инъекции в двух полях моделей JSONField и HStoreField.
Ссылка для справки:
https://www.djangoproject.com/weblog/2019/aug/01/security-releases/ https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html
Для возникновения уязвимости разработчик должен использовать JSONField/HStoreField; кроме того, имя поля в queryset должно быть контролируемым. Встроенное приложение Django-Admin затронуто этой уязвимостью, что даёт нам простой способ её воспроизведения.
Соберите и запустите уязвимый Django 2.2.3, выполнив следующие команды:
docker compose build
docker compose up -d
После запуска среды вы увидите домашнюю страницу Django по адресу http://your-ip:8000.
Сначала войдите в Django-Admin http://your-ip:8000/admin/, используя имя пользователя и пароль .
admina123123123Затем перейдите к списковому представлению http://your-ip:8000/admin/vuln/collection/ модели Collection:
Добавьте detail__a'b=123 к GET-параметру, где detail — это JSONField:
Вы можете видеть, что одинарная кавычка была успешно внедрена, и SQL-запрос выдаёт ошибку: