CVE-2011-3192 pour Apache2 : mod_rangecnt + fail2ban
Un bug sur le champ Range à été découvert entrainant un chute du serveur par epuisement des ressources du serveur !
Un peu d’infos : apache.org
Une solution a vite été trouvée : compter le nombre d’arguments de Range et refuser s’il y en a plus que 5 !
En association avec fail2ban, il est possible de bannir dans iptables l’ip source !
Comment faire :
Comment faire (Sous Ubuntu Server 10.04):
- Installer le package apache2-dev
sudo apt-get install apache2-dev
- Télécharger les sources du module
wget http://people.apache.org/~dirkx/mod_rangecnt.c
- Compiler le module et l’installer
sudo apxs2 -i -c -n mod_rangecnt.so mod_rangecnt.c
- Créer le fichier /etc/apache2/mods-available/rangecnt.load avec dedans :
LoadModule rangecnt_module /usr/lib/apache2/modules/mod_rangecnt.so
- Activer le module Apache2
cd /etc/apache2/mods-enabled/ && sudo ln -s /etc/apache2/mods-available/rangecnt.load
- Redémarrer Apache
sudo /etc/init.d/apache2 restart
Ensuite créer la règle fail2ban (si vous avez déja une install de fail2ban !) :
- Ajouter le fichier /etc/fail2ban/filter.d/apache-range.conf avec dedans :
[Definition] failregex = [[]client <HOST>[]] (Rejected on a Range: header with more than 5 ranges) ignoreregex =
- Editez /etc/fail2ban/jail.conf et ajoutez :
[apache-range] enabled = true port = http,https filter = apache-range logpath = /var/log/apache/*error.log maxretry = 10
- Relancez votre fail2ban
sudo /etc/init.d/fail2ban restart
Utilisez le script contre votre serveur, vous devriez voir des lignes :
/var/log/apache2/error.log:[Thu Aug 25 17:20:51 2011] [warn] [client xx.xx.xx.xx] Rejected on a Range: header with more than 5 ranges (has 1300)
Dans votre log apache puis dans votre log Fail2ban :
2011-08-25 17:26:33,814 fail2ban.actions: WARNING [apache-range] Ban xx.xx.xx.xx
Victoire !