friends-of-presta.github.io
Open in
urlscan Pro
2606:50c0:8003::153
Public Scan
URL:
https://friends-of-presta.github.io/security-advisories/modules/2023/06/15/ailinear.html
Submission: On June 15 via api from US — Scanned from DE
Submission: On June 15 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText Content
Friends-Of-Presta Security Advisories About [CVE-2023-31672] IMPROPER NEUTRALIZATION OF AN SQL PARAMETER IN AILINEAR MODULE FOR PRESTASHOP Jun 15, 2023 • #modules • critical (9.8) • 202-ecommerce.com, TouchWeb.fr, Friends-Of-Presta.org In the module “Length, weight or volume sell” (ailinear) for PrestaShop, an attacker can perform SQL injection up to 2.4.3. Release 2.4.3 fixed this security issue. SUMMARY * CVE ID: CVE-2023-31672 * Published at: 2023-06-15 * Advisory source: Friends-Of-Presta.org * Platform: PrestaShop * Product: ailinear * Impacted release: < 2.4.3 (2.4.3 fixed the vulnerability) * Product author: ai-dev * Weakness: CWE-89 * Severity: critical (9.8) DESCRIPTION Up to 2.4.3, a sensitive SQL call in file includes/ajax.php can be executed with a trivial http call and exploited to forge a blind SQL injection throught the POST or GET submitted others and more variables. CVSS BASE METRICS * Attack vector: network * Attack complexity: low * Privilege required: low * 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 on the associated PrestaShop * Copy/paste data from sensitive tables to FRONT to exposed tokens and unlock admins’s ajax scripts * Rewrite SMTP settings to hijacked emails PATCH --- a/ailinear/includes/ajax.php +++ b/ailinear/includes/ajax.php @@ -346,17 +346,23 @@ if (Tools::getIsset('action')) { $request_value = Tools::getIsset('value') ? Tools::getValue('value') : 0; $request_product = (int)Tools::getValue('product'); $request_more = Tools::getValue('more'); - $request_others = Tools::getValue('others'); + $request_others = (int)Tools::getValue('others'); $request_quantity = (int)Tools::getValue('qty'); /* Test if base combination exists */ if ($request_more != '') { - $more = explode('_', $request_more); + $more_attributes = explode('_', $request_more); + $more_attributes = array_map('intval', $more_attributes); + foreach ($more_attributes as $key => $attr) { + if (!$attr) { + unset($more_attributes[$key]); + } + } /* Get the id_product_attribute (the first is the default one)*/ $result = DB::getInstance()->ExecuteS( 'SELECT COUNT(id_product_attribute) as number, id_product_attribute FROM '._DB_PREFIX_.'product_attribute_combination WHERE id_product_attribute IN (SELECT id_product_attribute FROM '._DB_PREFIX_.'product_attribute WHERE '. - 'id_product = '.$request_product.') AND id_attribute IN ('.implode(', ', $more).') GROUP BY id_product_attribute HAVING number = '.count($more).' ORDER BY id_product_attribute ASC' + 'id_product = '.$request_product.') AND id_attribute IN ('.implode(', ', $more_attributes).') GROUP BY id_product_attribute HAVING number = '.count($more_attributes).' ORDER BY id_product_attribute ASC' ); /* Get the attributes values and lang for the product */ @@ -364,6 +370,8 @@ if (Tools::getIsset('action')) { die('Unknown'); } } else { + $more_attributes = array(); + /* Get the id_product_attribute (the first is the default one)*/ $result = DB::getInstance()->ExecuteS('SELECT COUNT(id_product_attribute) as number, id_product_attribute FROM '._DB_PREFIX_.'product_attribute WHERE id_product = '.$request_product.' ORDER BY id_product_attribute ASC'); } @@ -373,13 +381,6 @@ if (Tools::getIsset('action')) { $return = 'Message->'.$module->l('Message for delayed preparation', 'ajax').'|'; } - /* Get attributes */ - if ($request_more != '') { - $more_attributes = explode('_', $request_more); - } else { - $more_attributes = array(); - } - /* Get price changes */ $more_attributes_price = 0; if (count($more_attributes)) { OTHER RECOMMENDATIONS * Upgrade PrestaShop to the latest version to disable multiquery execution (separated by “;”) * Change the default database prefix ps_ by a new longer arbitrary prefix. Nevertheless, be warned that this is useless against blackhats with DBA senior skilled 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-08 Vunlnerability found during a audit by 202 ecommerce 2023-03-08 Contact the author 2023-03-08 The author confirm the issue and supply a fixed release 2023-04-23 Request a CVE ID 2023-06-15 Publication of this advisory LINKS * Author product page * National Vulnerability Database Subscribe * Friends Of Presta Friends Of Presta is a none profit organization that supports the open-source ecommerce platform PrestaShop.