Thank you very much for sharing this module.
Audit de Sécurité - Module ets_onepagecheckout v2.9.4
Lignes: 22-38
Sévérité:
CRITIQUE
CVSS Score: 8.6 (High)
if (!defined('_PS_ADMIN_DIR_')) {
define('_PS_ADMIN_DIR_', getcwd());
}
include(_PS_ADMIN_DIR_.'/../../config/config.inc.php');
Problèmes identifiés:
if (($file_name = Tools::getValue('file_name', false)) && Validate::isFileName($file_name) )
{
$id_order = (int)Tools::getValue('id_order');
$sql = 'SELECT fv.value,fv.file_name FROM `'._DB_PREFIX_.'ets_opc_additionalinfo_field_value` fv
INNER JOIN `'._DB_PREFIX_.'orders` o ON(fv.id_cart = o.id_cart)
WHERE o.id_order = "'.(int)$id_order.'" AND fv.value ="'.pSQL($file_name).'"';
Lignes: 28-29
Sévérité:
CRITIQUE
CVSS Score: 7.5 (High)
{
// Accès autorisé à TOUS les employés
}
Problèmes:
Lignes: 33-35
Sévérité:
CRITIQUE (Mitigée)
CVSS Score: 6.5 (Medium-High)
INNER JOIN `'._DB_PREFIX_.'orders` o ON(fv.id_cart = o.id_cart)
WHERE o.id_order = "'.(int)$id_order.'" AND fv.value ="'.pSQL($file_name).'"';
Problèmes:
Lignes: 770-950
Sévérité:
ÉLEVÉE
$customer_guest = Tools::getValue('customer_guest');
$shipping_address = Tools::getValue('shipping_address',array());
Problèmes:
Post automatically merged:
Audit de Sécurité - Module ets_onepagecheckout v2.9.4
Vulnérabilités Critiques
1. Path Traversal dans download.php
Fichier: download.phpLignes: 22-38
Sévérité:
CVSS Score: 8.6 (High)
Description
Le fichier download.php présente une vulnérabilité de traversée de chemin (Path Traversal) permettant potentiellement à un attaquant authentifié de télécharger des fichiers arbitraires du serveur.Code Vulnérable
// Ligne 22-25if (!defined('_PS_ADMIN_DIR_')) {
define('_PS_ADMIN_DIR_', getcwd());
}
include(_PS_ADMIN_DIR_.'/../../config/config.inc.php');
Problèmes identifiés:
Utilisation de getcwd() pour définir _PS_ADMIN_DIR_ - peut être manipulé
Inclusion de fichier basée sur un chemin relatif non sécurisé
La constante _PS_ADMIN_DIR_ peut être définie par l'attaquant avant l'inclusion
Validation du nom de fichier avec Validate::isFileName() mais pas de vérification du chemin complet
if (($file_name = Tools::getValue('file_name', false)) && Validate::isFileName($file_name) )
{
$id_order = (int)Tools::getValue('id_order');
$sql = 'SELECT fv.value,fv.file_name FROM `'._DB_PREFIX_.'ets_opc_additionalinfo_field_value` fv
INNER JOIN `'._DB_PREFIX_.'orders` o ON(fv.id_cart = o.id_cart)
WHERE o.id_order = "'.(int)$id_order.'" AND fv.value ="'.pSQL($file_name).'"';
Impact
Accès non autorisé à des fichiers sensibles du serveur
Téléchargement de fichiers de configuration (config.inc.php, settings.inc.php)
Exposition potentielle de credentials de base de données
Accès aux fichiers de logs contenant des informations sensibles
2. Authentification Faible dans download.php
Fichier: download.phpLignes: 28-29
Sévérité:
CVSS Score: 7.5 (High)
Description
Le contrôle d'accès repose uniquement sur la vérification que l'utilisateur est un employé connecté, sans vérifier les permissions spécifiques.Code Vulnérable
if($context->employee->id && $context->employee->isLoggedBack()){
// Accès autorisé à TOUS les employés
}
Problèmes:
Pas de vérification des permissions spécifiques (ACL)
Tous les employés peuvent télécharger tous les fichiers de toutes les commandes
Pas de vérification de propriété (l'employé devrait-il avoir accès à cette commande?)
Pas de journalisation des accès aux fichiers
Impact
Escalade de privilèges horizontale
Accès non autorisé aux documents clients- 🕵️ Violation de la confidentialité des données
Non-conformité RGPD
3. Injection SQL Potentielle dans les Requêtes Dynamiques
Fichier: download.phpLignes: 33-35
Sévérité:
CVSS Score: 6.5 (Medium-High)
Description
Bien que pSQL() soit utilisé, la requête SQL pourrait être vulnérable si la validation Validate::isFileName() est contournée.Code Vulnérable
$sql = 'SELECT fv.value,fv.file_name FROM `'._DB_PREFIX_.'ets_opc_additionalinfo_field_value` fvINNER JOIN `'._DB_PREFIX_.'orders` o ON(fv.id_cart = o.id_cart)
WHERE o.id_order = "'.(int)$id_order.'" AND fv.value ="'.pSQL($file_name).'"';
Problèmes:
Utilisation de pSQL() est correcte mais dépend de la validation préalable
Pas d'utilisation de requêtes préparées (prepared statements)
La fonction Validate::isFileName() pourrait avoir des failles
Vulnérabilités Élevées
4. Validation Insuffisante des Entrées Utilisateur
Fichier: controllers/front/order.phpLignes: 770-950
Sévérité:
Description
La fonction _submitCompleteMyOrder() récupère de nombreuses données utilisateur sans validation suffisante avant traitement.Code Vulnérable
$type_checkout_options = Tools::getValue('type-checkout-options','login');$customer_guest = Tools::getValue('customer_guest');
$shipping_address = Tools::getValue('shipping_address',array());
Problèmes:
Validation basique avec Ets_onepagecheckout::validateArray() mais pas de sanitization profonde
Les tableaux peuvent contenir des clés non attendues
Pas de validation du type de données pour chaque champ
Risque d'injection de données malveillantes dans la base de données
Impact
Injection de données malveillantes
Corruption de base de données
Bypass de validations métier
Last edited: