<?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>Segmentation fault &#187; faille web</title>
	<atom:link href="https://www.segmentationfault.fr/tag/faille-web/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.segmentationfault.fr</link>
	<description>Projets d’un consultant en sécurité informatique</description>
	<lastBuildDate>Fri, 15 Feb 2019 08:02:10 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>XeeK, framework d&#8217;exploitation pour XSS</title>
		<link>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/</link>
		<comments>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 21:27:15 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[faille web]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[projet]]></category>
		<category><![CDATA[XeeK]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/?p=307</guid>
		<description><![CDATA[La faille XSS, ou Cross-Site Scripting, est certainement la plus répandue sur le Web. Tous les débutants dans le domaine de la sécurité informatique ou du hacking la connaissent et savent comment voler un cookie ou afficher un message d&#8217;erreur, mais pensent trop souvent à tort que cette faille se limite à cela (j&#8217;ai déjà [...]]]></description>
			<content:encoded><![CDATA[<p>La faille XSS, ou <em>Cross-Site Scripting</em>, est certainement la plus répandue sur le Web. Tous les débutants dans le domaine de la sécurité informatique ou du hacking la connaissent et savent comment voler un cookie ou afficher un message d&rsquo;erreur, mais pensent trop souvent à tort que cette faille se limite à cela (j&rsquo;ai déjà posté un <a href="http://www.segmentationfault.fr/securite-informatique/la-xss-cette-faille-meconnue/">article</a> sur le sujet). D&rsquo;un autre côté, ceux qui programment un minimum en JavaScript/Ajax savent que ce langage permet de faire des merveilles en matière de pages dynamiques et contrôle de navigateur, mais ignorent souvent les possibilités offertes pour une personne malveillante. C&rsquo;est à partir de ces deux constats que m&rsquo;est venue une idée qui est en train de se concrétiser, et qui tient en un mot : XeeK.<span id="more-307"></span></p>
<h3>[EDIT]</h3>
<p>Le projet a subit de nombreux changements depuis la publication de ce billet. J&rsquo;ai publié la première version du projet <a href="http://www.segmentationfault.fr/projets/release-de-xeek-v0-1b/">ici</a> ; en attendant un tutorial vous pouvez retrouver des informations plus à jour <a href="http://www.segmentationfault.fr/projets/conference-sur-xeek-a-la-ndh-2010/">dans ce billet</a>. Gardez à l&rsquo;esprit que les informations qui suivent (et particulièrement le jargon associé à l&rsquo;outil ainsi que les fonctionnalités) ne sont plus complétement valides&#8230;</p>
<h3>Le projet</h3>
<p>XeeK, pour <em>XSS Easy Exploitation Kernel</em>, est un projet dont l&rsquo;objectif est le suivant : démontrer la puissance de la XSS en proposant un outil pour exploiter facilement ce type de faille. Les premières idées qui ont engendré ce projet me sont venues cet été, mais c&rsquo;est uniquement depuis quelques semaines que j&rsquo;ai vraiment commencé à y travailler.</p>
<h3>Un noyau et des modules</h3>
<p>Certains me trouveront peut-être un peu ambitieux, mais mon but serait de faire de XeeK une sorte de <em>Metasploit</em> pour la XSS. Pour dire les choses autrement, l&rsquo;objectif serait de proposer un framework, c&rsquo;est à dire un ensemble de classes, ou de modules capables d&rsquo;interagir ensemble. En fait, si le K de XeeK signifie <em>kernel</em> (noyau) c&rsquo;est parce qu&rsquo;il sera effectivement composé d&rsquo;un noyau proposant les fonctionnalités génériques de base et d&rsquo;une suite de modules qui pourront s&rsquo;y greffer. Dans l&rsquo;idéal, ces modules pourront être développés par n&rsquo;importe qui. A titre de comparaison, considérez le noyau Linux et ses modules, ou bien Firefox et ses extensions.</p>
<h3>Architecture</h3>
<p>Concrètement, XeeK se composera d&rsquo;une interface Web déployée sur un serveur appartenant à un attaquant, disons hacker.com. XeeK étant censé faciliter l&rsquo;exploitation des failles XSS, il appartient à l&rsquo;attaquant de découvrir ces failles ; je n&rsquo;envisage pour le moment pas d&rsquo;intégrer un scanner de ce type dans l&rsquo;outil. Une fois une XSS trouvée sur un site quelconque, disons victime.com, l&rsquo;attaquant pourra utiliser l&rsquo;interface de XeeK afin de générer un exploit personnalisé et paramétrable. Après avoir défini l&rsquo;exploit, celui-ci pourra être intégré à un lien piégé exploitant la XSS sur victime.com. Il ne restera plus à l&rsquo;attaquant qu&rsquo;à faire cliquer la victime sur ce lien&#8230;</p>
<p>Dans le jargon XeeK, l&rsquo;attaquant commencera par créer une <em>session</em>, choisira sa ou ses <em>victimes</em>, et sélectionnera un <em>scheduler</em>, ou ordonnanceur. C&rsquo;est ce composant qui déterminera comment les actions de l&rsquo;exploit seront exécutées sur le navigateur de la victime. J&rsquo;envisage pour le moment deux types de schedulers :</p>
<ul>
<li><em>Statique</em> — toutes les actions de l&rsquo;exploit seront définies à l&rsquo;avance et intégrées &laquo;&nbsp;en dur&nbsp;&raquo; de façon définitive.</li>
<li><em>Dynamique</em> — l&rsquo;exploit chargé sur le navigateur de la victime ne contiendra pas les actions proprement dit, mais un loader qui sera chargé de récupérer les actions sur le serveur XeeK (hacker.com) de façon dynamique et transparente. Ainsi, l&rsquo;attaquant pourra modifier l&rsquo;exploit et suivre la progression de la victime en temps réel.</li>
</ul>
<p>Les actions exécutées chez les victimes seront susceptibles de retourner des résultats qui seront visualisables directement par le biais de l&rsquo;interface. En fait, XeeK cachera l&rsquo;aspect technique de l&rsquo;exploitation et sera conçu pour simplifier au maximum les choses à l&rsquo;attaquant. Plus précisément, l&rsquo;attaquant aura devant lui une interface ressemblant à un debugger, à partir de laquelle il lance son exploit, observe sa progression et visualise les résultats. La différence avec un vrai debugger est que cet exploit sera exécuté sur les victimes et non sur sa propre machine&#8230;</p>
<h3>Une application : BotNet</h3>
<p>Puisque XeeK supportera plusieurs sessions en simultanée, chacune supportant elle-même plusieurs victimes, on en arrive à une des applications potentielles de l&rsquo;outil : faire office de BotNet. Pour ceux qui l&rsquo;ignorent, un botnet est un réseau de machines zombies contrôlable par un attaquant via un protocole quelconque. Ici, il s&rsquo;agira de simples requêtes HTTP. La différence avec les &laquo;&nbsp;vrais&nbsp;&raquo; botnets est qu&rsquo;ici, le code malveillant s&rsquo;exécutera uniquement lorsque la victime aura son navigateur d&rsquo;ouvert sur la page piégée.</p>
<p>Pour aider à la propagation du botnet, la possibilité la plus simple est d&rsquo;utiliser une XSS permanente, c&rsquo;est à dire quand l&rsquo;injection de code est enregistrée en dur sur le site et affecte tous les visiteurs. Ainsi chaque visiteur tombant sur la page piégée rejoindra automatiquement le botnet à son insu et exécutera le même exploit que ses collègues. Tout cela grâce à une malheureuse petite XSS&#8230;</p>
<p>Imaginez qu&rsquo;un site très connu et utilisé par des milliers de visiteurs soit vulnérable à une XSS permanente. Avec XeeK, il devient possible de lancer une attaque de masse contre tous les visiteurs de la page.</p>
<h3>Fonctionnalités</h3>
<p>Qu&rsquo;est-ce que XeeK saura faire ? A vrai dire, les fonctionnalités définitives ne sont pas encore décidées (vu que les modules seront extensibles), mais voici un aperçu de ce que j&rsquo;envisage.</p>
<ul>
<li>Furtivité du point de vue du visiteur (le site exploité continue à fonctionner sans problèmes).</li>
<li>Exécution de code JavaScript arbitraire.</li>
<li>Envoi de requêtes asynchrones (Ajax) vers le site vulnérable. Une des applications pourraît être d&rsquo;exploiter des éventuelles failles XSRF (<em>Cross Site Request Forgery</em>).</li>
<li>Envoi de requêtes asynchrones vers d&rsquo;autres sites.</li>
<li>Détournement de formulaire. Exemple : lorsque la victime remplit un des formulaires de la page, tout son contenu est envoyé sur hacker.com de façon transparente.</li>
<li>Récupération de cookies.</li>
<li>Récupération du contenu de la page (code HTML vu par la victime).</li>
<li>Plus généralement, récupération de n&rsquo;importe quelle variable accessible par JavaScript et DOM.</li>
<li>Traceur de visiteur. L&rsquo;exécution de l&rsquo;exploit continue même si le visiteur change de page, chaque nouvelle page visitée étant loguée et accessible directement par l&rsquo;attaquant.</li>
<li>Simulation de clic sur des liens / boutons / n&rsquo;importe quel élément graphique des pages.</li>
<li>Fonctionne aussi bien en HTTPS qu&rsquo;en HTTP ; cela ne change absolument rien.</li>
</ul>
<h3>Technologies</h3>
<p>XeeK est pour le moment développé à l&rsquo;aide de PHP, JavaScript, Ajax et MySQL. Bien entendu, les langages liés tels que CSS et HTML sont également utilisés à foison. Pour ce qui est de la compatibilité des navigateurs, pour être sincère je n&rsquo;ai encore utilisé que Firefox. Soyons honnête ; je ne suis ni designer ni un pros des subtilités de chaque navigateur. Mais je tiens à préciser qu&rsquo;avant d&rsquo;effectuer une release, je ferais mon possible pour au moins que la partie &laquo;&nbsp;victime&nbsp;&raquo; de l&rsquo;outil fonctionne sur IE qui est toujours, il faut le rappeler, le navigateur le plus utilisé. Je vise au moins IE7, peut-être IE6 mais il ne faut peut-être pas trop en demander pour une 1ère release <img src='https://www.segmentationfault.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Release</h3>
<p>Je sens venir la question &laquo;&nbsp;<em>Quand XeeK sera-t-il publié ?</em>&laquo;&nbsp;. Je n&rsquo;ai malheureusement pas encore de réponse pour le moment. XeeK est encore au stade de prototype même si plusieurs fonctionnalités marchent déjà bien. Il me reste à concevoir la partie interface de l&rsquo;outil, améliorer deux/trois petites choses, tester la partie exploitation sous IE&#8230; Comme vous pouvez vous en douter je ne travaille pas sur ce projet à plein temps, j&rsquo;ai aussi des études. Pour donner une estimation, j&rsquo;espère pouvoir publier une première release avant 2009. Mais cela ne constitue pas une garantie&#8230; En effet, je préfère prendre mon temps pour bien faire les choses, plutôt que de sortir quelque chose de bancal le plus vite possible. Au pire, je sortirais une alpha ou béta avant sa vraie sortie.</p>
<p>XeeK sera publié sous license GPL (2 ou 3). En d&rsquo;autres termes, n&rsquo;importe qui pourra utiliser, développer et améliorer l&rsquo;outil à condition qu&rsquo;il publie ses travaux également sous GPL.</p>
<h3>Click and hack</h3>
<p>Certains me reprocheront peut-être :</p>
<blockquote><p><em>Tu n&rsquo;as pas honte, de mettre à disposition des scripts kiddies un outil aussi dangereux, où il suffit de cliquer pour pirater ?</em></p></blockquote>
<p>Je leur répondrai tout simplement non pour plusieurs raisons :</p>
<ul>
<li>Il existe des outils similaires encore lus puissants et plus simples à utiliser. Exemple : Metasploit. Personne ne se plaint de cet outil (enfin pas à ma connaissance) alors qu&rsquo;il permet de rooter une machine sans aucune connaissance technique. C&rsquo;est un outil utilisé par des professionnel pour le <em>penetration testing</em>.</li>
<li>Cet outil n&rsquo;est pas plus &laquo;&nbsp;dangereux&nbsp;&raquo; que les possibilités offertes par la faille XSS. Il essaye juste d&rsquo;utiliser ces possibilités au maximum.</li>
<li>En sortant cet outil et en le faisant connaître, j&rsquo;espère faire prendre conscience à plus d&rsquo;un que les failles XSS sont vraiment dangereuses, ce qui semble ne vraiment pas encore être le cas.</li>
</ul>
<p>Sur ce, je crois que j&rsquo;ai tout dit&#8230; Je vais continuer le développement de ce projet en espérant ne pas mettre trop de temps à le publier. Si vous avez des questions ou suggestions, les commentaires sont là pour ça !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>La XSS, cette faille méconnue</title>
		<link>https://www.segmentationfault.fr/securite-informatique/la-xss-cette-faille-meconnue/</link>
		<comments>https://www.segmentationfault.fr/securite-informatique/la-xss-cette-faille-meconnue/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 17:33:31 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[faille web]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/?p=70</guid>
		<description><![CDATA[En matière de sécurité des sites Web, la XSS est sans doute la faille incontournable, tant au niveau de sa popularité auprès des hackers débutants que du nombre impressionnant de sites vulnérables. Pour s&#8217;en rendre compte, il n&#8217;y a qu&#8217;à comparer le nombre de sites vulnérables aux XSS et ceux touchés par les injections SQL [...]]]></description>
			<content:encoded><![CDATA[<p>En matière de sécurité des sites Web, la XSS est sans doute la faille incontournable, tant au niveau de sa popularité auprès des hackers débutants que du nombre impressionnant de sites vulnérables. Pour s&rsquo;en rendre compte, il n&rsquo;y a qu&rsquo;à comparer le nombre de sites vulnérables aux XSS et ceux touchés par les injections SQL — qui, rien qu&rsquo;eux, sont déjà nombreux. Cependant, contrairement aux injections SQL, les failles de type XSS ne sont pas exploitables au niveau du serveur lui-même, mais nécessitent la présence d&rsquo;un client. C&rsquo;est justement cette différence fondamentale qui, à mon avis, entraîne les gens à penser que la XSS est moins dangereuse que l&rsquo;injection SQL. Beaucoup (trop) de développeurs pensent que la XSS ne permet que de voler les cookies des visiteurs, et imaginent que pour sécuriser leur site il suffit de faire des vérifications sur leurs IP. Comme nous allons le voir, ces deux idées reçues sont complètement fausses.</p>
<p>J&rsquo;ai justement décidé de rédiger ce billet afin de sensibiliser les lecteurs aux véritables dangers qui se trouvent dans la face cachée de cet iceberg qu&rsquo;est la faille XSS. Comme mon but n&rsquo;est pas d&rsquo;aider les <em>script-kiddies</em> à exploiter cette faille, je ne donnerai pas de code ni d&rsquo;exploit tout fait. Je suppose que les lecteurs ayant quelques connaissances en JavaScript pourront tester eux-mêmes et vérifier la véracité de mes propos&#8230;<span id="more-70"></span></p>
<h3>Les « vraies » possibilités de la XSS</h3>
<p>Pour comprendre les enjeux qui se cachent derrière la faille XSS, revenons à la base : qu&rsquo;est-ce qu&rsquo;une XSS ? Les initiales XSS signifient <em>Cross Site Scripting</em>, le C ayant été remplacé par le X du fait que CSS signifie déjà <em>Cascade Style Sheets</em>. La faille XSS permet à un attaquant potentiel d&rsquo;exécuter du code (un <em>script</em>) sur le navigateur du client. Elle apparaît quand un site Web affiche des variables provenant d&rsquo;une entrée utilisateur sans les filtrer. Ainsi, le simple code PHP suivant est vulnérable :</p>
<pre>&lt;?php
echo $_GET['var'];
?&gt;</pre>
<p>En effet, un attaquant visitant cette page contrôle directement (par le biais de l&rsquo;URL) le contenu de la variable <code>$_GET['var']</code>. Il peut alors insérer du code HTML ou JavaScript, et il s&rsquo;exécutera comme s&rsquo;il faisait partie du site Web.</p>
<p>Quel intérêt ? Tout simplement le fait de pouvoir manipuler un visiteur en lui donnant un lien piégé. En cliquant sur un lien exploitant la faille XSS, le navigateur du visiteur va afficher le code HTML du site et exécuter le code JavaScript. Cela permet alors de récupérer des informations propres au visiteur, puisque tout le code est exécuté comme s&rsquo;il provenait du site original. En effet, il faut savoir que si un site X envoie par exemple un cookie à un visiteur, le site Y ne pourra pas le lire. Le fait que la XSS permette d&rsquo;injecter un script malveillant directement dans le code envoyé par X va donc autoriser ce script à récupérer des informations telles que des cookies.</p>
<p>Mais la récupération de cookie est loin d&rsquo;être la seule possibilité des XSS. A vrai dire, la XSS offre absolument toutes les possibilités qu&rsquo;offre JavaScript, puisqu&rsquo;elle permet l&rsquo;exécution de code JS arbitraire sur le navigateur. Citons quelques exemples :</p>
<ul>
<li>Vol de cookies, détournement de session</li>
<li>Accès aux mêmes privilèges que la victime</li>
<li>Accès au contenu de pages protégées (du moment que la victime peut y accéder)</li>
<li>Exécution de requêtes arbitraires en se faisant passer pour la victime</li>
<li>Espionnage de la victime, récupération de toutes les actions effectuées telles que les pages visitées, les saisies dans les formulaires — qui contiennent au passage probablement des mots de passe</li>
<li>Ouverture de fenêtres de téléchargement de logiciels (pouvant être des spywares, trojans, rootkits&#8230;) lorsque la victime surfe sur ce site auquel elle fait confiance — et par conséquent, baisse sa garde</li>
</ul>
<p>Il faut bien comprendre que la faille XSS permet à l&rsquo;attaquant d&rsquo;avoir un accès direct au navigateur de la victime, et qu&rsquo;il peut alors absolument tout faire sur le site en se faisant passer pour la victime. Si la victime est par exemple un utilisateur lambda d&rsquo;un forum, l&rsquo;attaquant pourra poster des messages sous son nom, modifier son profil, et même dans certains cas changer son mot de passe. Si la victime est l&rsquo;administrateur du forum, je vous laisse imaginer les possibilités offertes&#8230;</p>
<p>Attention, il faut cependant bien voir que la XSS ne permet pas l&rsquo;élévation de privilèges au delà de ceux de la victime, autrement dit un attaquant ne pourra pas faire plus que ne le peut sa victime. Par exemple, s&rsquo;il piège un utilisateur lambda du forum, il ne pourra pas effectuer des tâches d&rsquo;administration — à moins bien sûr qu&rsquo;une autre faille soit présente sur le site.</p>
<h3>Est-ce difficile à exploiter ?</h3>
<p>Non ! Et c&rsquo;est une raison de plus pour prendre au sérieux la menace réelle que constitue cette faille ! Concrètement, il suffit d&rsquo;avoir quelques connaissances en JavaScript pour pouvoir exploiter une faille XSS sur un site de base non protégé. De plus, la popularité grandissante d&rsquo;<em>Ajax</em> offre encore de nouvelles possibilités, puisque l&rsquo;objet XMLHttpRequest permet d&rsquo;effectuer des requêtes asynchrones sur le serveur. Cela permet d&rsquo;effectuer des requêtes en se faisant passer pour la victime tout en restant invisible. Et même si Ajax ne permet pas d&rsquo;effectuer de requêtes sur un autre serveur (les requêtes sur des serveurs autres que celui visité ne sont pas permises par le navigateur), il existe une <a href="http://blog.pascal-martin.fr/post/Requete-Ajax-Cross-domain-balise-script" target="_blank">technique</a> permettant de passer outre et d&rsquo;effectuer des requêtes <em>cross-domain</em> de façon détournée. Il devient alors possibles d&rsquo;envoyer des requêtes sur un site distant, comme par exemple le site Web de l&rsquo;attaquant.</p>
<p>Ainsi, en ayant un minimum de connaissances JavaScript, il est possible de concevoir un exploit permettant de dumper un site Web vers une base de données contrôlée par l&rsquo;attaquant, tout en se faisant passer pour un visiteur et donc en ayant accès à toutes les pages qu&rsquo;il peut voir. Ainsi, même si l&rsquo;attaquant n&rsquo;a aucune connaissance au préalable d&rsquo;un site Web et des éventuelles zones à accès réservés, il peut étudier ces dumps en off-line de façon totalement invisible puisqu&rsquo;il ne consulte jamais le serveur directement. Il pourra alors mettre au point un second exploit qui lui permettra par la suite d&rsquo;effectuer véritablement l&rsquo;attaque en effectuant des requêtes pour le compte de la victime.</p>
<h3>Les techniques qui <span style="text-decoration: underline;">ne protègent pas</span> un site contre les XSS</h3>
<p>Les pratiques suivantes ne protègent en rien un site Web contre les XSS :</p>
<ul>
<li>Vérification les IP des visiteurs authentifiés — inutile puisque le code est exécuté par la victime !</li>
<li>Protections par .htaccess — inutile puisque si la victime est authentifiée, la requête forgée pourra être exécutée</li>
<li>Utilisation de HTTPS — ne change absolument rien, JavaScript et Ajax fonctionnent très bien en HTTPS&#8230;</li>
</ul>
<p>Attention, je n&rsquo;ai pas dit que ces mesures de protections étaient complètement inutiles ; juste que <span style="text-decoration: underline;">dans le cas de la XSS</span>, elles le sont.</p>
<h3>La seule solution pour en finir avec les XSS</h3>
<p>On ne le répétera jamais assez, il faut <strong>filtrer toutes les entrées utilisateur</strong>, en particulier celles que l&rsquo;on <strong>affiche</strong> sur le site. Cela est valable pour toutes les variables envoyées par GET, POST, récupérées via les cookies, et plus généralement tout ce qui transite dns les requêtes HTTP, comme les entêtes (dont le célèbre <em>X</em>-<em>Forwarded-For</em>) donc même certaines variables du tableau <code>$_SERVER</code> de PHP. Pour être efficace, la fonction de filtrage doit :</p>
<ul>
<li>Remplacer les caractères spéciaux par leurs entités HTML correspondantes</li>
<li>Supprimer toutes les balises HTML (dont &lt;script&gt;)</li>
</ul>
<p>En fait, le deuxième point est inclus dans le premier, puisque les caractères &lt; et &gt; sont spéciaux et peuvent donc être remplacés.</p>
<p>En PHP, pour sécuriser efficacement les entrées utilisateurs contre les XSS, il faut utiliser la fonction <code>htmlentities()</code> en n&rsquo;oubliant pas de lui passer la constante <code>ENT_QUOTES</code> en deuxième argument afin de considérer les guillemets simples et doubles comme des caractères spéciaux et de les remplacer elles aussi. Un exemple :</p>
<pre>&lt;?php
echo <strong>htmlentities(</strong>$_GET['var'], <strong>ENT_QUOTES)</strong>;
?&gt;</pre>
<p>Ainsi ce code est sécurisé, contrairement au premier. L&rsquo;utilisation de cette fonction permet de sécuriser des variables affichées aussi bien entre des balises que dans des valeurs d&rsquo;attributs de balises, comme c&rsquo;est le cas dans des champs de formulaires. En effet, comme les caractères &lt;, &gt;, &lsquo; et &nbsp;&raquo; sont filtrés, il est impossible de s&rsquo;évader des champs et d&rsquo;injecter du code JavaScript.</p>
<p>Il s&rsquo;agit à ma connaissance de la seule protection valable pour sécuriser une variable contre les XSS dans toutes les conditions. L&rsquo;utilisation d&rsquo;autres fonction, comme par exemple <code>striptags()</code>, ne suffit pas dans toutes les conditions puisques les guillemets ne sont pas filtrées, laissant la possibilité d&rsquo;injecter des attributs supportant le JavaScript comme <code>onload</code>, <code>onmouseover</code>, etc.</p>
<h3>La XSS, une faille finalement pas si inoffensive que ça&#8230;</h3>
<p>Pour conclure, j&rsquo;espère vous avoir convaincu que la faille XSS représente une réelle menace, et qu&rsquo;il est très important de la prendre au sérieux. Si le filtrage des variables contre les injections SQL commence à rentrer dans les mœurs, on ne peut pas en dire autant pour les XSS. Et pourtant, cette dernière permet dans certains cas de rooter complétement un site&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/securite-informatique/la-xss-cette-faille-meconnue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Faille dans Apache : Contourner les .htaccess avec &#171;&#160;Limit GET POST&#160;&#187;</title>
		<link>https://www.segmentationfault.fr/securite-informatique/contourner-htaccess-limit-get-post/</link>
		<comments>https://www.segmentationfault.fr/securite-informatique/contourner-htaccess-limit-get-post/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 14:10:59 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[faille web]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/secu-info/contourner-htaccess-limit-get-post/</guid>
		<description><![CDATA[Le week-end dernier, j&#8217;ai reçu un coup de fil d&#8217;un ami (Geo). Il m&#8217;annonçait qu&#8217;il avait réussi à contourner le .htaccess que j&#8217;avais placé pour sécuriser la zone admin de Ghosts In The Stack. Perplexe, je lui ai demandé comment il avait fait&#8230; et il s&#8217;avère que cela serait du à Apache, qui a tendance [...]]]></description>
			<content:encoded><![CDATA[<p>Le week-end dernier, j&rsquo;ai reçu un coup de fil d&rsquo;un ami (Geo). Il m&rsquo;annonçait qu&rsquo;il avait réussi à contourner le .htaccess que j&rsquo;avais placé pour sécuriser la zone admin de <a href="http://www.ghostsinthestack.org" target="_blank">Ghosts In The Stack</a>. Perplexe, je lui ai demandé comment il avait fait&#8230; et il s&rsquo;avère que cela serait du à Apache, qui a tendance à exécuter les requêtes qu&rsquo;il ne comprend pas comme étant des requêtes GET. Concernant les autres serveurs Web, je n&rsquo;ai pas pu tester car je n&rsquo;en ai pas d&rsquo;autres sous la main. Voici quelques éléments pour comprendre comment tirer profit de la faille, et comment éviter de se faire avoir.<span id="more-18"></span></p>
<h3>Mise en évidence de la faille</h3>
<p>Supposons que nous disposons d&rsquo;un serveur Apache local et que nous avons une page index.php très simple comme ceci :</p>
<pre>&lt;h1&gt;Bonjour !&lt;/h1&gt;</pre>
<p>Pour accéder à la page, nous accédons à l&rsquo;URL http://127.0.0.1/~trance/vuln/ avec un navigateur Web. La requête envoyée est grossièrement la suivante :</p>
<pre>GET http://127.0.0.1/~trance/vuln/ HTTP/1.1
Host: 127.0.0.1</pre>
<p>La réponse reçue comporte alors le code HTML de la page Web. Jusqu&rsquo;ici, tout est normal : Apache n&rsquo;a fait qu&rsquo;interpréter la requête GET qu&rsquo;on lui a envoyé. Maintenant, imaginez que nous envoyons une requête mal formée qui n&rsquo;est pas de type GET, comme :</p>
<pre>n1Mp0rTeKwa http://127.0.0.1/~trance/vuln/ HTTP/1.1
Host: 127.0.0.1</pre>
<p>Et là, nous constatons qu&rsquo;Apache ne fait absolument aucune différence entre cette et la requête précédente ! Il n&rsquo;y a aucune erreur ; il renvoie la même chose. A première vue, cela ne choque pas forcément, mais on s&rsquo;aperçoit assez vite que l&rsquo;on peut tirer profit de cette faille pour contourner certaines protections .htaccess.</p>
<h3>Contourner le &laquo;&nbsp;Limit GET POST&nbsp;&raquo;</h3>
<p>Dans de nombreux cas, un webmaster peut souhaiter restreindre l&rsquo;accès à un fichier ou à un dossier sur son site Web. Pour cela, il place des fichiers .htaccess. Ces fichiers modifient localement la configuration d&rsquo;Apache et utilisent une certaine syntaxe qui permet de faire des choses assez puissantes. La description de cette syntaxe est connue, et beaucoup de sites Web l&rsquo;illustrent. Certains proposent une solution simple pour protéger l&rsquo;accès à un fichier par un mot de passe. Il suffit, selon eux, de créer un .htaccess selon ce modèle :</p>
<pre>&lt;Files fichierAProteger.php&gt;

AuthUserFile /chemin/vers/.htpasswd
AuthName "Zone à accès restreint"
AuthType Basic
    &lt;Limit GET POST&gt;
    require valid-user
    &lt;/Limit&gt;
&lt;/Files&gt;</pre>
<p>Ce fichier permet d&rsquo;indiquer à Apache de refuser toute requête POST ou GET si l&rsquo;utilisateur n&rsquo;est pas identifié avec un login et un mot de passe apparaissant dans le fichier .htpasswd correspondant. En fait, peu importe qu&rsquo;il y ait de .htpasswd ; la faille ne se situe pas à ce niveau.</p>
<p>Souvenez-vous de ce que nous avons vu plus haut. Nous avons vu qu&rsquo;Apache interprétait toutes les requêtes qu&rsquo;il ne comprenait pas comme des requêtes GET. Ainsi, nous pouvons utiliser cela à notre avantage pour accéder à la page protégée sans s&rsquo;authentifier !</p>
<p>Exemple : imaginons que nous avons un .htaccess rudimentaire de ce type dans le même dossier :</p>
<pre>&lt;Limit GET POST&gt;
Deny from all
&lt;/Limit&gt;</pre>
<p>Logiquement, ce fichier est censé interdire tout accès aux pages du dossier. Le hic, c&rsquo;est que seules les requêtes GET ou POST sont concernées&#8230; Tentez d&rsquo;accéder à la page avec le navigateur : vous obtenez une erreur 403, puisque votre navigateur envoie implicitement un GET. Maintenant, envoyez une requête incorrecte avec un outil comme Netcat :</p>
<pre>n1Mp0rTeKwa  http://127.0.0.1/~trance/vuln/ HTTP/1.1</pre>
<pre>Host: 127.0.0.1</pre>
<p>Et vous obtiendrez la réponse suivante :</p>
<pre>&lt;h1&gt;Bonjour !&lt;/h1&gt;</pre>
<p>Voila donc comment contourner la protection&#8230; Simple, n&rsquo;est-ce pas ? Le pire, dans tout cela, c&rsquo;est que la majorité des webmasters protègent leurs sites de cette façon. Et j&rsquo;en faisais partie, jusqu&rsquo;à ce qu&rsquo;on me le signale <img src='https://www.segmentationfault.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Correction</h3>
<p>La correction est ultra-simple : n&rsquo;utilisez pas l&rsquo;instruction &laquo;&nbsp;limit&nbsp;&raquo; quand vous voulez restreindre l&rsquo;accès à un fichier ou dossier ! Bannissez les lignes &laquo;&nbsp;&lt;Limit GET POST&gt;&nbsp;&raquo; et &laquo;&nbsp;&lt;/Limit&gt;&nbsp;&raquo; de vos fichiers .htaccess et vous éviterez ce genre de problèmes.</p>
<p>D&rsquo;ailleurs, la <a href="http://httpd.apache.org/docs/2.2/mod/core.html#limit" target="_blank">documentation d&rsquo;Apache</a> précise bien qu&rsquo;en général, il ne faut pas utiliser &lt;Limit&gt; lorsque l&rsquo;on cherche à restreindre l&rsquo;accès. Je cite : &laquo;&nbsp;<strong>In the general case, access control     directives should not be placed within a     <code class="directive">&lt;Limit&gt;</code> section.</strong>&nbsp;&raquo;</p>
<h3>Limites</h3>
<p>Un petit bémol cependant : pour le moment, nous n&rsquo;avons pas trouvé le moyen de fausser les requêtes POST en injectant des données. Ainsi, si vous avez des formulaires POST protégés par des .htaccess, ils sont <em>à priori</em> sûrs. Mais je vous conseille quand même de patcher vos .htaccess en retirant les lignes &laquo;&nbsp;&lt;Limit&gt;&nbsp;&raquo; un peu trop dangereuses&#8230;</p>
<p>D&rsquo;autre part, je suis loin d&rsquo;être un expert en configuration Apache. Il est possible qu&rsquo;il existe une option demandant à Apache de refuser systématiquement toutes les requêtes qui ne sont pas comprises. Si vous la connaissez, vous pouvez laissez un commentaire, cela m&rsquo;intéresse&#8230;</p>
<p>Merci encore à Geo pour m&rsquo;avoir averti de la présence de la faille sur GITS !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/securite-informatique/contourner-htaccess-limit-get-post/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>
