
Proof-of-Concept und technische Analyse für CVE-2026-12227, eine unauthentifizierte LFI im WordPress Visual Composer Plugin (<=45.16.0), die Dateieinbindung und RCE ermöglicht.
CVE-2026-12227 ist eine kritische (CVSS 9,8) nicht authentifizierte Local File Inclusion (LFI)-Schwachstelle im Visual Composer Website Builder-Plugin für WordPress, die alle Versionen bis einschließlich 45.16.0 betrifft. Der Fehler liegt im Parameter vcv-template, der es einem Angreifer ermöglicht, beliebige Dateien auf dem Server einzubinden und auszuführen. Dies kann zur Offenlegung sensibler Daten, zur Umgehung von Zugriffskontrollen oder sogar zur vollständigen Remote Code Execution (RCE) führen, wenn die Serverumgebung falsch konfiguriert ist.
CVE-2026-12227
9,8/10
Visual Composer Website Builder Plugin (bis Version 45.16.0)
Ursache: Die Schwachstelle ist als CWE-98 klassifiziert: Unsachgemäße Kontrolle des Dateinamens für Include/Require-Anweisungen in PHP-Programmen (oft als PHP Remote File Inclusion bezeichnet). Sie resultiert aus einem Logikfehler in der Datei PageTemplatesController.php, genauer gesagt in der Funktion viewPageTemplate(), die sich in den template_include-Filter von WordPress mit Priorität 11 einhängt, ohne jegliche Authentifizierungsprüfung.
Das Kernproblem ist ein "Validieren-dann-Mutieren"-Fehler:
Validierung (auf Rohdaten): Der Code ruft zunächst die Funktion validate_file() von WordPress auf den rohen, vom Benutzer gelieferten Wert des Parameters vcv-template auf. Diese Funktion ist darauf ausgelegt, Pfade mit literalen Directory-Traversal-Sequenzen wie .. abzulehnen. Zu diesem Zeitpunkt enthält die bösartige Eingabe theme:.theme:./.theme:./.theme:./wp-links-opml.php keine literalen .., sodass sie die Validierung besteht.
Mutation (nach der Validierung): Unmittelbar nach der Validierung prüft der Code, ob der Template-Typ vc-custom-layout ist und ob der Wert die Zeichenkette theme: enthält. Wenn ja, führt er str_replace('theme:', '', $current['value']) aus, wodurch alle Vorkommen von theme: aus dem Wert entfernt werden.
Sink: Der mutierte Wert wird dann an locate_template() übergeben, das den Pfad auflöst und die Datei einbindet. Da die theme:-Zeichenketten entfernt wurden, werden die fragmentierten Traversal-Sequenzen miteinander verschmolzen und bilden einen gültigen Pfad wie ../../../../wp-links-opml.php, der in seiner endgültigen Form nie validiert wurde.
Angriffsfläche: Angriffsvektor: Netzwerk (AV:N) — die Schwachstelle ist direkt über HTTP/HTTPS erreichbar.
Authentifizierung: Keine erforderlich (PR:N) — es handelt sich um eine nicht authentifizierte Schwachstelle. Jeder entfernte Angreifer kann sie ohne gültiges Konto auslösen.
Benutzerinteraktion: Keine erforderlich (UI:N).
Betroffene Komponente: Das Visual Composer Website Builder-Plugin für WordPress.
Anfälliger Parameter: Der Parameter vcv-template, verwendet in Verbindung mit dem Parameter vcv-template-type.
Auslösebedingung: Das Plugin muss auf einer WordPress-Seite installiert und aktiv sein, und eine Front-End-Seite muss mit Visual Composer erstellt worden sein (d. h. ein normaler Permalink muss existieren).
Ausnutzungshinweise: Auswirkung: Der Fehler ermöglicht es einem nicht authentifizierten Angreifer, beliebige lokale Dateien auf dem Server einzubinden und auszuführen. Da eingebundene PHP-Dateien ausgeführt werden, kann dies zu Remote Code Execution (RCE) führen, was eine vollständige Kompromittierung der Vertraulichkeit, Integrität und Verfügbarkeit des Servers ermöglicht.
Ausnutzungstechnik: Angreifer können dies ausnutzen, indem sie einen bösartigen vcv-template-Wert erstellen, der das theme:-Präfix verwendet, um die Validierung zu umgehen, wie in der Ursache beschrieben. Eine Anfrage könnte beispielsweise so aussehen: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
RCE-Eskalation: Während die LFI selbst kritisch ist, hängt das Erreichen von RCE oft von der Serverumgebung ab. Eine gängige Methode besteht darin, eine Datei einzubinden, die bereits auf den Server hochgeladen wurde (z. B. eine scheinbar harmlose Bilddatei mit eingebettetem PHP-Code), oder andere Server-Fehlkonfigurationen auszunutzen.
PoC-Verfügbarkeit: Mehrere Proof-of-Concept-Exploits sind öffentlich verfügbar, darunter ein Python-Skript und ein Nuclei-Template, die zur Validierung in einer autorisierten Laborumgebung verwendet werden können
[*] Python-Code oben angegeben
Patch-Version: 45.16.1