Prestashop - Injection SQL dans Presta2PhpList



Le 19-10-2011

Risque Elevé
Impact Interrogation/Manipulation de la base de données
Logiciel affecté Presta2PhpList
Exploitable localement Oui
Exploitable à distance Oui
Vu 203 fois

Description

Dotsafe a découvert une vulnérabilité dans l'extension Presta2PhpList du CMS PrestaShop qui peut être utilisée par des personnes malveillantes pour injecter du code SQL.

Lors de la souscription à la newsletter, les entrées passées via le paramètre POST "list" (quand le paramètre POST "submitNewsletter" existe et le paramètre POST "action" est égale à 0) ne sont pas vérifiées dans le fichier presta2phplist.php avant d'être utilisées dans la requête SQL.

La vulnérabilité est confirmée dans la version 1.5. Les autres versions peuvent aussi être affectées.

Détails

Le module étant placé dans une des colonnes (droite ou gauche), un appel aux fonctions hookRightColumn ou hookLeftColumn est effectué selon le positionnement défini pour le module (hookRightColumn si le module est dans la colonne de droite et hookLeftColumn si il est dans celle de gauche).

./presta2phplist.php:1043
	function hookRightColumn($params)
	{
		return $this->hookLeftColumn($params);
	}
./presta2phplist.php:1048
 	function hookLeftColumn($params)
 	{
		[...]

		if (Tools::isSubmit('submitNewsletter'))
		{
			$this->newsletterRegistration();
./presta2phplist.php:949
	private function newsletterRegistration()
 	{
	 	if (!Validate::isEmail(pSQL($_POST['email'])))
			return $this->error = $this->l('Invalid e-mail address');
	 	/* Unsubscription */
	 	elseif ($_POST['action'] == '1')
	 	{
 		 	[...]
		}
	 	/* Subscription */
	 	elseif ($_POST['action'] == '0')
	 	{
	 	 	[...]
         	Db::getInstance()->Execute('INSERT INTO phplist_listuser VALUES ("'.$userId.'","'.$_POST['list'].'",now(),now())');


Solution

Editer le fichier .presta2phplist.php

          if ($result) {
             $userId = mysql_result($result, 0);
             }
-		    		Db::getInstance()->Execute('INSERT INTO phplist_listuser VALUES ("'.$userId.'","'.$_POST['list'].'",now(),now())');
+		    		Db::getInstance()->Execute('INSERT INTO phplist_listuser VALUES ("'.$userId.'","'.intval($_POST['list']).'",now(),now())');
 		      	return $this->valid = $this->l('Subscription successful');
 			}



Besoin d'aide ?

L'équipe de DOTSAFE vous accompagne dans la vérification de votre système et sur sa protection sur le long terme.

N'hésitez pas à prendre contact avec nous .

Projet Anteater

Vulnérabilité découverte grâce au projet AntEater

En savoir plus sur le projet Anteater.

Protéger votre site avec DOTSAFE Protector

Protéger votre site internet avec DOTSAFE Protector

On vous rappelle ?

Indiquez votre numéro de téléphone

ainsi que la tranche horaire où vous êtes disponible. Nous vous appellerons dans les plus brefs délais

 

Actualités

  • 30-07-2010 Sécurité de Typo3 & entropie de rand()
  • 28-07-2010 Décompilation d'application flash
  • 06-04-2010 Les 9 objections à la sécurité des sites internet - Développement externalisé