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 !