Problème de sécurité Apache et VirtualHost

Fermé
murmures1530 Messages postés 16 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 25 novembre 2016 - 23 nov. 2016 à 11:44
murmures1530 Messages postés 16 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 25 novembre 2016 - 25 nov. 2016 à 08:44
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!
A voir également:

3 réponses

Un reverse proxy ?
Nginx ?
0
murmures1530 Messages postés 16 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 25 novembre 2016
24 nov. 2016 à 10:44
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:


<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>
0
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
0
murmures1530 Messages postés 16 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 25 novembre 2016
25 nov. 2016 à 08:44
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.
0