Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
drupal-openai-provider-ssrf-cve-2026-13233 — CVE-2026-13233 (Drupal OpenAI Provider, SA-CONTRIB-2026-053): SSRF via URL de resposta / leitura de arquivo local. Upstream não confiável, não o prompt. Reprodução segura + detecções. Corrigido em 1.1.1/1.2.2. | Kitploit
Ferramentas/GitHubGitHub/kuninogu/drupal-openai-provider-ssrf-cve-2026-13233
Análise de VulnerabilidadesSegurança WebAprendizado e Educação
GitHubkuninogu/drupal-openai-provider-ssrf-cve-2026-13233

drupal-openai-provider-ssrf-cve-2026-13233

CVE-2026-13233 (Drupal OpenAI Provider, SA-CONTRIB-2026-053): SSRF via URL de resposta / leitura de arquivo local. Upstream não confiável, não o prompt. Reprodução segura + detecções. Corrigido em 1.1.1/1.2.2.

Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
24há 3 mesesAinda não revisado

Drupal OpenAI Provider — SSRF / leitura de arquivo local via URL de resposta (CVE-2026-13233)

Upstream não confiável: o provedor buscava a URL indicada pela resposta do upstream. Drupal OpenAI Provider (ai_provider_openai) · SSRF (CWE-918) · CVE-2026-13233 · SA-CONTRIB-2026-053

Status: Divulgação coordenada concluída (2026-07-10). Reportado em privado à Equipe de Segurança do Drupal, corrigido e publicado como CVE-2026-13233 / advisory SA-CONTRIB-2026-053 (avaliado como Moderadamente crítico). Autor creditado como descobridor e desenvolvedor da correção.

Um estudo de um defeito clássico de autorização / validação de entrada em um "ponto de conexão" de IA: um provedor de geração de imagens por IA buscava a URL contida na resposta da API upstream usando uma função de propósito geral sem allowlist de esquema. Em implantações onde o upstream configurado não é o padrão confiável (bring-your-own-endpoint / proxy / gateway auto-hospedado / relay comprometido), a resposta poderia apontar o servidor para file:// ou um endereço interno.

A entrada não confiável que chega ao sink é a URL da resposta do upstream — não o prompt do usuário.

  • Classe (publicada): SSRF (CWE-918). A SSRF incluía uma leitura de arquivo local via file://; a análise interna do autor também a mapeou para CWE-73 / CWE-441.
  • Severidade: Drupal Moderadamente crítico (SA-CONTRIB-2026-053) — uma faixa média na escala do Drupal ≈ CVSS Médio; não CVSS Crítico/Alto. Autoavaliação do autor antes da divulgação: piso 3.1 / condicional 5.3 (Médio); pontuações anteriores 6.5 / 7.4 retratadas, e a classificação média confirmou isso.
  • Afetados: Drupal OpenAI Provider (ai_provider_openai) < 1.1.1 e 1.2.0–1.2.1 (auditado 1.2.1) no Drupal core 11.2
  • Corrigido em: 1.1.1 / 1.2.2 · CVE: CVE-2026-13233 · Advisory: https://www.drupal.org/sa-contrib-2026-053

O que foi demonstrado (confirmado) vs. o que não foi (não verificado)

Toda a verificação foi executada em um sandbox próprio, isolado de rede, contra um upstream mock. A API real da OpenAI nunca foi chamada. Os oráculos de vazamento foram apenas sintéticos.

Confirmado (demonstrado dinamicamente):

  • Gatilho de não-admin → leitura no lado do servidor de um arquivo local escolhido pelo upstream (caminho arbitrário comprovado com um marcador único por execução; o corpo servido é byte-a-byte igual ao marcador; o marcador está presente apenas no contêiner do app, ausente no mock — descartando "o mock retornou o próprio arquivo").
  • Leitura de settings.php confirmada por byte-match sha256 (35.182 B) — conteúdo nunca impresso; credenciais de banco de dados estão, portanto, em escopo.
  • SSRF HTTP interna: recuperação de resposta de um serviço sem porta pública (token interno com byte-match).
  • Limite de autorização: a mesma conta recebe 403 na rota admin de configuração (contraste 200-vs-403).
  • Alcance de HTTP legítimo por meio de um fluxo realista de widget de campo "Generate" configurado por admin, por um editor sem permissões de IA.

Não verificado (explicitamente não reivindicado):

  • Roubo de credenciais de metadata de nuvem (IMDS) — mecanicamente plausível a partir do mesmo sink, não tentado.
  • Alcance dinâmico do gêmeo na classe base — sobrescrito neste provedor (código morto para este alvo); registrado como uma variante de mesma causa-raiz para portar a correção, não uma reivindicação separada.
  • Disparo passivo do automator "apenas salvar" — testado, negativo. "Apenas salvar" não o aciona.
  • XSS armazenado (confusão de content-type) e condição de corrida em speech-to-text — pistas separadas, não comprovadas.

Não afetado: o api.openai.com padrão via TLS. A configuração host é controlada por admin / config-sync / deploy — um atacante não-admin em tempo de execução não pode alterá-la.


Causa-raiz e direção da correção (resumo)

A URL da resposta era passada para um fetch de propósito geral que honra todos os stream wrappers registrados no PHP (file, php, http, data, phar, …). response_format tem como padrão url, então o branch vulnerável é o caminho padrão. file:// é o stream wrapper de filesystem padrão do PHP e não é controlado por allow_url_fopen (uma afirmação anterior de que "exige allow_url_fopen" estava errada e foi retratada).

Corrija a primitiva, não apenas o ponto de chamada:

  1. Pare de usar um fetch de propósito geral para recuperação remota; use o cliente HTTP-only injetado.
  2. Valide se o esquema é http/https antes da requisição; desabilite redirecionamentos (um 30x pode saltar para file://).
  3. Defesa em profundidade: rejeite hosts resolvidos privados/link-local/loopback, ou restrinja ao(s) host(s) de CDN de imagens configurado(s); valide tamanho / content-type / decodificação de imagem.
  4. Porte a mesma correção para a classe base para que provedores irmãos a herdem (caso contrário, correção incompleta).
  5. Testes de regressão são primeiro os casos de negação: file://…, http://169.254.169.254/… e um redirecionamento 302→file:// devem ser todos recusados.

Direção completa: docs/fix-direction.md.


Estrutura de diretórios

.
├── README.md                          # este arquivo (inglês, canônico)
├── README_ja.md                       # espelho em japonês
├── SECURITY.md                        # política de reporte + aviso de divulgação responsável
├── .gitignore                         # impede que segredos / evidências primárias sejam commitados
├── docs/
│   └── fix-direction.md               # correção da causa-raiz + caça a variantes + esboço de diff mínimo (EN)
├── reproducer/                        # apenas reprodutor SEGURO (sandbox, upstream mock, oráculo benigno)
│   ├── README.md                      # como montar o sandbox isolado de rede
│   ├── verdict.md                     # o que "sucesso" significa: byte-match + 200-vs-403 + códigos de saída
│   ├── mock-openai-server.py          # mock benigno; PNG de happy-path padrão, ssrf_demo → apenas file:///etc/hostname
│   └── docker-compose.yml             # MODELO: sandbox Drupal isolado + mock (você adiciona o alvo vulnerável)
├── detections/
│   ├── README.md
│   ├── sigma/web-egress-to-internal-after-imagegen.yml
│   ├── sigma/php-sensitive-file-open.yml
│   ├── sentinel/imagegen-egress-correlation.kql
│   └── splunk/imagegen-content-type-mismatch.spl
└── timeline.md                        # linha do tempo da divulgação (fonte única da verdade)

A documentação está atualmente em japonês (.ja.md); traduções canônicas em inglês são um TODO. Retido deste repositório: payloads de armamento e qualquer PoC turnkey de leitura de arquivos. O reproducer/ público demonstra o mecanismo do defeito contra um mock usando um único oráculo benigno (/etc/hostname) — sem leitura de caminho arbitrário, sem captura de settings.php, sem IMDS. Não é uma arma contra sites ativos. Atualize para 1.1.1 / 1.2.2.


Reprodutor seguro

Objetivo: permitir que um pesquisador confirme a classe do defeito sem fornecer um exploit para alvo ativo ou expor segredos. Tudo roda offline.

Baixar ferramenta