v1.7x-v8x-v9x One Page Checkout & Social Login – PayPal, Stripe, COD v.2.9.4

thz57

Member
XNullUser
Joined
Nov 25, 2021
Messages
84
Reaction score
25
Points
8
NullCash
233
Thank you very much for sharing this module.
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.php
Lignes: 22-38
Sévérité: 🔴 CRITIQUE
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-25
if (!defined('_PS_ADMIN_DIR_')) {
define('_PS_ADMIN_DIR_', getcwd());
}
include(_PS_ADMIN_DIR_.'/../../config/config.inc.php');

Problèmes identifiés:
  1. ❌ Utilisation de getcwd() pour définir _PS_ADMIN_DIR_ - peut être manipulé
  2. ❌ Inclusion de fichier basée sur un chemin relatif non sécurisé
  3. ❌ La constante _PS_ADMIN_DIR_ peut être définie par l'attaquant avant l'inclusion
  4. ⚠️ Validation du nom de fichier avec Validate::isFileName() mais pas de vérification du chemin complet
// Ligne 30-36
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.php
Lignes: 28-29
Sévérité: 🔴 CRITIQUE
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:
  1. ❌ Pas de vérification des permissions spécifiques (ACL)
  2. ❌ Tous les employés peuvent télécharger tous les fichiers de toutes les commandes
  3. ❌ Pas de vérification de propriété (l'employé devrait-il avoir accès à cette commande?)
  4. ❌ 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.php
Lignes: 33-35
Sévérité: 🔴 CRITIQUE (Mitigée)
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` 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).'"';

Problèmes:
  1. ⚠️ Utilisation de pSQL() est correcte mais dépend de la validation préalable
  2. ❌ Pas d'utilisation de requêtes préparées (prepared statements)
  3. ⚠️ La fonction Validate::isFileName() pourrait avoir des failles

🟠 Vulnérabilités Élevées​

4. Validation Insuffisante des Entrées Utilisateur​

Fichier: controllers/front/order.php
Lignes: 770-950
Sévérité: 🟠 ÉLEVÉE


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:
  1. ⚠️ Validation basique avec Ets_onepagecheckout::validateArray() mais pas de sanitization profonde
  2. ❌ Les tableaux peuvent contenir des clés non attendues
  3. ❌ Pas de validation du type de données pour chaque champ
  4. ⚠️ 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:
Top