SQLi in SimpleImportProduct Prestashop Module CVE-2023-39675
This blog post details an SQL Injection we found within SimpleImportProduct, a Prestashop module developed by MyPrestaModules.
In modules/simpleimportproduct/send.php
there is the following code:
if ( Tools::getValue('remove') == true){
$key = Tools::getValue('key');
$key = pSQL($key);
Db::getInstance()->delete('simpleimport_tasks', "import_settings=$key");
This is vulnerable to SQL injection which allows an attacker to extract data from the database.
The key
parameter does get sanitized by pSQL()
but when it’s put in the query it’s not surrounded by quotes so an attacker can still manipulate the query. This is a similar situation to an SQLi I found in a different Prestashop module.
Adding quotes around the key would be sufficient to patch this SQLi:
Db::getInstance()->delete('simpleimport_tasks', "import_settings='$key'");
Proof of Concept
To test this we used SQLmap on a local Prestashop install. Care should be taken when testing for this as it is within a DELETE SQL query and can result in records getting deleted. SQLMap command:
sqlmap -u "http://localhost:8080/modules/simpleimportproduct/send.php?ajax=true&remove=true&key=1*" --threads=10 --random-agent --dbms=mysql --level=5 --risk=3 --tables
It’s a “blind” SQLi as it doesnt affect the contents of the page so information is extracted using SLEEP() to change the time it takes to respond.
Timeline
Date | Action |
---|---|
10/07/2023 | Issue discovered during a pentest |
12/07/2023 | Reported issue to MyPrestaModules |
29/07/2023 | Requested CVE from MITRE |
??/08/2023 | Patch released |
28/08/2023 | Number CVE-2023-39675 assigned |
07/09/2023 | Blog post released |