Source: Ajaxian (http://ajaxian.com/archives/is-your-application-secure-enough)
J’ai essayé sans succès de traduire un article qui me semblait intéressant en première lecture (et linké ur l’excellent site Ajaxian), sur AJAX et les possibles failles de sécurité entourant l’objet XmlHTTPRequest.
L’article débute plutôt bien en nous faisant miroiter des failles monstrueuses de sécurité dans cette technologie chouchoute des derniers services web à la mode.
Que néni je dois le dire après lecture et tentative de traduction de l’article. Il est vrai que l’article met en avant le danger des requête GET par rapport aux requêtes POST (mais bon ça c’est un peu du réchauffé) et de la nécessité de l’authentification pour des actions “desctructives”.
Néanmoins, cet article reste intéressant dans son approche, puisque l’utilisation d’AJAX et donc de ses risques potentiels, risque de pousser les développeurs à mieux sécuriser leurs code…
Sur certains points, les gars d’Ajaxian ont l’air plutôt d’accord avec moi, je cite (et je traduis plus ou moins fidèlement):
“La sécurité et Ajax est dans tous les esprits ces derniers jours, que ce soit pour une petite application en interne, ou une énorme application servie a un publique massif. Se préocuper de la sécurité de votre projet n’est jamais une mauvaise chose, et pour vous aider à vous diriger dans la bonne direction, je voulais partager avec vous ce post sur Darknet.org.uk qui pose la question suivante: “Votre application est-elle sufisament sécurisée?”
…citation de l’article en question…
Le post en question mentionne certains des problèmes qui peuvent être présent, la plupart du temps par une mauvaise compréhension du côté serveur des applications. Il fait aussi mention d’une solution possible pour améliorer la sécurité de votre application: une genre de “séquence numérique” utilisable comme clef dans la chaine de caractère de la requête (aussi hazardeuse que possible) envoyée avec la requête pour validation par le serveur. Il fait aussi une brève mention des infections en JavaScript et de certains problèmes liés à ceux-ci.”
Voici donc ma tentative de traduction de l’article en question:
(J’ai abandonné la traduction quand l’auteur zappe d’un sujet à un autre sans autre forme de procès et commence à s’embrouiller… ce qui me semblait intéressant est très vite devenu confus et litéralement intraduisible)
http://www.darknet.org.uk/2006/04/ajax-is-your-application-secure-enough/
Navaho Gunleg le 5 avril 2006 à 9h55
AJAX: Votre application est elle sufisament sécurisée?
Introduction
On le voit de plus en plus ces jours ci. Les applications web deviennent plus astucieuses de jour en jour, utilisant divers nouveautés techniques, introduites récemment dans des navigateurs tels que IE et Firefox. Une de ces nouvelles techniques utilise le JavaScript. Plus précisément, la classe ou objet XmlHttpRequest.
Les applications de type WebMail les utilisent pour mettre à jour rapidement la liste des messages dans votre boîte de réception, pendant que d’autres applications l’utilisent pour suggérer divers mots clefs en temps réel. Tout cela bien sûr sans recharger la page principale.
Avant d’explorer les éventuelles faiblesses et choses à garder à l’esprit quand on implémente une application Ajax, nous allons nous intéresser à comment marche cette technologie.
Les bases
Asynchronous JavaSCript and XML aka AJAX fait a peu de chose prêt ce qui suit. Mais laissez moi vous illustrer ceci avec un exemple. Vous êtes dans votre boîte de réception et vous voulez supprimer un message. Normalement, avec une application HTML standard, les requêtes POST et GET seraient traitées, et vous redirigeraient vers votre Boîte de réception, en rechargeant la page.
Avec l’objet WmlHttpRequest, cette requête peut être faite sans recharger la page.
En tâche de fond, un appel est fait, qui effectue l’action sur le serveur, et éventuellement répond avec des données. (A noter que cette requête ne peut être possible que pour un script hébergé sur le même serveur. Cela laisserait une possibilité d’intrusion massive si je pouvais créer un page HTML, qui en utilisant du JavaScript, pouvait faire quelques milliers de requêtes sur un autre site web…)
La question
Quelques applications web, telles que les application mails, peuvent avoir des fonctionnalités desctuctrices qui peuvent être détournées. La question est donc, la majorité des applications web utilisant AJAX pourront ils faire la différence entre une vraie et une fausse requête XmlHttpRequest?
Savez vous, si vous avez développé une application AJAX récemment, si votre application peut faire cette différence - et le fait elle correctement?
Vérifiez vous le referer ou d’autres informations triviales comme le user-agent? Il y a des chances pour que vous ne sachiez même pas de quoi on parle. Il y a aussi des chances pour que d’autres personnes le sachent.
Pour être sûr que le système que vous avez implémenté -ou que vous comptez implémenter- est sufisament sécurisé, et donc digne de confiance, vous vous devez de regarder un peu autour de votre script.
Par exemple, la première fois que j’ai découvert cela était en travaillant sur une fonction pour un site de ringtones. De façon basique, l’URI de la requête XmlHttpRequest ‘len’ était un paramètre qui spécifiait la longueur du fichier de preview, qui semblait utiliser le fichier d’origine. En entrant l’URI dans un navigateur, et en spécifiant une grande valeur, quelqu’un pouvait trsè bien récupérer tout le fichier.
C’est souvent une erreur fatale: implémenter une interface AJAX qui accepte les requêtes en GET. les requêtes en GET sont les plus simple à berner.
Ma prédiciton
Les applications les plus populaires que j’ai vérifié sont conçu de telle façon qu’ils utilisent un séquence aléatoire de nombre: le serveur envoi un ordre, l’encode, et dit à l’application quel est la séquence numérique suivante pour telle ou telle commande. C’est assez obscur en JavaScript et super chiant à disséquer, mais pas impossible.
Et comme vous avez déjà pu le noter, si l’authentification sur l’objet XmlHttpRequest est défectueuse, elle laisse une oportunité pour une utilisation malicieuse. C’est exactement ici que nous pouvons nous attendre à certaines faiblesses et trous qui ne tarderont pas à être exploités. Il doit y avoir une authentification correcte, partour, tout le temps.
Tous ces systèmes sont créés par des humains, il y a des chances pour que ce ne soit pas fait proprement ou de la bonne manière.
Analyse du traffic HTTP
Analyser le traffic HTTP avec des outils tel que etheral, peut s’avérer utile pour savoir si votre application est sûr du point de vue de l’exploitation. Cette application permet de facilement filtrer et suivre les flux TCP pour que vous puissiez analyser ce qui se passe exactement.
Si vous voulez enquêter sur votre propre application, l’utilisation d’un sniffer n’est pas nécessaire, mais je vous suggérerais de laisser cette tâche à un collègue qui n’a pas implémenté le service, qu’il joue un peu avec et qu’il essaye de s’y introduire.
Cookies
Les cookies sont nos amis quand il sagit de rechercher les vulnérabilités des applications AJAX.
Si l’interface XmlHttp est protégée par des cookies, l’exploiter est l’enfance de l’art, quand votre navigateur envoi une requête au serveur, il envoi aussi un cookie avec cette requête.
…