Certaines versions de Ruby in Rails sont affectées par une vulnérabilité dans le middleware HostAuthorization du ActionPack. Cette vulnérabilité a été référencée dans la base NVD sous le numéro CVE-2021-22881.
- Versions de Ruby on Rails affectées : >= 6.0.0
- Versions non affectées: < 6.0.0
- Versions corrigées : 6.1.2.1, 6.0.3.5
Risque de sécurité
Lorsqu’un format spécifique est utilisé pour autoriser un host
dans le middleware HostAuthorization
, un attaquant pourrait fabriquer une entête HTTP Host spécifique pour forcer ActionPack à rediriger les utilisateur vers un site malicieux.
Les applications impactées sont celles qui possèdent une valeur dans hosts commençant par un point. Par exemple :
config.hosts << '.tonsite.fr'
Les applications ainsi configurées sont sujettes à une attaque par l’entête HTTP Host pour forcer les utilisateurs à être redirigés vers un site malicieux.
Versions de Rails contenant le correctif
Les versions de Rails inférieures à la version 6 ne sont pas affectées.
Concernant la version 6.1 il suffit de mettre à jour vers une version égale ou supérieure à la version 6.1.2.1. Pour la version 6.0, il faut mettre à jour vers la version 6.0.3.5 ou supérieure.
Installer un correctif manuellement avec un Monkey patch
Pour les applications affectées mais qui ne peuvent pas être mises à jour vers une version de Rails contenant le correctif, il est possible d’appliquer un monkey patch dans un fichier initializer :
module ActionDispatch
class HostAuthorization
private
def authorized?(request)
valid_host = /
\A
(?<host>[a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9\.:]+\])
(:\d+)?
\z
/x
origin_host = valid_host.match(
request.get_header("HTTP_HOST").to_s.downcase)
forwarded_host = valid_host.match(
request.x_forwarded_host.to_s.split(/,\s?/).last)
origin_host && @permissions.allows?(origin_host[:host]) && (
forwarded_host.nil? || @permissions.allows?(forwarded_host[:host]))
end
end
end
Patcher son application
Pour aider les utilisateurs qui ne pourraient pas mettre à jour leur version de rails, et ne souhaiteraient pas utiliser le monkey patch décrit au chapitre précédent, il existe 2 patchs au format git-am.
Ces patchs sont hébergés par discuss.rubyonrails.org. Vous devriez en vérifier la provenance avant de l’appliquer à votre code source :
Remerciements
Merci à @tktech (https://hackerone.com/tktech) pour avoir reporté la faille de sécurité.