Une vulnérabilité d’usurpation d’adresse IP dans Django REST a permis aux attaquants de contourner la fonction de limitation du framework, qui est censée protéger les applications contre les requêtes de masse.

Django REST est une boîte à outils populaire pour le développement d’API Web et est utilisée par Mozilla, Red Hat et Heroku, entre autres. Il dispose d’une fonctionnalité de limitation qui contrôle les taux de requêtes qu’un client peut adresser à l’API.

Cette fonctionnalité est destinée à protéger les applications contre l’activité des robots, les attaques par déni de service et les activités malveillantes telles que les tentatives de force brute sur les pages de connexion, les mots de passe à usage unique et les pages de réinitialisation de mot de passe.

Usurper l’adresse IP

Django REST utilise des adresses IP pour identifier les clients et appliquer les limites de demande de limitation. Cependant, selon le chercheur en sécurité Hosein Vitales clients peuvent tromper le serveur et masquer leur adresse IP en modifiant leurs en-têtes de requête.

« Django utilise WSGI (interface de passerelle de serveur Web) pour communiquer avec l’application Web et X-transféré-pour en-tête HTTP et REMOTE_ADDR La variable WSGI est utilisée pour identifier de manière unique les adresses IP des clients pour la limitation », a-t-il déclaré La gorgée quotidienne.

Par conséquent, si une requête Web inclut le X-transféré-pour en-tête, le serveur la considérera comme l’adresse IP du client. En utilisant des valeurs différentes pour le X-transféré-pourVita a pu envoyer des demandes illimitées avec le même client.

Selon la description du bogue par Vita, le schéma ne fonctionne que pour les requêtes non authentifiées. Les API qui nécessitent l’authentification de l’utilisateur tiennent compte à la fois de l’ID de l’utilisateur et de l’adresse IP lors de la limitation, de sorte que l’usurpation d’adresse IP ne suffit pas pour contourner les limites de la demande.

Du DDoS au cracking OTP

Vita a déclaré que l’attaque ne nécessite aucun accès spécial au serveur et qu’un attaquant qui « ne peut que voir le site Web peut abuser de cette méthode ».

Son impact immédiat peut être des attaques DDoS en inondant les serveurs Django de requêtes usurpées. Mais il peut également servir à d’autres fins telles que le contournement des défenses contre les attaques par force brute sur les pages de connexion. En fait, Vita a découvert le bogue en testant au stylet une application qui avait une page de connexion à mot de passe unique.

« Vous pouvez vous connecter [to the application] avec OTP mais j’ai été bloqué après de nombreuses tentatives », a-t-il déclaré. « Après mes recherches, j’ai utilisé X-transféré-pour en-tête et encore une fois j’ai pu envoyer des demandes mais après quelques tentatives, encore une fois j’ai été bloqué.

Le chercheur a ajouté : « D’après mon expérience précédente dans Django, j’ai deviné qu’il pourrait être contourné en changeant la valeur de X-transféré-pour en-tête, et vous pourriez envoyer 30 requêtes avec chaque adresse IP. Ensuite, j’ai vérifié cela dans mon API Django et c’était correct.

La gorgée quotidienne a contacté l’équipe Django REST pour obtenir des commentaires sur la vulnérabilité. Nous mettrons à jour cet article si nous avons des nouvelles de leur part.

En attendant, Vita a suggéré de s’appuyer sur des techniques complémentaires pour sécuriser les applications contre les attaques par force brute.

« Utilisez toujours d’autres aspects des mesures de sécurité comme méthodes secondaires », a-t-il déclaré. « Utilisez Captcha ou d’autres méthodes connexes pour réduire les attaques comme celle-ci dans les terminaux importants. Pour les OTP, utilisez un jeton pour chaque OTP généré. »