Piwik <= 2.14.3 (DisplayTopKeywords) PHP Object Injection Vulnerability

• Software Link:


• Affected Versions:

Version 2.14.3 and prior versions.

• Vulnerability Description:

The vulnerability is caused by the DisplayTopKeywords() function defined in the /plugins/Referrers/Controller.php script:

        function DisplayTopKeywords($url = "", $api)
            // Do not spend more than 1 second fetching the data
            @ini_set("default_socket_timeout", $timeout = 1);
            // Get the Keywords data
            $url = empty($url) ? "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] : $url;
            $api = $api . "&url=" . urlencode($url);
            $keywords = @unserialize(file_get_contents($api));

The content retrieved by the “file_get_contents()” function located at the URL defined in the $api variable is passed directly to the “unserialize()” function at line 365, and this can be exploited to inject arbitrary objects into the application scope, allowing remote attackers to carry out Server-Side Request Forgery (SSRF) attacks, to include and execute arbitrary PHP code, and possibly other attacks. Successful exploitation of this vulnerability requires the application running with certain configuration settings allowing to manipulate the value of the $api variable through HTTP headers (like Host or X-Forwarded-Host).

• Solution:

Update to version 2.15.0 or later.

• Disclosure Timeline:

[27/08/2015] – Vendor notified
[09/09/2015] – Issue fixed on the GitHub repository: http://git.io/vly3D
[06/10/2015] – CVE number requested
[14/10/2015] – CVE number assigned
[22/10/2015] – Version 2.15.0 released https://piwik.org/changelog/piwik-2-15-0
[04/11/2015] – Public disclosure

• CVE Reference:

The Common Vulnerabilities and Exposures project (cve.mitre.org)
has assigned the name CVE-2015-7816 to this vulnerability.

• Credits:

Vulnerability discovered by Egidio Romano.