Skip to content
KitploitKITPLOIT
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-22038 — Análise detalhada da CVE-2026-22038, uma vulnerabilidade de alta gravidade nos blocos AutoGPT Stagehand que registra chaves de API em texto simples, incluindo causa raiz, impacto e remediação. | Kitploit
Ferramentas/GitHubGitHub/sivaadityacoder/cve-2026-22038
Análise de VulnerabilidadesAnálise de CódigoDetecção de SegredosAprendizado e EducaçãoAnálise de Logs
GitHubsivaadityacoder/cve-2026-22038

CVE-2026-22038

Análise detalhada da CVE-2026-22038, uma vulnerabilidade de alta gravidade nos blocos AutoGPT Stagehand que registra chaves de API em texto simples, incluindo causa raiz, impacto e remediação.

Ver Repositório
há 4 mesesAinda não revisado

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

CVE-2026-22038 — Blocos Stagehand do AutoGPT Registram Chaves de API em Texto Puro

ID do CVE: CVE-2026-22038
Produto: Plataforma AutoGPT (integração Stagehand)
Versões Afetadas: Todas as versões até e incluindo autogpt-platform-beta-v0.6.45
Corrigido Em: autogpt-platform-beta-v0.6.46
Tipo de Vulnerabilidade: CWE-532 — Inserção de Informações Sensíveis em Arquivo de Log
Gravidade: Alta
Reportado Por: Panuganti Siva Aditya (@sivaadityacoder)
Data do Relatório: 19 de dezembro de 2025
Aviso do GitHub: GHSA-rc89-6g7g-v5v7


Minha Abordagem

O AutoGPT é uma plataforma de código aberto que permite aos usuários criar e executar agentes de IA autônomos. Ela inclui uma integração Stagehand que se conecta a provedores de automação de navegador e LLM como OpenAI, Anthropic e Groq.

Durante uma revisão de código dos blocos Stagehand, notei que objetos de credenciais eram passados diretamente para chamadas logger.info(). Rastreei cada instrução de log e descobri que estava sendo chamado inline — contornando explicitamente a proteção que o Pydantic fornece.

.get_secret_value()
SecretStr

O arquivo vulnerável:

root@kitploit:~
autogpt_platform/backend/backend/blocks/stagehand/blocks.py

Três blocos são afetados, cada um com o mesmo padrão:

StagehandObserveBlock (Linhas 185–188)

root@kitploit:~
logger.info(f"OBSERVE: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"OBSERVE: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

StagehandActBlock (Linhas 285–288)

root@kitploit:~
logger.info(f"ACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"ACT: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

StagehandExtractBlock (Linhas 373–376)

root@kitploit:~
logger.info(f"EXTRACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"EXTRACT: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

Para confirmar a explorabilidade, executei cada bloco Stagehand com credenciais válidas e pesquisei nos logs do aplicativo:

root@kitploit:~
grep "secret:" /var/log/autogpt/application.log

A saída confirmou que chaves de API reais apareciam em texto puro:

root@kitploit:~
[INFO] OBSERVE: Model credentials: ... secret: sk-proj-abc123xyz789...
[INFO] ACT: Model credentials: ... secret: sk-ant-api03-def456uvw...
[INFO] EXTRACT: Model credentials: ... secret: sk-1234567890abcdef...

Causa Raiz

O código do AutoGPT usa corretamente o tipo SecretStr do Pydantic para chaves de API. Quando um objeto SecretStr é incluído em uma f-string ou impresso normalmente, ele é renderizado como ********** — essa proteção é intencional.

A causa raiz é que os desenvolvedores chamaram .get_secret_value() diretamente dentro das instruções logger.info(). Isso explicitamente desembrulha o segredo e passa o valor bruto da string para o logger, contornando completamente a mascaramento integrado do SecretStr.

O nível de log é INFO, o que significa que essas instruções são executadas em ambientes normais de produção — não apenas em sessões locais de depuração. Toda vez que um desses blocos é executado com credenciais, o segredo é gravado no arquivo de log.


Impacto

  • Roubo de credenciais — chaves de API em texto puro em arquivos de log, acessíveis a qualquer pessoa com acesso aos logs
  • Dano financeiro — chaves roubadas são usadas para fazer chamadas de API caras às custas da vítima
  • Acesso a dados — as credenciais roubadas podem conceder acesso aos dados da vítima nesses serviços
  • Exaustão de cota — um atacante pode deliberadamente queimar os limites de taxa para negar o serviço
  • Janela de exposição longa — arquivos de log geralmente são mantidos por 30–90 dias, então uma chave usada uma vez pode permanecer exposta por meses
  • Problemas de conformidade — registrar segredos viola os requisitos de PCI-DSS, SOC 2 e GDPR

Cenário de ataque:

  1. Um atacante obtém acesso de leitura aos arquivos de log por meio de um sistema de agregação mal configurado (Splunk, ELK, Datadog, CloudWatch), uma conta de monitoramento comprometida ou acesso interno excessivo.
  2. Ele pesquisa nos logs por padrões como secret:, sk-proj- ou sk-ant-.
  3. Ele extrai chaves de API reais da saída do log.
  4. Ele verifica a chave:
root@kitploit:~
curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer sk-proj-abc123xyz789..." \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "test"}]}'
  1. Com uma chave válida, ele pode fazer chamadas de API, drenar cotas ou acessar os dados da vítima.

Credenciais expostas: chaves de API Stagehand / Browserbase, chaves de API OpenAI, chaves de API Anthropic, chaves de API Groq e quaisquer credenciais de provedor de LLM configuradas nos blocos Stagehand.


Correção

O patch em autogpt-platform-beta-v0.6.46 remove as chamadas .get_secret_value() das instruções logger.info().

Abordagem recomendada — remover o segredo do log completamente:

root@kitploit:~
# Antes (vulnerável):
logger.info(
    f"OBSERVE: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

# Depois (corrigido):
logger.info(
    f"OBSERVE: Model credentials for provider {model_credentials.provider} (API key redacted)"
)

Alternativa — redigir, mantendo a estrutura do log intacta:

root@kitploit:~
def redact_secret(value: str) -> str:
    if len(value) <= 8:
        return "***"
    return f"{value[:4]}...{value[-4:]}"

logger.info(
    f"OBSERVE: Model credentials for provider {model_credentials.provider} "
    f"secret: {redact_secret(model_credentials.api_key.get_secret_value())}"
)

A abordagem de redação expõe apenas os primeiros e últimos 4 caracteres — o suficiente para identificar qual chave foi usada sem revelar o segredo completo.


Principais Conclusões

  1. Nunca chame .get_secret_value() em instruções de log. Se o seu framework fornece um tipo de mascaramento de segredos (SecretStr, SecretBytes, etc.), deixe-o fazer seu trabalho. Chamar o método de desembrulho dentro de um logger anula todo o propósito.

  2. INFO é registro em nível de produção. Despejos de credenciais em estilo de depuração nunca devem chegar ao nível INFO. Se você realmente precisa confirmar quais credenciais estão ativas, registre apenas metadados não sensíveis (nome do provedor, prefixo da chave, últimos 4 caracteres).

  3. Arquivos de log são uma superfície de ataque. Trate-os como qualquer outro armazenamento de dados sensíveis — restrinja o acesso, faça rotação e audite o que entra. Ferramentas de agregação (Splunk, ELK, Datadog) geralmente têm amplo acesso de leitura, então um segredo em qualquer linha de log é efetivamente um segredo nesses sistemas também.

  4. A correção é sempre mais simples que o bug. Remover duas linhas de log (ou substituí-las por equivalentes redigidos) fecha completamente essa exposição. A dívida de segurança de "registro temporário de depuração" deixado em produção é comum e prevenível com revisão de código.

  5. As proteções do SecretStr são opt-in, não automáticas. Os desenvolvedores devem entender que a proteção só se mantém enquanto ninguém desembrulha explicitamente o valor. A revisão de código deve sinalizar qualquer uso de .get_secret_value() fora do caminho de autenticação.


Linha do Tempo

DataEvento
19 de dezembro de 2025Reportado aos mantenedores do AutoGPT via Huntr e GitHub Security Advisory
2025–2026O mantenedor Nicholas Tindle reconheceu o relatório
Antes de abril de 2026Corrigido em autogpt-platform-beta-v0.6.46
25 de abril de 2026CVE-2026-22038 atribuído

Referências

  • GitHub Security Advisory GHSA-rc89-6g7g-v5v7
  • CWE-532: Inserção de Informações Sensíveis em Arquivo de Log
  • Folha de Dicas de Registro da OWASP
  • Entrada do Banco de Dados de CVEs da Trickest
Baixar ferramenta