Das Problem liegt nicht direkt an Magento sondern im eingesetzten Zend Framework. Durch eine Lücke der Zend_RPC XML Verarbeitung können beliebige Dateien auf dem Webserver ausgelesen werden. Dazu gehört auch die local.xml mit allen enthaltenen Zugangsdaten zur Datenbank.
Magento bietet für die jeweiligen Versionen bereits Patches an:
- Community Edition 1.4.0.0 through 1.4.1.1
- Community Edition 1.4.2.0
- Community Edition 1.5.0.0 through 1.7.0.1
Der Patch lässt sich mit einer Zeile über die Shell (hier Version 1.5 - 1.7) anwenden:
wget http://tinyurl.com/MAGE1702 && patch -p0 -i MAGE1702 && rm MAGE1702
Meiner Meinung nach kann der Fehler auch durch ein komplettes deaktivieren der RPC-Api mit .htaccess umgangen werden.
RedirectMatch 404 /api/xmlrpc.*
Da wir jedoch zur Zeit noch an einer Exploit Demo arbeiten konnte ich diesen Workaround noch nicht testen.
Im Anschluss sollten entweder alle Passwörter geändert werden oder alternativ, mittels Apache-Log, überprüft werden ob die Sicherheitslücke bereits benutzt wurde. Wenn ja natürlich wieder Passwörter ändern. (Hinweis kam von millejano)
Wir haben parallel ein kleines Script bereitgestellt welches den Exploit auf eurer Magento-Installation überprüft.
Update #1: Vinai Kopp postete in #magento-de gerade einen Link um alle Magento Installationen eines Webservers automatisch zu patchen.
Update #2: Die Patches funktionieren erst ab PHP 5.2.11, bei anderen Versionen wird der Fehler Call to undefined function libxml_disable_entity_loader() geworfen. (via Matthias Zeis auf Twitter)