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
Ferramentas/GitHubGitHub/sivaadityacoder/cve-2025-68621
Análise de VulnerabilidadesExploraçãoSegurança WebCriptografiaPapers e PesquisaAprendizado e Educação
GitHubsivaadityacoder/cve-2025-68621

CVE-2025-68621

PoC educacional e análise do CVE-2025-68621, um ataque de temporização no login de sincronização do Trilium Notes. Demonstra a recuperação do hash HMAC por meio de canal lateral de temporização de rede, com causa raiz, correção e detalhes de mitigação.

Ver Repositório
6há 5 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-2025-68621 — Ataque de Temporização no Trilium Notes em /api/login/sync

Gravidade: ALTA (CVSS 7.4) Software Afetado: TriliumNext/Trilium < 0.101.0 Tipo de Vulnerabilidade: CWE-208 – Discrepância de Temporização Observável Corrigido em: Trilium 0.101.0 (PR #8129) Publicado: 2026-02-06 | Reservado: 2025-12-19


Índice

  1. Minha Abordagem
  2. Causa Raiz
  3. Impacto
  4. Correção
  5. Principais Conclusões
  6. Cronologia
  7. Referências

Minha Abordagem

O Que É o Trilium Notes?

Trilium Notes é um aplicativo de anotações hierárquicas, open-source e multiplataforma, projetado para a construção de grandes bases de conhecimento pessoais. Ele oferece suporte a:

  • Um servidor auto-hospedado com o qual vários clientes podem sincronizar
  • Tipos de anotações ricos (texto, código, canvas, diagramas)
  • Uma API de script poderosa

O recurso de sincronização permite que um cliente Trilium se autentique em um servidor Trilium para que as anotações permaneçam sincronizadas entre dispositivos. Esse endpoint de sincronização é o ponto de entrada da CVE-2025-68621.

O Que É um Ataque de Temporização?

Um ataque de temporização é um ataque de canal lateral em que o atacante obtém informações secretas medindo quanto tempo um sistema leva para processar diferentes entradas.

O exemplo clássico é a comparação de strings:

"correct_password" !== "aorrect_password"   → fails at position 0 → fast
"correct_password" !== "cXrrect_password"   → fails at position 1 → slightly slower
"correct_password" !== "correct_password"   → matches fully     → slowest

A maioria das linguagens de programação compara strings caractere por caractere e para assim que encontra uma divergência (saída antecipada). Isso significa:

  • Uma tentativa que corresponde ao primeiro byte leva um pouco mais de tempo do que uma que diverge imediatamente.
  • Ao enviar milhares de tentativas e calcular a média dos tempos de resposta, um atacante pode determinar estatisticamente qual byte está correto — posição por posição — até recuperar o segredo completo.

A correção consiste em usar uma função de comparação em tempo constante que sempre inspeciona todos os bytes, independentemente de onde ocorre uma divergência.

Como a Vulnerabilidade Foi Descoberta

A vulnerabilidade foi descoberta por meio de revisão manual de código da lógica de autenticação do Trilium. O pesquisador examinou o fluxo de login de sincronização em apps/server/src/routes/api/login.ts e notou o seguinte padrão na função loginSync() (por volta da linha 111):

const documentSecret = options.getOption("documentSecret");
const expectedHash   = utils.hmac(documentSecret, timestampStr);
const givenHash      = req.body.hash;

if (expectedHash !== givenHash) {          // ← VULNERABLE LINE
    return [400, { message: "Sync login credentials are incorrect..." }];
}

O sinal de alerta é o uso do operador nativo !== do JavaScript para comparar hashes HMAC. O operador !== não é de tempo constante — ele interrompe a execução assim que encontra um caractere diferente. Como a comparação é feita com strings simples (sem usar uma função de comparação criptograficamente segura), o tempo de resposta vaza informações sobre quantos bytes iniciais da tentativa do atacante estão corretos.

O pesquisador então perguntou:

"Essa pequena diferença de temporização pode ser amplificada o suficiente, através de uma rede, para recuperar o hash HMAC completo de 44 caracteres codificado em Base64?"

A resposta acabou sendo sim — com medições repetidas suficientes e alguma análise estatística, o sinal supera o ruído.

O Algoritmo do Ataque

Quando um cliente Trilium deseja sincronizar, ele chama POST /api/login/sync com um corpo JSON como:

{
  "timestamp":   "2025-12-19T10:00:00.000Z",
  "syncVersion": 34,
  "hash":        "<HMAC-SHA256 of documentSecret + timestamp, Base64-encoded>"
}

A recuperação byte a byte funciona da seguinte forma:

For position = 0 to 43:
    For each candidate character c in charset (A-Z, a-z, 0-9, +, /, =):
        Send SAMPLES requests with hash = known_prefix + c + padding
        Record average response time
    Best character = candidate with highest average time
    Append best character to known_prefix

Após 44 iterações (uma para cada caractere Base64), o hash HMAC completo de 44 caracteres é recuperado.

Requisitos práticos:

  • >100.000 solicitações HTTP no total (50 amostras × 65 caracteres do charset × 44 posições ≈ 143.000)
  • >1.000 endereços IP de origem diferentes devido à limitação de taxa do Trilium (exige proxies rotativos ou uma botnet)
  • Baixo jitter de rede entre atacante e servidor (LAN ou conexão estável em nuvem funciona melhor)
  • Um temporizador de alta precisão (time.perf_counter() em Python oferece resolução de nanossegundos)

Prova de Conceito

Consulte poc.py para obter um PoC Python totalmente comentado.

Resumo rápido do que o PoC faz:

  1. Itera por todas as 44 posições de caracteres Base64 do hash HMAC.
  2. Para cada posição, testa todos os caracteres do alfabeto Base64 (A–Z, a–z, 0–9, +, /, =).
  3. Envia 50 solicitações HTTP POST para /api/login/sync para cada candidato e mede o tempo de resposta mediano.
  4. Seleciona o candidato com o maior tempo de resposta mediano como o caractere correto.
  5. Após recuperar todos os 44 caracteres, autentica-se com o hash recuperado.

Aviso: Este PoC é fornecido apenas para fins educacionais e para pesquisa de segurança responsável. Não o utilize contra sistemas que você não possui ou para os quais não tenha autorização explícita por escrito para testar.


Causa Raiz

Os operadores !== (e ===) do JavaScript realizam uma comparação lexicográfica com saída antecipada. A linha vulnerável em apps/server/src/routes/api/login.ts:

if (expectedHash !== givenHash) {
    return [400, { message: "Sync login credentials are incorrect..." }];
}

O comportamento de saída antecipada cria uma diferença de temporização mensurável para cada byte correspondente:

Tentativa vs. EsperadoBytes comparadosTempo
Byte 0 errado1~T
Byte 0 correto, byte 1 errado2~T + δ
Bytes 0–1 corretos, byte 2 errado3~T + 2δ
………
Todos os 44 bytes corretos44~T + 43δ

Cada byte correspondente adicional custa uma quantidade mínima extra de tempo de CPU δ. Em milhares de amostras, o tempo de resposta médio para uma tentativa com "byte N correto" é mensuravelmente maior do que para uma tentativa com "byte N incorreto", vazando informações suficientes para recuperar o hash HMAC completo caractere por caractere.

Detalhamento da Pontuação CVSS

MétricaValorMotivo
Pontuação Base7.4 ALTA
Vetor de AtaqueRede (N)Explorável pela internet
Complexidade do AtaqueAlta (H)Exige muitas solicitações + temporização estável
Privilégios NecessáriosNenhum (N)Não é necessária conta
Interação do UsuárioNenhuma (N)A vítima não precisa fazer nada
EscopoInalterado (U)Apenas o servidor Trilium é afetado
ConfidencialidadeAlta (H)Toda a base de anotações é legível
IntegridadeAlta (H)O atacante pode escrever/alterar anotações
DisponibilidadeNenhuma (N)Sem componente de negação de serviço

String do Vetor: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N


Impacto

Uma exploração bem-sucedida concede ao atacante:

Baixar ferramenta