Faille de sécurité dans les cookies PrestaShop - 24 Juillet 2018 - par Olivier LE CORRE

Il n'y a pas très longtemps, un collègue m'a tranféré un article sur un soucis de sécurité dans les cookies de PrestaShop.

Voici l'article : https://www.ambionics.io/blog/prestashop-privilege-escalation. Attention c'est très technique et en anglais!

De ce que j'ai compris, la faille concernerait la facon dont les cookies sont encodés. Je ne suis pas des plus doué en anglais, ni en "cryptographie", je ne vais donc pas rentrer en détail sur le décryptage de l'article. Ce qui est important est "maintenant que fait-on ?"

La réaction de PrestaShop

Comme mentionné dans l'article, l'éditeur PrestaShop a été averti de cette faille et a réagi en la corrigeant, mais seulement sur les nouvelles versions récentes PS 1.6.1.20 et 1.7.3.4.

J'ai contacté l'équipe PrestaShop sur son gitter qui m'a transmis sans aucun difficulté l'url du pull request sur gitlab corrigeant cette faille. Je comprend que PrestaShop ait été très discret, les failles peuvent concernées tous les sites, CMS etc... et il ne s'agirait pas de créer une panique.

Corriger sur les dernières versions c'est bien, mais pour bon nombre des sites que nous suivons et gérons, la migration n'est pas envisageable pour de multiples raisons que je ne vais pas débattre ici, ce n'est pas le sujet.

Comment corriger la faille ? Pour PrestaShop 1.6

En se basant sur le Pull Request sur Gitlab.

Que découvre-t-on dans le Pull Request ?

  • La méthode d'encodage base sur Blowfish est supprimée, cette méthode est obsolète et tous les encodages devront passer par Rijndael
  • Pour la class Rijndael, les méthodes encrypt et decrypt ont été réécrites et il y a eu l'ajout de deux autres méthodes (generateHmac et generateKeygenS2k)

Action que nous avons réalisé sur un PrestaShop 1.6.1.0

Les modifications ci-dessous sont celles que nous avons faites sur un de nos sites, mais en aucun cas nous engageons notre responsabilité quand à votre utilisation de notre procédure, il s'agit d'un exemple.
Nous conseillons de faire faire ses corrections par des professionnels maitrisant très bien PrestaShop.

Ces modifications doivent être aussi valable pour PrestaShop 1.5 mais non testées.

Notre procédure

  • Dans la table _PREFIX_configuration*, nous avons recherché la clé PS_CIPHER_ALGORITHM et lui avons donné la valeur de 1. Ceci pour forcer PrestaShop à utiliser Rijndael et non plus Blowfish
  • Dans le fichier config/settings.inc.php nous avons ajouter deux constantes, à ajouter si elles n'existent pas
    define('_RIJNDAEL_KEY_', 'I8XAkYCJOdj2WjEY4uANun7qmUWFSypn');
    define('_RIJNDAEL_IV_', 'ZENSsN1Ur9sJ6wNizpPzjA==');
    Pour les deux clés, vous pouvez les générer depuis https://www.motdepasse.xyz/, pour _RIJNDAEL_KEY_ il faut une clé de 32 caractères et pour _RIJNDAEL_IV_ 24 caractères
  • Ajouter dans override/classes/ les deux fichiers cookies.php et rijndael.php que nous avons préparé en se basant sur le Pull Request. Cliquer pour les télécharger ici
  • Supprimer le cache du PrestaShop pour la prise en compte des fichiers en override

*A l'installation de PrestaShop vous avez mis un PREFIX pour les tables, par défaut c'est "ps_"

Et pour PrestaShop 1.7

Pour nous la version 1.7 devient intéressante depuis la 1.7.3.4 et c'est cette version qui a été corrigée. N'ayant pas de site à gérer dans une version inférieur, je ne me suis pas intéressé aux modifications à effectuer.