Der Einstieg in die Angriffskette ist bemerkenswert: GiveWP stellt eine Registrierungsaktion bereit, die ohne Authentifizierung erreichbar ist und die WordPress-Einstellung zur Nutzerregistrierung schlicht ignoriert. „[GiveWP] stellt eine unauthentifizierte Registrierungsaktion (give_action=user_register) bereit, die die WordPress-Option users_can_register niemals abfragt“, erklärt Patchstack. „Selbst auf einer Website mit deaktivierter Registrierung kann der Angreifer ein Konto anlegen und ein Authentifizierungs-Cookie erhalten und anschließend den Rest des Angriffs in derselben Reihenfolge durchführen.“

Zwar setzt die erfolgreiche Ausnutzung voraus, dass der Angreifer über ein Konto auf der Zielseite verfügt — diese Hürde entfällt durch die offene Registrierungsaktion jedoch faktisch.

Im zweiten Schritt hinterlegt der Angreifer ein präpariertes serialisiertes Objekt in seinem Profil und schleust es über eine manipulierte Spende in die Sitzungsdatenbank des Plugins ein. „Der Server schreibt das Gadget-Objekt in wp_give_sessions, bevor er einen HTTP-500-Fehler zurückgibt“, beschreibt George Johnstone, Sicherheitsforscher bei Patchstack, diesen Vorgang.

Anzeige

Den Abschluss bildet der Aufruf einer beliebigen Seite im Frontend mit dem zuvor erhaltenen Authentifizierungs-Cookie: Der Server deserialisiert das Gadget und führt den Befehl des Angreifers aus.

Für die Versionen 4.16.6 bis 4.16.7.1 gilt eine Einschränkung: Hier ist die Ausnutzung nur möglich, wenn die Website ein älteres Spendenformular ohne ‚formBuilderSettings‘ enthält. Patchstack weist darauf hin, dass solche Bedingungen durchaus verbreitet sein können — etwa bei aktualisierten Installationen, auf Websites, die den optionsbasierten Formular-Editor des Plugins nutzen, oder beim Import beziehungsweise der Wiederherstellung älterer Formulare.

GiveWP hat die Schwachstelle mit Version 4.16.7.2 behoben. Der Hersteller blockiert dort serialisierte Daten während der Spendenverarbeitung und schränkt die Objekterzeugung an mehreren Deserialisierungspunkten ein. Zusätzlich entfernt das Sicherheitsupdate serialisierte Objekt-Payloads, die bereits in betroffenen Datenbanken abgelegt wurden.

Ein Detail bleibt allerdings bestehen: Nach Angaben von Patchstack berücksichtigt die Registrierungsaktion von GiveWP die WordPress-Einstellungen zur Nutzerregistrierung weiterhin nicht. Für eine Codeausführung lässt sich dieser Umstand nach dem Update jedoch nicht mehr ausnutzen.

GiveWP war bereits im vergangenen Jahr Ziel von Angreifern, die darüber indirekt in Pi-hole eindrangen — einen verbreiteten Werbeblocker auf Netzwerkebene. Dabei wurden Namen und E-Mail-Adressen von 30.000 Spendern offengelegt.