Advisory

Yorick Koster, September 2019

Reflected Cross-Site Scripting in QRadar Forensics link analysis page

Abstract

The QRadar Forensics PHP web application contains a page that is vulnerable to reflected Cross-Site Scripting. This issue exist due to the lack of encoding of the single-quote character and can be trigger without authentication.

This vulnerability allows an attacker to perform a wide variety of actions such as performing arbitrary actions on the victim's behalf or presenting a fake login screen to collect usernames and passwords. In order to exploit this issue, the attacker has to lure a victim into opening a specially crafted link and pressing a key combination - making a successful attack less likely.

Tested versions

This issue was successfully verified on QRadar Community Edition version 7.3.1.6 (7.3.1 Build 20180723171558).

Fix

IBM reports that QRadar 7.3.2 Patch 6 is not affected by this vulnerability. In addtion, it is stated that thist issue is resolved in QRadar Community Edition version 7.3.3.

Introduction

QRadar is IBM's enterprise SIEM solution. A free version of QRadar is available that is known as QRadar Community Edition. This version is limited to 50 events per second and 5,000 network flows a minute, supports apps, but is based on a smaller footprint for non-enterprise use.

The QRadar Forensics PHP web application contains a page that is vulnerable to reflected Cross-Site Scripting. This issue exist due to the lack of encoding of the single-quote character and can be trigger without authentication.

This vulnerability allows an attacker to perform a wide variety of actions such as performing arbitrary actions on the victim's behalf or presenting a fake login screen to collect usernames and passwords. In order to exploit this issue, the attacker has to lure a victim into opening a specially crafted link and pressing a key combination - making a successful attack less likely.

Details

The vulnerability exists in the LinkAnalysis.php page, located in /opt/ibm/forensics/html/DejaVu/. The page accepts three request parameters that are reflected in hidden input fields. Their values are then used to open a new window to load the LinkAnalysisServlet Servlet. The page itself appears to be old unused code, however it is still exposed.

/opt/ibm/forensics/html/DejaVu/LinkAnalysis.php:
<?php
   
$solrQuery = htmlentities($_REQUEST['solrQuery']); // e.g., ID:*
$solrDocs = htmlentities($_REQUEST['solrDocs']); // e.g., case1-aljazeera_net2.pcap-0800278d2a7a-20080501224316017-1-2, et al.
$solrRows = htmlentities($_REQUEST['solrRows']); // e.g., 1024
   
$SERVER_NAME = $_SERVER['SERVER_NAME'];
   
$servletURL = 'http://' . $SERVER_NAME . ':8080/LinkAnalysisServlet';
$solrURL = 'http://' . $SERVER_NAME . ':8080/solr/documents';
   
print "
[...]
   <input id='solrQuery' value='$solrQuery' hidden></input>
   <input id='solrDocs' value='$solrDocs' hidden></input>
   <input id='solrRows' value='$solrRows' hidden></input>
   <script>
      var solrQuery = document.getElementById('solrQuery').value;
      var solrDocs = document.getElementById('solrDocs').value;
      var solrRows = document.getElementById('solrRows').value;
      
      window.onload = function() {
         window.open('$servletURL?solrURL=$solrURL&solrQuery='+solrQuery+'&solrDocs='+solrDocs+'&solrRows='+solrRows', '_self')
      }
    </script>
[...]

The code above uses the htmlentities() function to escape HTML characters. The flag argument is not provided, meaning that htmlentities() will not encode the single-quote character.

The values of the request parameters are reflected between single-quotes and consequently it is possible to break out of the value attribute and inject additional attributes in the hidden input field. It isn't possible to inject other HTML tags as the greater-than and less-than characters are encoded by htmlentities().

Exploiting Cross-Site Scripting vulnerabilities within hidden fields can be a bit tricky. A method has been described by Gareth Heyes in the article XSS in hidden input fields. Essentially it requires that the victim is enticed to press a certain key combination. This behavior is also browser and OS dependent. As the attacker also needs to lure a victim into opening a specially crafted link, exploiting this issue may proof to be difficult.

This issue can be demonstrated using the proof of concept below. When loading this URL in Firefox, the victim needs to press Alt+Shift+X (Windows/Linux) or Ctrl+Alt+X (macOS).

https://<ip>/forensics/DejaVu/LinkAnalysis.php?solrQuery=%27%20accesskey=X%20onclick=%27alert(document.cookie)

Work with us →