Problème de sécurité Apache et VirtualHost
murmures1530
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
murmures1530 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
murmures1530 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis confronté à un sacré problème de sécurité et je n'arrive pas à trouver comment palier à ça.
Sur mon serveur, j'héberge plusieurs sites Internet— pour ça, j'utilise des VHost via Apache.
Chaque site à son dossier racine placé dans /opt/apache2/flex/NOM-DU-SITE.EXT/www
Le problème ;
Si un petit malin utilise la fonction include de PHP et s'amuse à récupérer le contenu d'un fichier .htaccess ou pire, .htpasswd d'un autre VHost que le sien; ça fonctionne et retourne le contenu du fichier.
Par exemple, le site vhost «tutu.com» place le fichier index.php avec le code include('/opt/apache2/flex/site-important.com/www-secure/.htpasswd'); — le contenu s'affiche.
Mon but est d’empêcher ceci mais, je vois pas comment faire.
PS : Entre parenthèses, j'ai fait quelques tests; certains hébergeurs dont je ne citerais pas le nom ont la même faille!
Je suis confronté à un sacré problème de sécurité et je n'arrive pas à trouver comment palier à ça.
Sur mon serveur, j'héberge plusieurs sites Internet— pour ça, j'utilise des VHost via Apache.
Chaque site à son dossier racine placé dans /opt/apache2/flex/NOM-DU-SITE.EXT/www
Le problème ;
Si un petit malin utilise la fonction include de PHP et s'amuse à récupérer le contenu d'un fichier .htaccess ou pire, .htpasswd d'un autre VHost que le sien; ça fonctionne et retourne le contenu du fichier.
Par exemple, le site vhost «tutu.com» place le fichier index.php avec le code include('/opt/apache2/flex/site-important.com/www-secure/.htpasswd'); — le contenu s'affiche.
Mon but est d’empêcher ceci mais, je vois pas comment faire.
PS : Entre parenthèses, j'ai fait quelques tests; certains hébergeurs dont je ne citerais pas le nom ont la même faille!
A voir également:
- Problème de sécurité Apache et VirtualHost
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Mode securite - Guide
- Apache open office gratuit - Télécharger - Suite bureautique
- Clé de sécurité windows 10 gratuit - Guide
3 réponses
Je maîtrise pas les reverse proxy et je n'aime pas Nginx.
La solution m'a été fournie sur un autre forum traitant Debian.
La faute à la configuration de PHP qui, par défaut, autorise l'accès à tous les dossiers du système d'exploitation (je considère ça comme une sacrée faille personnellement).
Il faut configurer une valeur nulle à open_basedir dans php.ini
Puis configurer via php_value un open_basedir pour chaque VirtualHost comme l'exemple ci-dessous afin de restreindre l'accès au seul dossier racine du VirtualHost:
La solution m'a été fournie sur un autre forum traitant Debian.
La faute à la configuration de PHP qui, par défaut, autorise l'accès à tous les dossiers du système d'exploitation (je considère ça comme une sacrée faille personnellement).
Il faut configurer une valeur nulle à open_basedir dans php.ini
Puis configurer via php_value un open_basedir pour chaque VirtualHost comme l'exemple ci-dessous afin de restreindre l'accès au seul dossier racine du VirtualHost:
<VirtualHost *:80>
ServerName mon-site-a-moi.net
ServerAlias mon-site-a-moi.net
ServerAdmin webmaster@mon-site-a-moi.net
DocumentRoot /opt/apache2/flex/mon-site-a-moi.net
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /opt/apache2/flex/mon-site-a-moi.net/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
DirectoryIndex index.php index.html
</Directory>
<IfModule mod_php5.c>
php_value open_basedir /dev/urandom:/dev/null:/opt/apache2/common:/tmp:/opt/apache2/flex/mon-site-a-moi.net
php_value upload_tmp_dir /tmp
</IfModule>
#ErrorLog ${APACHE_LOG_DIR}/error.log
#LogLevel info
#CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
L'avantage d'un reverse proxy c'est que tu n'exposes pas tes machines, donc apache vers l'extérieur. Tout passe par la machine proxy. Elle se charge de renvoyer les paquets.
Nginx étant le plus simple, il y a des solutions plus professionnel comme netscaler ou le F5
Nginx étant le plus simple, il y a des solutions plus professionnel comme netscaler ou le F5
Je vais me penchez sur Nginx en début d'année prochaine; j'en ai beaucoup entendu parler mais, j'ai toujours été un inconditionnel d'Apache.— Il n'y a que les cons qui ne changent pas d'avis. :)
Cependant, pour le reverse proxy, je vois pas en quoi ça peut palier au problème de sécurité de la fonction include(); de PHP qui (avec sa configuration par défaut) peut retourner le contenu d'un fichier système important contenant des mot de passe lorsque open_basedir n'est pas spécifié (y compris pour les VirtualHost)… Surtout si le rôle du ReverseProxy n'est que de distribuer les paquets.
Peut-être ai-je mal compris son fonctionnement? Mais imaginons cette situation ;
J'ai le site «site-important.com» avec le dossier security qui contient un fichier .htaccess et .htpasswd. Le site-important.com a comme chemin absolu /opt/apache2/flex/site-important.com/www
Un second site «site-a-la-con.net» a un fichier index.php avec comme seule ligne de code
<?php include('/opt/apache2/flex/site-important.com/www/security/.htpasswd'); ?>
Si j'accède a site-a-la-con.net, la page d'accueil m'affiche bel-et-bien le contenu du fichier .htpasswd du site-important.com.
Cependant, pour le reverse proxy, je vois pas en quoi ça peut palier au problème de sécurité de la fonction include(); de PHP qui (avec sa configuration par défaut) peut retourner le contenu d'un fichier système important contenant des mot de passe lorsque open_basedir n'est pas spécifié (y compris pour les VirtualHost)… Surtout si le rôle du ReverseProxy n'est que de distribuer les paquets.
Peut-être ai-je mal compris son fonctionnement? Mais imaginons cette situation ;
J'ai le site «site-important.com» avec le dossier security qui contient un fichier .htaccess et .htpasswd. Le site-important.com a comme chemin absolu /opt/apache2/flex/site-important.com/www
Un second site «site-a-la-con.net» a un fichier index.php avec comme seule ligne de code
<?php include('/opt/apache2/flex/site-important.com/www/security/.htpasswd'); ?>
Si j'accède a site-a-la-con.net, la page d'accueil m'affiche bel-et-bien le contenu du fichier .htpasswd du site-important.com.