<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/index.php?action=history&amp;feed=atom&amp;title=4.8.4_Test_d%27HTTP_Parameter_pollution_%28OTG-INPVAL-004%29</id>
		<title>4.8.4 Test d'HTTP Parameter pollution (OTG-INPVAL-004) - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/index.php?action=history&amp;feed=atom&amp;title=4.8.4_Test_d%27HTTP_Parameter_pollution_%28OTG-INPVAL-004%29"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=4.8.4_Test_d%27HTTP_Parameter_pollution_(OTG-INPVAL-004)&amp;action=history"/>
		<updated>2026-04-28T21:30:52Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=4.8.4_Test_d%27HTTP_Parameter_pollution_(OTG-INPVAL-004)&amp;diff=187561&amp;oldid=prev</id>
		<title>Jcpraud at 17:50, 5 January 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=4.8.4_Test_d%27HTTP_Parameter_pollution_(OTG-INPVAL-004)&amp;diff=187561&amp;oldid=prev"/>
				<updated>2015-01-05T17:50:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 17:50, 5 January 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l47&quot; &gt;Line 47:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 47:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Serveur d'application web !! Résultat d'analyse !! Exemple&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Serveur d'application web !! Résultat d'analyse !! Exemple&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ASP.NET / IIS || Toutes les occurences sont concaténées avec des virgules || &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;couleurr&lt;/del&gt;=rouge,bleu&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ASP.NET / IIS || Toutes les occurences sont concaténées avec des virgules || &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;couleur&lt;/ins&gt;=rouge,bleu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ASP / IIS || Toutes les occurences sont concaténées avec des virgules|| &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;color&lt;/del&gt;=rouge,bleu&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| ASP / IIS || Toutes les occurences sont concaténées avec des virgules|| &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;couleur&lt;/ins&gt;=rouge,bleu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| PHP / Apache || La dernière occurence est conservée || couleur=bleu&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| PHP / Apache || La dernière occurence est conservée || couleur=bleu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l71&quot; &gt;Line 71:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 71:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| mod_wsgi (Python) / Apache || La première occurence est conservée || couleur=rouge&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| mod_wsgi (Python) / Apache || La première occurence est conservée || couleur=rouge&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Python / Zope || Toutes les occurences sont dans une liste || &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;color&lt;/del&gt;=['rouge','bleu']&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Python / Zope || Toutes les occurences sont dans une liste || &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;couleur&lt;/ins&gt;=['rouge','bleu']&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(source: [[Media:AppsecEU09_CarettoniDiPaola_v0.8.pdf]] )&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(source: [[Media:AppsecEU09_CarettoniDiPaola_v0.8.pdf]] )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jcpraud</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=4.8.4_Test_d%27HTTP_Parameter_pollution_(OTG-INPVAL-004)&amp;diff=187560&amp;oldid=prev</id>
		<title>Jcpraud: Created page with &quot;{{Template:OWASP Testing Guide v4}}   == Sommaire == &lt;br&gt; Fournir plusieurs paramètres HTTP de même nom peut induire l'application à en interprêter les valeurs de manière...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=4.8.4_Test_d%27HTTP_Parameter_pollution_(OTG-INPVAL-004)&amp;diff=187560&amp;oldid=prev"/>
				<updated>2015-01-05T17:47:48Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Template:OWASP Testing Guide v4}}   == Sommaire == &amp;lt;br&amp;gt; Fournir plusieurs paramètres HTTP de même nom peut induire l&amp;#039;application à en interprêter les valeurs de manière...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Fournir plusieurs paramètres HTTP de même nom peut induire l'application à en interprêter les valeurs de manière imprévue. En exploitant ces effets, un attaquant peut contourner la validation des entrées, déclencher des erreurs de l'application, ou modifier la valeur de variables. Comme l'HTTP Parameter Pollution (''HPP'') impacte une brique commune à toute les technologies web, des attaques côté serveur et client sont possibles.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les standard HTTP actuels n'imposent pas de méthode pour l'interprêtation de paramètres multiples portant le même nom. Par exemple, la [http://www.ietf.org/rfc/rfc3986.txt RFC 3986] définit seulement le terme ''Query String'' comme une série de paires champs-valeur et la [http://www.ietf.org/rfc/rfc2396.txt  RFC 2396] définit des classes de caractères réservés et non réservés. Sans standard en place, les composants d'application web traitent ce cas limite de façon variée (voir la table ci-dessous pour plus de détails).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En soit cela n'est pas un indicateur de vulnérabilité. Cependant, si le développeur n'est pas averti du problème, la présence de paramètres dupliqués peut entraîner une anomalie de comportement dans l'application, pouvant être exploitée par un attaquant. Comme souvent en sécurité, les comportements inattendus sont souvent une source de faiblesses qui peuvent causer des attaques par HTTP Parameter Pollution. Pour mieux présenter cette classe de vulnérabilités et leur effets, il est intéressant d'analyser quelques exemples réels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Contournement de validation d'entrées et de filtres ===&lt;br /&gt;
En 2009, immédiatement après la publication du premier travai lde recherche sur l'HTTP Parameter Pollution, la technique a reçu l'attention de la communauté de la sécurité comme possible manière de contourner les pare-feux applicatifs web.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une de ces failles, impactant ''ModSecurity SQL Injection Core Rules'', représente un exemple parfait de décalage entre applications et filtres. Le filtre ModSecurity mettrait correctement sur liste noire la chaîne suivante : &amp;lt;code&amp;gt;select 1,2,3 from table&amp;lt;/code&amp;gt;, empêchant ainsi cette URL d'être traîtée par le serveur web : &amp;lt;code&amp;gt;/index.aspx?page=select 1,2,3 from table&amp;lt;/code&amp;gt;. Cepdendant, en exploitant la concaténation de multiples paramètres HTTP, un attaquant pourrait faire en sorte que le serveur d'application concatène la chaîne après que le filtre de ModSecurity ait accepté la requête. Par exemple, l'URL &amp;lt;code&amp;gt;/index.aspx?page=select 1&amp;amp;page=2,3&amp;lt;/code&amp;gt; from table ne déclencherait pas le filtre ModSecurity, pourtant la couche applicative concatènerait l'entrée en une chaîne malicieuse complète.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il s'est avéré qu'une autre vulnérabilité HPP a impacté ''Apple Cups'', le système d'impression bien connu utilisé par beaucoup de systèmes UNIX. En exploitant une HPP, un attaquant pouvait facilement déclencher une vulnérabilité Cross-Site Scripting en utilisant l'URL : &amp;lt;code&amp;gt;http://127.0.0.1:631/admin/?kerberos=onmouseover=alert(1)&amp;amp;kerberos&amp;lt;/code&amp;gt;. Le mécanisme de vérification de l'application pouvait être contourné en ajoutant un argument &amp;lt;code&amp;gt;kerberos&amp;lt;/code&amp;gt; ayant une chaîne valide (par exemple une chaîne vide). Comme le mécanisme de validation ne vérifiait que la seconde occurence, le premier &amp;lt;code&amp;gt;kerberos&amp;lt;/code&amp;gt; n'était pas proprement nettoyé avant d'être utilisé pour générer du contenu HTML dynamique. Une exploitation réussie pouvait permettre l'exécution de code JavaScript dans le contexte du site web hébergeant l'application.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Contournement d'authentification ===&lt;br /&gt;
Une vulnérabilité HPP encore plus critique a été découverte sur la plateforme populaire de blog ''Blogger''. Le bogue permettait à des utilisateurs malicieux de prendre le contrôle du blog d'une victime en utilisant la requête HTTP suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
POST /add-authors.do HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
security_token=attackertoken&amp;amp;blogID=attackerblogidvalue&amp;amp;blogID=victimblogidvalue&amp;amp;authorsList=goldshlager19test%40gmail.com(attacker email)&amp;amp;ok=Invite&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La faille se trouvait dans le mécanisme d'authentification utilisé par l'application web, puisque la vérification se faisait sur le premier &amp;lt;code&amp;gt;blogID&amp;lt;/code&amp;gt;, alors que l'opération utilisait la seconde occurence.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comportement attendu par le serveur d'application===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
La table suivante illustre comment différentes technologies web se comportent en présence de multiples occurences du même paramètre HTTP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour une URL et sa chaine de paramètres données : &amp;lt;code&amp;gt;http://example.com/?couleur=rouge&amp;amp;couleur=bleu&amp;lt;/code&amp;gt;&lt;br /&gt;
{| &lt;br /&gt;
|-&lt;br /&gt;
! Serveur d'application web !! Résultat d'analyse !! Exemple&lt;br /&gt;
|-&lt;br /&gt;
| ASP.NET / IIS || Toutes les occurences sont concaténées avec des virgules || couleurr=rouge,bleu&lt;br /&gt;
|-&lt;br /&gt;
| ASP / IIS || Toutes les occurences sont concaténées avec des virgules|| color=rouge,bleu&lt;br /&gt;
|-&lt;br /&gt;
| PHP / Apache || La dernière occurence est conservée || couleur=bleu&lt;br /&gt;
|-&lt;br /&gt;
| PHP / Zeus || La dernière occurence est conservée || couleur=bleu&lt;br /&gt;
|-&lt;br /&gt;
| JSP, Servlet / Apache Tomcat || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| JSP, Servlet / Oracle Application Server 10g || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| JSP, Servlet / Jetty || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| IBM Lotus Domino || La dernière occurence est conservée || couleur=bleu&lt;br /&gt;
|-&lt;br /&gt;
| IBM HTTP Server || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| mod_perl, libapreq2 / Apache || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| Perl CGI / Apache || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| mod_wsgi (Python) / Apache || La première occurence est conservée || couleur=rouge&lt;br /&gt;
|-&lt;br /&gt;
| Python / Zope || Toutes les occurences sont dans une liste || color=['rouge','bleu']&lt;br /&gt;
|}&lt;br /&gt;
(source: [[Media:AppsecEU09_CarettoniDiPaola_v0.8.pdf]] )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comment tester==&lt;br /&gt;
&lt;br /&gt;
Par chance, comme l'affectation des paramètres HTTP se fait typiquement dans le serveur d'application, et non dans le code applicatif lui-même, tester les réponses à la pollution de paramètres devrait se faire de manière uniforme sur toutes les pages et actions. Cependant, comme cela nécessite une connaissance approfondie de la logique applicative, tester les HPP requière des tests manuels. Les outils automatiques ne peuvent assister que partiellement les auditeurs, puisqu'ils tendent à générer trop de faux positifs. De plus, une HPP peut se manifester côté client comme côté serveur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HPP côté serveur ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour tester les vulnérabilités HPP, il faut identifier les formulaires ou actions qui acceptent des entrées utilisateur. Les chaînes de paramètres des requêtes HTTP GET sont faciles à modifier dans la barre de navigation du navigateur. Pour les actions de formulaires envoyées en POST, le testeur devra utiliser un proxy pour intercepter et modifier les données POST lorsqu'elles sont envoyées vers le serveur. Après avoir identifié un paramètre d'entrée particulier à tester, on peut éditer les données GET ou POST en interceptant la requête, ou changer la chaîne de paramètre après le chargement de la page de réponse. Pour tester les vulnérabilités HPP, ajouter simplement le même paramètre aux données GET ou POST mais avec une valeur différente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple : si l'on test le paramètre &amp;lt;code&amp;gt;search_string&amp;lt;/code&amp;gt;, l'URL de la requête contiendra ce paramètre et cette valeur.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;http://example.com/?search_string=chatons&amp;lt;/code&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paramètre à tester peut être caché parmi les autres paramètres, mais l'approche est la même ; laisser les autres paramètres en place et ajouter le duplicat.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;http://example.com/?mode=guest&amp;amp;search_string=chatons&amp;amp;num_results=100&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ajouter le même paramètre avec une valeur différente&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;http://example.com/?mode=guest&amp;amp;search_string=chatons&amp;amp;num_results=100&amp;amp;search_string=chiots&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
et envoyer la requête.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Analyser la page de réponse pour déterminer quelle(s) veleur(s) ont été prise(s) en compte. Dans l'exemple précédent, le résultat de la recherche peut afficher &amp;lt;code&amp;gt;kittens&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;puppies&amp;lt;/code&amp;gt;, une combinaison des deux (&amp;lt;code&amp;gt;kittens,puppies&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;kittens~puppies&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;['kittens','puppies']&amp;lt;/code&amp;gt;), peut donner un résultat vide, une page d'erreur.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est probable que ce comportement (première, dernière ou combinaison des paramètres de même nom) soit le même pour toute l'application. Qu'il indique ou non une vulnérabilité dépend des validations et filtrages spécifiques à l'application. En règle générale : si les validations d'entrée et les autres mécanismes de sécurité suffisent pour une valeur unique, et que le serveur affecte seulement le premièr ou le dernièr paramètre pollué, alors cela n'indique pas de vulnérabilité. Si les paramètres sont concaténés, si différents composants de l'application web utilisent différentes occurences, ou si les tests produisent des erreurs, il y a une probabilité plus grande de pouvoir utiliser la pollution de paramètres pour déclencher des vulnérabilités de sécurité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une analyse plus détaillée demanderait trois requêtes HTTP pour chaque paramètre :&lt;br /&gt;
# Envoyer une requête HTTP contenant les paramètres et valeurs normaux, et enregistrer la réponse HTTP. Par exemple &amp;lt;code&amp;gt;page?par1=val1&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remplacer la valeur du paramètre par une valeur modifiée, envoyer la requête et enregistrer la réponse. Par exemple &amp;lt;code&amp;gt;page?par1=HPP_TEST1&amp;lt;/code&amp;gt;&lt;br /&gt;
# Envoyer une requête combinant les étapes (1) et (2). Enregistrer aussi la réponse HTTP. Par exemple &amp;lt;code&amp;gt;page?par1=val1&amp;amp;par1=HPP_TEST1&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comparer les réponses obtenues lors de toutes les étapes précédentes. Si la réponse (3) est différente de (1) et aussi de la réponse (2), il y a un décalage qui peut être utilisé pour déclencher des vulnérabilités HPP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Construire une exploitation complète à partir d'une faiblesse de pollution de paramètres sort du cadre de ce texte. Voir les références des exemples et plus de détails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HPP côté client ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
De manière similaire aux tests HPP côté serveur, les tests manuels sont la seule technique fiable pour auditer les applications web et détecter les vulnérabilités de pollution de paramètre impactant les composants côté client. Alors que dans la variante côté serveur l'attaquant utilise une application web vulnérable pour accéder à des données protégées ou effectuer des ations interdites, les attaques côté client visent à subvertir les composants et technologies côté client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pout tester les vulnérabilités HPP côté client, il faut identifier tout formulaire ou action acceptant des entrées utilisateur et affichant un résultat dépendant de ces entrées. Une page de recherche est idéale, mais une boite de connexion peut ne pas fonctionner (puisqu'elle n'affichera pas d'identifiant invalide en retour à l'utilisateur).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De la même manière que pour les HPP côté serveur, il faut polluer chaque paramètre HTTP avec &amp;lt;code&amp;gt;%26HPP_TEST&amp;lt;/code&amp;gt; et chercher les occurences ''url-decoded'' dans les données fournies par l'utilisateur :&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;HPP_TEST&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;tt&amp;gt;&amp;amp;amp;amp;HPP_TEST&amp;lt;/tt&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* … and others&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En particulier, il faut examiner les réponses contenant des vecteurs HPP dans les attributs ou actions de formulaires &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;href&amp;lt;/code&amp;gt;. Encore une fois, que ce comportement par défaut signale une vulnérabilité dépend des validations d'entrées et filtrages spécifiques, et de la logique applicative. De plus, il est important de noter que cette vulnérabilité peut aussi impacter les paramètres utilisés dans XMLHttpRequest (XHR, la création des attributs runtime et autres technologies de plugins (par exemple les variables flashvars d'Adobe Flash).&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
OWASP ZAP HPP Passive/Active Scanners [https://code.google.com/p/zap-extensions/wiki/V1Extensions]&lt;br /&gt;
&lt;br /&gt;
HPP Finder (Chrome Plugin) [https://chrome.google.com/webstore/detail/hpp-finder]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
HTTP Parameter Pollution - Luca Carettoni, Stefano di Paola [https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf]&lt;br /&gt;
&lt;br /&gt;
Split and Join (Bypassing Web Application Firewalls with HTTP Parameter Pollution) - Lavakumar Kuppan [http://www.andlabs.org/whitepapers/Split_and_Join.pdf]&lt;br /&gt;
&lt;br /&gt;
Client-side Http Parameter Pollution Example (Yahoo! Classic Mail flaw) - Stefano di Paola [http://blog.mindedsecurity.com/2009/05/client-side-http-parameter-pollution.html]&lt;br /&gt;
&lt;br /&gt;
How to Detect HTTP Parameter Pollution Attacks - Chrysostomos Daniel [http://www.acunetix.com/blog/whitepaper-http-parameter-pollution/]&lt;br /&gt;
&lt;br /&gt;
CAPEC-460: HTTP Parameter Pollution (HPP) - Evgeny Lebanidze [http://capec.mitre.org/data/definitions/460.html]&lt;br /&gt;
&lt;br /&gt;
Automated Discovery of Parameter Pollution Vulnerabilities in Web Applications - Marco Balduzzi, Carmen Torrano Gimenez, Davide Balzarotti, Engin Kirda [http://www.iseclab.org/people/embyte/papers/hpp.pdf]&lt;/div&gt;</summary>
		<author><name>Jcpraud</name></author>	</entry>

	</feed>