01.09.2014 yahe legacy security wordpress
In den letzten Wochen habe ich einige Artikel zur Sicherheit ausgewählter WordPress-Plugins geschrieben. Nun wollte ich abschließend noch einmal ein Fazit ziehen.
Begonnen hatte alles damit, dass auf Golem.de im Abstand von wenigen Wochen über zwei weit verbreitete Plugins mit leicht auffindbaren und dennoch schwerwiegenden Fehlern berichtet wurde. Es hatte mich daher interessiert, wie schlecht es wirklich um die Codequalität bei weit verbreiteten Plugins bestellt ist. Also begab ich mich zur Liste der beliebtesten Plugins und begann, mir Plugins anzusehen. Dabei habe ich mich auf halbwegs aktuelle Plugins konzentriert, die mindestens 25.000 Downloads hatten. Außerdem sollte die Analyse schnell gehen. Es ging mir nicht darum, Fehler in der Ablauflogik der Plugins zu finden, sondern ich wollte die groben Schnitzer finden, also die Fehler, die einem sofort ins Auge springen. Glücklicherweise verfügt jedes Plugin über ein eigenes Trac-Repository, sodass man direkt online in den Quelltext gucken kann. Damit entfällt das langwierige downloaden, entpacken und im Editor öffnen. So kann man relativ schnell einzelne Plugins abarbeiten.
Ich habe mir etwa 100 Plugins angesehen, die sich vom Namen oder von der versprochenen Funktionalität spannend anhörten. Dabei sind die 12 unten aufgelisteten Plugins aufgefallen, die solche nennenswerten Löcher enthielten, wobei 2 davon Beifang sind. Hatte ich ein Plugin mit einer Lücke gefunden, habe ich mir auch die anderen Plugins des gleichen Autors angesehen.
Plugin | Angriff | Anzahl |
---|---|---|
WP RSS Aggregator | XSS | 141.960* |
WP CSV | Information Leakage | 31.675* |
WP Advanced Importer | Unprivileged File Upload | 12.041* |
WP Ultimate CSV Importer | Unprivileged File Upload | 112.793* |
Simplr Registration Form Plus+ | Information Leakage | 105.325* |
Form Builder | Unprivileged File Upload | 88.218* |
WordPress File Upload | XSS | 25.060* |
WP Modal Login | Privilege Escalation | 34.763* |
Quick Chat | SQL Injection | 207,488** |
Quick Count | SQL Injection | 14,268** |
Login With Ajax | Privilege Escalation | 273.635** |
FormGet Contact Form | XSS | 159.545** |
Total: 1.206.771 (*Stand vom 16.08.2014) (**Stand vom 26.08.2014) |
Bei der Durchsicht der Plugins sind mir mehrere Dinge aufgefallen:
Die Kommunikation mit den einzelnen Plugin-Entwicklern war bisher durchweg positiv. Viele haben sich gefreut, dass sich jemand tiefer mit ihren Plugins auseinandergesetzt und sie über Probleme informiert hat. Die meisten haben in weniger als einer Woche das Problem behoben. Bei anderen Plugins warte ich darauf hingegen immernoch. Dort wurde ein Fix lediglich in Aussicht gestellt. Überrascht hat mich die Reaktion eines Entwicklers, der sein Plugin aufgrund von Zeitmangel aus dem Plugin-Repository entfernt hat. In meinen Augen war das ein mutiger Schritt.
Für Leute und Firmen, die WordPress professionell einsetzen, kann ich aufgrund der Ergebnisse eigentlich nur einen Rat geben. Wenn Fremdplugins eingesetzt werden, empfiehlt es sich, wenigstens kurz in deren Quelltext zu blicken. Guckt euch an, ob sichergestellt wird, dass die PHP-Scripte nicht direkt aufgerufen werden können. Damit ist bereits viel gewonnen, da der Plugin-Entwickler so viel mehr Kontrolle über den Programmablauf hat.