In the module “Search Products” (possearchproducts) from PosThemes for PrestaShop, a guest can perform SQL injection in affected versions.

Summary

  • CVE ID: CVE-2023-30192
  • Published at: 2023-05-11
  • Advisory source: Friends-Of-Presta.org
  • Platform: PrestaShop
  • Product: possearchproducts
  • Impacted release: <= 1.7 (VERSION’S SCOPE NOT CONFIRMED - AUTHOR NEVER ANSWER)
  • Product author: posthemes
  • Weakness: CWE-89
  • Severity: critical (9.8)

Description

The method PosSearch::find() has sensitive SQL calls that can be executed with a trivial http call and exploited to forge a SQL injection.

The exploit can be used even if the module is not activated.

WARNING : This exploit is actively used to deploy webskimmer to massively steal credit cards.

CVSS base metrics

  • Attack vector: network
  • Attack complexity: low
  • Privilege required: none
  • User interaction: none
  • Scope: unchanged
  • Confidentiality: high
  • Integrity: high
  • Availability: high

Vector string: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Possible malicious usage

  • Obtain admin access
  • Remove data from the associated PrestaShop
  • Copy/paste data from sensitive tables to FRONT to exposed tokens and unlock admins’ ajax scripts
  • Rewrite SMTP settings to hijack emails

Proof of concept

curl -v 'https://preprod.XXX/modules/possearchproducts/SearchProducts.php?s=test&id_category=1;select(0x73656C65637420736C656570283432293B)INTO@a;prepare`b`from@a;execute`b`;--'

Patch from 1.7

--- 1.7/modules/possearchproducts/PosSearch.php
+++ XXX/modules/possearchproducts/PosSearch.php
...
WHERE c.`active` = 1
-        '.($id_category !=  0 ? 'AND c.`id_category` = '.$id_category.'':'').'
+        '.($id_category !=  0 ? 'AND c.`id_category` = '.(int) $id_category.'':'').'

Other recommendations

  • It’s recommended to apply patch given or delete the module (NB : disabled it is useless)
  • Upgrade PrestaShop to the latest version to disable multiquery executions (separated by “;”) - be warned that this functionality WILL NOT protect your SHOP against injection SQL which uses the UNION clause to steal data.
  • Change the default database prefix ps_ by a new longer arbitrary prefix. Nevertheless, be warned that this is useless against blackhats with DBA senior skill because of a design vulnerability in DBMS
  • Activate OWASP 942’s rules on your WAF (Web application firewall), be warned that you will probably break your backoffice and you will need to pre-configure some bypasses against these set of rules.

Timeline

Date Action
2023-03-23 Issue discovered during a code review by TouchWeb.fr
2023-03-23 Contact Author to confirm versions scope
2023-05-11 Author never answer and exploit is used to massively stole credit cards
2023-05-11 Publication of this security advisory without delay due to emergency