Jason Orcutt's Prometheus is a web application framework written in PHP. A security vulnerability allows remote attackers to inject malicious code into the web application.
A remote attacker can inject into Prometheus arbitrary PHP code that executes under the privileges of the underlying web server. The crux of the problem lies in the following snippet of code extracted from the top of prometheus-library/all.lib:
An attacker could force the application to load a tainted version of autoload.lib and prometheus-lib.path that contains arbitrary PHP code from a remote server by setting PHP_AUTO_LOAD_LIB to "0" and PROMETHEUS_LIBRARY_BASE to the address of the remote server. The following scripts can be targeted in this attack because all.lib is included without any filtering:
* index.php
* install.php
* test_*.php
The following is a sample attack URL that would cause "target.server" to load autoload.lib and prometheus-lib.path from "attackers.server".
Analysis:
Remote exploitation allows an attacker to execute arbitrary commands and code under the privileges of the web server. This also opens the door to privilege escalation attacks.
Detection:
iDEFENSE has verified that Prometheus 6.0 is vulnerable. Versions 3.0-beta and 4.0-beta are also reportedly vulnerable. Other earlier versions may be vulnerable as well. To determine if a specific implementation is vulnerable, experiment with the above-described attack.
Workaround:
* First, locate the files that make dangerous calls to include().
The following sample command line accomplishes this:
This should prevent attackers from arbitrarily setting the PROMETHEUS_LIBRARY_BASE variable to point to a remote location.
Disclosure timeline:
09/28/2002 Issue disclosed to iDEFENSE
10/14/2002 Author notified via e-mail to zerodiv@zerodivide.net
10/14/2002 iDEFENSE clients notified
10/14/2002 Response received from zerodiv@zerodivide.net
10/31/2002 Coordinated public disclosure