Table des matières
Ouvrir table des matières
10 points à appliquer pour sécuriser correctement son WordPress
WordPress est un des CMS (Content Management Système) les plus utilisées au monde pour la conception de site Internet. Ce blog est de cette technologie et nous l’utilisons pour réaliser les sites Internet de nos clients dans mon boulot. Beaucoup de WordPress sont très mal configurés car souvent déployés à la va-vite et sans recherche préalable quant à sa bonne configuration. Je vais vous donner quelques astuces et explications pour sécuriser votre WordPress… Et cela se passe dès son installation.
Sécurisation de son installation
Choisissez un nom de base de données neutre
Si vous avez la main mise sur votre hébergement, choisissez un nom de base de données qui n’ai pas trop de rapport avec votre site Internet.
Par exemple, si votre site c’est http://www.wordpress.com 🔗 ne choisissez pas comme nom de base de données WordPress.
Changez le prefixe par défaut de vos tables
“wp_” est le préfixe par défaut. Beaucoup laisse ce préfixe. Quelqu’un ayant déjà installé un WordPress sait comment se présente l’architecture de votre base de données à commencer par l’ensemble des noms des tables. Il est toujours plus facile de faire des injections SQL en connaissant les bons noms de tables. Changez le par un préfixe à 3 à 4 caractères tapés au hasard sur votre clavier.
Évitez l’identifiant “admin” pour le compte administrateur par défaut
Évitez les identifiants comme “admin” devenu très répandu et classique et essayez de générer un mot de passe assez complexe.
Nettoyage après l’installation et chaque mise à jour du core
Après l’installation, il faut s’occuper de certains de vos fichiers à la racine de votre site Internet. En effet, il existe plusieurs fichiers sensibles comme le fichier .htaccess et le fichier wp-config, ce dernier contenant notamment des informations vitales comme le login/password de votre base de données.
Utilisez votre logiciel FTP préféré pour vous connecter à votre hébergement de fichiers.
Modifiez les droits de permissions du fichier wp_config.php et du .htaccess donner les droits en lecture pour tous et juste en écriture pour le propriétaire du fichier ce qui donne un chmod 644.
Vous pouvez aussi modifier le fichier .htaccess et ajouter ces lignes à la fin du fichier pour renforcer la sécurité sur l’accès à ces deux fichiers :
<Files wp-config.php>
order allow,deny
deny from all
</Files>
<Files .htaccess>
order allow,deny
deny from all
</Files>
Enfin terminez la manœuvre en supprimant le fichier readme.html à la racine. Celui contient des informations sensibles comme la version de votre WordPress.
Protégez chacun de vos répertoires
Si vous tapez dans notre barre d’adresse l’url de votre site Internet suivi d’un nom de dossier sans spécifier un fichier, le serveur qui héberge le site Internet va tenté de vous afficher une page par défaut (bien souvent index.php ou index.html). Quand ce fichier n’existe pas le serveur liste le contenu du dossier (fichiers & dossiers confondus) et bien souvent les informations du serveur hébergeant le site Internet. Ces informations contiennent les technologies employés et leur version. Des informations très prisés par les personnes malveillantes
Vous avez peut être remarqué que certains répertoires de votre installation WordPress présentait des fichiers “index.php” contenant juste ce contenu :
<?php
// Silence is golden.
Ce fichier permet d’afficher une page blanche au cas où quelqu’un essaye de lister le contenu de votre dossier. Seulement, il n’est pas présent dans tous les dossiers de WordPress, de même que les gens qui développent les plugins ne pensent pas à en mettre alors que c’est un fichier très simple à mettre en place. Je vous conseille de protéger vos répertoires avec ce genre de fichier surtout si vous n’avez pas la main direct sur votre hébergement Web.
Sécurisation de son thème et du moteur WordPress
La balise meta generator
En parlant de la version de votre WordPress, beaucoup de personnes utilisent des thèmes déjà existant parce qu’ils n’ont pas les compétences suffisantes pour concevoir leurs propres thèmes. Ils utilisent alors les thèmes par défaut proposés ou des thèmes que l’on peut facilement trouver sur le Web (ou via la recherche de thèmes dans l’administration de WordPress). Seulement ces thèmes affichent bien souvent (pour pas dire tous le temps) cette balise meta dans le code source HTML renvoyé par votre site Internet:
<meta name="generator" content="WordPress 4.X.X" />
Cette balise caché dans le de votre site Internet est un précieux renseignement concernant la version de WordPress. Ce n’est pas pour vous faire peur mais il suffit de taper sur Google : “Hack WordPress 4.X.X” et on peut tomber sur des techniques existantes pour hacker un site WordPress. Pour enlever cette information de votre thème, modifiez le fichier function.php de votre thème et ajouter cette ligne :
remove_action("wp_head", "wp_generator");
Faîtes les mises à jour !
Veillez à mettre régulièrement à jour le moteur de WordPress, votre thème ainsi que toutes vos extensions. Plus votre site Internet sera à jour et moins de faille de sécurité vous aurez ! Ça peut paraître anodin mais je vois énormément de site Internet pas à jour de bien longtemps.
Quelques extensions pour protéger votre WordPress
Limitez le nombre de tentatives de connexions à votre interface admin avec Login LockDown 🔗. Ça risque de freiner voir de décourager les attaques par force-brute 🔗 sur votre site Internet.
Veillez à bien choisir les extensions que vous installez. Beaucoup ne sont plus à jour ou sont mal notés mais pourtant alléchantes.
Supprimez les thèmes et extensions non utilisées
On teste des extensions ou des thèmes puis finalement on ne les utilise pas. Gardez ces ressources non utilisées est une erreur ! Ce n’est pas parce que vous ne les utilisez pas, qu’ils ne sont pas une menace. Supprimez tous ce que vous n’utilisez pas.
Testez la sécurité de votre WordPress avec wpscan
Malgré ces aspects de sécurité que j’ai énoncé plus haut, votre site Internet peut présenter des failles de sécurité… et ce n’est pas votre faute .
La force de WordPress c’est sa communauté très vaste qui a contribué à son évolution en développant des milliers d’extensions et de thème mais c’est aussi sa faiblesse. En effet, beaucoup de thèmes/extensions sont mal codés et même plus supportés pourtant on continue de les utiliser. Des extensions sont tellement utilisées que des hackers s’amusent à chaque mise à jour de déceler une faille de sécurité.
Un outil très puissant permet de connaître si son site Internet (ou celui d’un voisin) présente des failles de sécurité et il se nomme wpscan 🔗. Cet outil est développé en Ruby. IL y a quelques prérequis à vérifier sur votre OS mais sachez qu’il est présent nativement dans certaines distribution Linux, notamment Kali Linux.
Je tiens à prévenir que mon blog et moi même ne sommes responsable de ce que vous ferez avec cette outil car il est redoutable.
A quoi sert-il et que fait-il ?
Pour la faire court, cet outil scanne un site WordPress à la demande. Il récupère pas mal d’informations comme la version du WordPress, le thème utilisé ainsi que les extensions. Il est même possible de faire du brute force.
Pour chacun d’eux,il va récupérer la version utilisée et fouiller dans sa base de données s’il y a des failles. Une simple commande pour lancer l’outil et il vous dira tout ce que vous devez savoir :
wpscan --url www.monsite.com
J’ai testé sur un blog dont je ne dévoilerais pas l’identité mais comme vous allez le voir il est bourré de failles de sécurités en tout genre : XSS, Open Redirect, SQL Injections, RCE, DoS.
Tout ce qui contient [!] dans ce qui va suivre est une faille de sécurité. L’outil va vous donner jusqu’à 3 liens pour vous expliquer la faille en question, où elle se trouve dans le système de fichiers et même comment l’exploiter. Il donne même la version du plugin qui permet de boucher la faille. Voici un exemple de résultat en lançant cette simple commande :
ioosur@KALI-IOOSUR:~$ sudo wpscan --url www.************.com
_______________________________________________________________
__ _______ _____
/ / __ / ____|
/ / /| |__) | (___ ___ __ _ _ __
/ / / | ___/ ___ / __|/ _` | '_
/ / | | ____) | (__| (_| | | | |
/ / |_| |_____/ ___|__,_|_| |_|
WordPress Security Scanner by the WPScan Team
Version 2.9
Sponsored by Sucuri - https://sucuri.net
@_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________
[+] URL: www.************.com
[+] Started: Thu Apr 21 21:06:29 2016
[+] robots.txt available under: 'www.************.com/robots.txt'
[+] Interesting entry from robots.txt: /*?
[+] Interesting entry from robots.txt: www.************.com/wp-login.php
[+] Interesting entry from robots.txt: */trackback
[+] Interesting entry from robots.txt: www.************.com/*/feed
[+] Interesting entry from robots.txt: www.************.com/*/comments
[+] Interesting entry from robots.txt: www.************.com/cgi-bin
[+] Interesting entry from robots.txt: www.************.com/*.php$
[+] Interesting entry from robots.txt: www.************.com/*.inc$
[+] Interesting entry from robots.txt: www.************.com/*.gz
[+] Interesting entry from robots.txt: www.************.com/*.cgi
[+] Interesting entry from robots.txt: /*css?*
[+] Interesting entry from robots.txt: /*js?*
[+] Interesting entry from robots.txt: User-agent:
[+] Interesting header: AGE: 5275
[+] Interesting header: SERVER: nginx
[+] Interesting header: VIA: 1.1 varnish
[+] Interesting header: X-CACHEABLE: YES:Forced
[+] Interesting header: X-VARNISH: 3217913316 3217565314
[+] This site has 'Must Use Plugins' (http://codex.wordpress.org/Must_Use_Plugins)
[+] XML-RPC Interface available under: www.************.com/xmlrpc.php
[+] WordPress version 4.3.1 identified from advanced fingerprinting
[!] 4 vulnerabilities identified from the version number
[!] Title: WordPress 3.7-4.4 - Authenticated Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/8358
Reference: https://wordpress.org/news/2016/01/wordpress-4-4-1-security-and-maintenance-release/
Reference: https://github.com/WordPress/WordPress/commit/7ab65139c6838910426567849c7abed723932b87
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1564
[i] Fixed in: 4.3.2
[!] Title: WordPress 3.7-4.4 - Authenticated Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/8358
Reference: https://wordpress.org/news/2016/01/wordpress-4-4-1-security-and-maintenance-release/
Reference: https://github.com/WordPress/WordPress/commit/7ab65139c6838910426567849c7abed723932b87
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1564
[i] Fixed in: 4.3.2
[!] Title: WordPress 3.7-4.4.1 - Local URIs Server Side Request Forgery (SSRF)
Reference: https://wpvulndb.com/vulnerabilities/8376
Reference: https://wordpress.org/news/2016/02/wordpress-4-4-2-security-and-maintenance-release/
Reference: https://core.trac.wordpress.org/changeset/36435
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2222
[i] Fixed in: 4.3.3
[!] Title: WordPress 3.7-4.4.1 - Open Redirect
Reference: https://wpvulndb.com/vulnerabilities/8377
Reference: https://wordpress.org/news/2016/02/wordpress-4-4-2-security-and-maintenance-release/
Reference: https://core.trac.wordpress.org/changeset/36444
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2221
[i] Fixed in: 4.3.3
[+] WordPress theme in use: MD
[+] Name: MD
| Location: www.************.com/wp-content/themes/MD/
| Style URL: www.************.com/wp-content/themes/MD/style.css
| Theme Name: *********
| Description: Thème pour le blog *********
| Author: **********
[+] Detected parent theme: smart-mag - v2.6.1
[+] Name: smart-mag - v2.6.1
| Location: www.************.com/wp-content/themes/smart-mag/
| Readme: www.************.com/wp-content/themes/smart-mag/README.txt
| Style URL: www.************.com/wp-content/themes/smart-mag/style.css
| Theme Name: SmartMag
| Theme URI: http://theme-sphere.com
| Description: Designed by <a href="http://theme-sphere.com">ThemeSphere</a>
| Author: ThemeSphere
| Author URI: http://theme-sphere.com
[+] Enumerating plugins from passive detection ...
| 8 plugins found:
[+] Name: contact-form-7
| Latest version: 4.4.1
| Location: www.************.com/wp-content/plugins/contact-form-7/
[!] We could not determine a version so all vulnerabilities are printed out
[!] Title: Contact Form 7 <= 3.7.1 - Security Bypass Vulnerability
Reference: https://wpvulndb.com/vulnerabilities/7020
Reference: http://www.securityfocus.com/bid/66381/
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-2265
[i] Fixed in: 3.7.2
[!] Title: Contact Form 7 <= 3.5.2 - File Upload Remote Code Execution
Reference: https://wpvulndb.com/vulnerabilities/7022
Reference: http://packetstormsecurity.com/files/124154/
[i] Fixed in: 3.5.3
[+] Name: css3_web_pricing_tables_grids
| Location: www.************.com/wp-content/plugins/css3_web_pricing_tables_grids/
[+] Name: disqus-comment-system
| Latest version: 2.85
| Location: www.************.com/wp-content/plugins/disqus-comment-system/
[!] We could not determine a version so all vulnerabilities are printed out
[!] Title: Disqus <= 2.75 - Remote Code Execution (RCE)
Reference: https://wpvulndb.com/vulnerabilities/6357
Reference: http://blog.sucuri.net/2014/06/anatomy-of-a-remote-code-execution-bug-on-disqus.html
[i] Fixed in: 2.76
[!] Title: Disqus Comment System <= 2.68 - Reflected Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/6358
Reference: http://www.ethicalhack3r.co.uk/security/wordpress-plugin-disqus-comment-system-xss/
[i] Fixed in: 2.69
[!] Title: Disqus Blog Comments <= 2.77 - Blind SQL Injection Vulnerability
Reference: https://wpvulndb.com/vulnerabilities/6359
Reference: https://www.exploit-db.com/exploits/20913/
[i] Fixed in: 2.7.8
[!] Title: Disqus <= 2.77 - Cross-Site Request Forgery (CSRF)
Reference: https://wpvulndb.com/vulnerabilities/7537
Reference: https://vexatioustendencies.com/csrf-in-disqus-wordpress-plugin-v2-77/
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-5346
[i] Fixed in: 2.79
[!] Title: Disqus <= 2.75 - Cross-Site Scripting (XSS) & CSRF
Reference: https://wpvulndb.com/vulnerabilities/7538
Reference: https://www.nikcub.com/posts/multiple-vulnerabilities-in-disqus-wordpress-plugin/
Reference: https://gist.github.com/nikcub/cb5dc7a5464276c8424a
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-5345
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-5347
[i] Fixed in: 2.76
[+] Name: jetpack
| Latest version: 3.9.6
| Location: www.************.com/wp-content/plugins/jetpack/
| Changelog: www.************.com/wp-content/plugins/jetpack/changelog.txt
[!] We could not determine a version so all vulnerabilities are printed out
[!] Title: Jetpack <= 2.9.2 - class.jetpack.php XML-RPC Access Control Bypass
Reference: https://wpvulndb.com/vulnerabilities/7203
Reference: http://jetpack.me/2014/04/10/jetpack-security-update/
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0173
Reference: https://secunia.com/advisories/57729/
[i] Fixed in: 2.9.3
[!] Title: Jetpack by WordPress.com 3.0-3.4.2 - Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/7915
Reference: https://blog.sucuri.net/2015/04/security-advisory-xss-vulnerability-affecting-multiple-wordpress-plugins.html
Reference: https://jetpack.me/2015/04/20/jetpack-3-4-3-coordinated-security-update/
[i] Fixed in: 3.4.3
[!] Title: Jetpack <= 3.5.2 - Unauthenticated DOM Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/7964
Reference: https://blog.sucuri.net/2015/05/jetpack-and-twentyfifteen-vulnerable-to-dom-based-xss-millions-of-wordpress-websites-affected-millions-of-wordpress-websites-affected.html
[i] Fixed in: 3.5.3
[!] Title: Jetpack <= 3.7.0 - Stored Cross-Site Scripting (XSS)
Reference: https://wpvulndb.com/vulnerabilities/8201
Reference: https://jetpack.me/2015/09/30/jetpack-3-7-1-and-3-7-2-security-and-maintenance-releases/
Reference: https://blog.sucuri.net/2015/10/security-advisory-stored-xss-in-jetpack.html
[i] Fixed in: 3.7.1
[!] Title: Jetpack <= 3.7.0 - Information Disclosure
Reference: https://wpvulndb.com/vulnerabilities/8202
Reference: https://jetpack.me/2015/09/30/jetpack-3-7-1-and-3-7-2-security-and-maintenance-releases/
[i] Fixed in: 3.7.1
[+] Name: mailchimp-for-wp
| Latest version: 3.1.6
| Location: www.************.com/wp-content/plugins/mailchimp-for-wp/
[+] Name: simple-ads-manager
| Latest version: 2.9.7.123
| Location: www.************.com/wp-content/plugins/simple-ads-manager/
[!] We could not determine a version so all vulnerabilities are printed out
[!] Title: Simple Ads Manager <= 2.5.94 - Arbitrary File Upload & SQL Injection
Reference: https://wpvulndb.com/vulnerabilities/7882
Reference: http://seclists.org/bugtraq/2015/Apr/10
Reference: http://packetstormsecurity.com/files/131280/
Reference: http://packetstormsecurity.com/files/131281/
Reference: http://packetstormsecurity.com/files/131282/
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2824
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2825
Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2826
Reference: https://www.exploit-db.com/exploits/36613/
Reference: https://www.exploit-db.com/exploits/36614/
Reference: https://www.exploit-db.com/exploits/36615/
[i] Fixed in: 2.7.102
[!] Title: Simple Ads Manager <= 2.9.3.114 - Unauthenticated Denial of Service (DoS)
Reference: https://wpvulndb.com/vulnerabilities/8069
Reference: https://wordpress.org/plugins/simple-ads-manager/changelog/
[i] Fixed in: 2.9.4.116
[!] Title: Simple Ads Manager <= 2.9.4.116 - SQL Injection
Reference: https://wpvulndb.com/vulnerabilities/8357
Reference: http://security.szurek.pl/simple-ads-manager-294116-sql-injection.html
Reference: http://packetstormsecurity.com/files/135095/
[i] Fixed in: 2.9.5.118
[+] Name: wp-automatic
| Location: www.************.com/wp-content/plugins/wp-automatic/
[!] We could not determine a version so all vulnerabilities are printed out
[!] Title: Automatic 2.0.3 - csv.php q Parameter SQL Injection
Reference: https://wpvulndb.com/vulnerabilities/6170
Reference: http://packetstormsecurity.com/files/113763/
Reference: https://secunia.com/advisories/49573/
Reference: https://www.exploit-db.com/exploits/19187/
[i] Fixed in: 2.0.4
Cet outil est une bonne façon de vérifier si votre site Internet est sécurisé, n’hésitez pas à l’utiliser souvent… ou sinon une personne malveillante le fera à votre place.
N’hésitez à me soumettre vos éventuelles recommandations et astuces concernant la sécurité de WordPress.