Politique de sécurité

L’équipe de développement de phpMyAdmin s’investit beaucoup pour rendre phpMyAdmin aussi sûr que possible. Cependant, les applications Web telles que phpMyAdmin peuvent être vulnérables à de nombreux types d’attaques et de nouvelles façons de les compromettre sont sans cesse explorées.

Pour chaque vulnérabilité rapportée, nous publions une annonce de sécurité phpMyAdmin (PMASA) associée à un identifiant CVE. Nous pouvons grouper des vulnérabilités similaires dans une seule PMASA (par exemple, de multiples vulnérabilités XSS peuvent être annoncées dans une seule PMASA).

Si vous pensez avoir découvert une vulnérabilité, veuillez consulter Signalement des problèmes de sécurité.

Vulnérabilités typiques

Dans cette section, nous décrirons les vulnérabilités typiques qui peuvent apparaître dans notre base de code. Cette liste n’est pas exhaustive et est destinée à montrer les surfaces d’attaque typiques.

Cross-site scripting (XSS)

Quand phpMyAdmin affiche des données utilisateurs, par ex. provenant d’une base de données utilisateur, tous les caractères HTML spéciaux doivent être échappés. Sans cet échappement, un utilisateur malicieux pourrait remplir une base de données avec du contenu spécialement conçu pour tromper un autre utilisateur afin qu’il exécute quelque chose. Cela pourrait être par ex. du code JavaScript nuisible.

phpMyAdmin tente d’échapper toutes les données utilisateur avant d’être affiché dans le navigateur.

Cross-site request forgery (CSRF)

Un attaquant pourrait tromper un utilisateur phpMyAdmin en le faisant cliquer sur un lien pour y exécuter une action. Ce lien pourrait être envoyé par courriel ou sur un site quelconque. En cas de succès, l’attaquant pourrait être capable d’exécuter une action arbitraire avec les privilèges utilisateur.

Pour contrecarrer cela, phpMyAdmin requiert qu’un jeton soit envoyé pour les requêtes sensibles. L’idée est qu’un attaquant ne possède pas de jeton valide pour l’inclure dans le lien présenté.

Comme le jeton est régénéré à chaque connexion, il n’est donc valide que pendant un temps limité, ce qui fait qu’un attaquant peut difficilement en obtenir un.

Injection SQL

Comme le but de phpMyAdmin est d’opérer des requêtes SQL, les injections SQL ne sont pas notre priorité. Toutefois les injections SQL peuvent concerner la connexion par contrôle MySQL. Cette connexion peut avoir des privilèges supplémentaires que l’utilisateur connecté ne possède pas. Par ex. accéder aux Configuration de stockage de phpMyAdmin.

Les données utilisateur incluses dans les requêtes (d’administration) devraient toujours être exécutées avec DatabaseInterface::escapeString().

Attaque par force brute

phpMyAdmin lui-même ne limite pas le nombre d’essais d’authentification du fait de l’environnement de travail sans état (stateless) où il n’existe aucune protection contre ce genre de chose.

Pour contrecarrer ceci, on peut utiliser un Captcha ou un outil externe comme fail2ban. Plus de détails dans Sécuriser votre installation de phpMyAdmin.

Signalement des problèmes de sécurité

En cas de découverte d’une faille de sécurité dans le code de phpMyAdmin, merci de contacter phpMyAdmin security team avant de la publier. Ainsi une solution de résolution pourra être préparée et délivrée avec l’annonce de la faille qui sera créditée dans notre annonce de sécurité. Le rapport peut éventuellement être chiffré avec la clé PGP ID DA68AB39218AB947 et l’empreinte suivante :

pub   4096R/DA68AB39218AB947 2016-08-02
      Key fingerprint = 5BAD 38CF B980 50B9 4BD7  FB5B DA68 AB39 218A B947
uid                          phpMyAdmin Security Team <security@phpmyadmin.net>
sub   4096R/5E4176FB497A31F7 2016-08-02

La clé peut être obtenue soit depuis le serveur de clés soit dans le phpMyAdmin keyring disponible sur notre serveur de téléchargement ou en utilisant Keybase.

En cas de suggestion pour améliorer la sécurité de phpMyAdmin, merci de la soumettre sur notre issue tracker. Les suggestions d’améliorations peuvent être trouvées par hardening label.