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-33146 — Uma partilha pública parecia limpa na árvore de páginas, mas o endpoint de busca contou uma história diferente. No Docmost, páginas filhas restringidas, ocultas dos visualizadores de partilha pública, ainda podiam ser expostas através dos resultados de busca da partilha pública. | Kitploit
Ferramentas/GitHubGitHub/0xmrma/cve-2026-33146
Análise de VulnerabilidadesColeta de InformaçõesSegurança WebTestes de PenetraçãoPapers e PesquisaAprendizado e Educação
GitHub0xmrma/cve-2026-33146

CVE-2026-33146

Uma partilha pública parecia limpa na árvore de páginas, mas o endpoint de busca contou uma história diferente. No Docmost, páginas filhas restringidas, ocultas dos visualizadores de partilha pública, ainda podiam ser expostas através dos resultados de busca da partilha pública.

Ver Repositório
2há 2 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-33146

Um compartilhamento público parecia limpo na árvore de páginas, mas o endpoint de busca contava uma história diferente. No Docmost, páginas filhas restritas, ocultas dos visualizadores de compartilhamento públicos, ainda podiam vazar por meio dos resultados de busca do compartilhamento público.

Introdução

Encontrei esse problema ao revisar o Docmost, uma plataforma colaborativa de wiki e documentação de código aberto, com uma pergunta muito simples em mente:

Se uma página é intencionalmente ocultada de um visualizador de compartilhamento público, todos os recursos públicos respeitam essa mesma restrição de limite?

Neste caso, a resposta foi não.

Uma página filha restrita podia permanecer oculta na árvore de compartilhamento público enquanto ainda vazava pelo endpoint de busca do compartilhamento público.

O problema foi aceito e recebeu CVE-2026-33146.

Docmost: Docmost no GitHub
CVE: CVE-2026-33146

O site oficial do Docmost o apresenta como uma wiki local pronta para empresas, com mais de 3 milhões de downloads, e afirma que é confiável por equipes em organizações como Vilnius City, Bechtle, o Governo Australiano, a Cruz Vermelha e ETS Quebec.

photo0

Cadeia de Ataque

compartilhamento público pai com subpáginas ativadas → descendente restrito omitido da árvore pública → atacante consulta busca do compartilhamento público → título e trecho da filha restrita vazam


O que o Docmost Faz

Docmost é uma plataforma colaborativa de wiki e documentação.

Ela oferece:

  • páginas compartilhadas
  • links de compartilhamento público
  • árvores de páginas aninhadas
  • organização de conteúdo em workspaces e espaços
  • busca em conteúdo compartilhado

Isso significa que seu modelo de compartilhamento público é uma fronteira de segurança real.

A questão importante aqui não era se o Docmost pode compartilhar páginas publicamente.

A verdadeira questão era:

Quando o Docmost decide que uma página descendente é restrita e não deve aparecer para um visitante de compartilhamento público, essa restrição é respeitada em todos os lugares do fluxo de compartilhamento público?

Neste caso, não foi.


Por Que Esse Bug Valia a Pena Ser Analisado

Muitas revisões de segurança param cedo demais ao ver uma página oculta na interface.

Isso não é suficiente.

A questão mais forte é esta:

Todo caminho de backend impõe a mesma decisão de visibilidade?

Isso importa porque os limites de segurança não são definidos pela aparência da interface.
Eles são definidos pelo que o servidor realmente retorna.

Aqui, o endpoint da árvore pública se comportou de forma segura:

  • descendentes restritos foram ocultados

Mas o caminho de busca do compartilhamento público se comportou de forma diferente:

  • descendentes restritos ainda influenciavam os resultados
  • seus títulos vazaram
  • seus trechos de conteúdo destacado vazaram

Isso tornou essa uma questão real de autorização e divulgação de informações, não apenas uma inconsistência de apresentação.


O Limite em que Foquei

Não abordei o Docmost testando rotas aleatoriamente na esperança de algo interessante aparecer.

O caminho mais forte foi escolher um limite de confiança primeiro.

Para aplicações que suportam:

  • compartilhamento público
  • objetos aninhados
  • restrições por página
  • busca de conteúdo

uma das melhores perguntas a fazer é:

A camada de busca aplica exatamente o mesmo limite de autorização que a camada de navegação?

Essa pergunta se torna especialmente valiosa quando:

  • um objeto pai é público
  • descendentes têm regras de visibilidade diferentes
  • a busca é implementada por meio de um caminho de serviço separado

Foi exatamente aí que esse problema apareceu.


Causa Raiz

O bug não foi que o Docmost falhou em ocultar a página restrita na árvore pública normal.

O bug foi que a busca pública não honrava essa mesma lógica de restrição.

Da revisão do código-fonte, o fluxo da árvore pública usava travessia de descendentes com consciência de restrição.

Área relevante:

  • apps/server/src/core/share/share.service.ts

Esse caminho intencionalmente excluía descendentes restritos usando:

  • getPageAndDescendantsExcludingRestricted(...)

Mas o fluxo de busca do compartilhamento público seguia um caminho diferente.

Áreas relevantes:

  • apps/server/src/core/search/search.controller.ts
  • apps/server/src/core/search/search.service.ts

Lá, o código coletava descendentes usando:

  • getPageAndDescendants(...)

Isso significava que descendentes restritos permaneciam no escopo para a busca.

No contexto de compartilhamento público, isso importa muito porque o ramo de busca é executado sem um contexto de permissão de usuário autenticado normal. Então, uma vez que descendentes restritos eram incluídos no conjunto de páginas buscáveis, seus metadados podiam vazar através da resposta.

Por que isso é explorável

Porque o atacante não precisa de uma conta autenticada.

Ele precisa apenas:

  • de uma chave de compartilhamento público válida
  • de subpáginas incluídas no compartilhamento
  • conhecimento ou palpites sobre termos de busca que provavelmente aparecerão em descendentes ocultos

Uma vez que essa condição existe, um visitante público pode consultar o endpoint de busca do compartilhamento e recuperar:

  • títulos de páginas ocultas
  • trechos de corpo destacados
  • prova de que uma página filha restrita existe sob o pai compartilhado

Isso é suficiente para criar um vazamento de confidencialidade, mesmo que o corpo completo da página não seja retornado.


O Que Torna Isso um Problema de Segurança, Não Apenas Comportamento Diferente de Endpoint

A distinção importante é que a aplicação já sinaliza o modelo de segurança pretendido claramente.

O endpoint da árvore pública oculta descendentes restritos.

Portanto, a verdadeira pergunta não é:

“A busca por acaso retorna um conjunto de resultados mais amplo?”

A verdadeira pergunta é:

“A busca está violando uma decisão de autorização já aplicada em outro lugar para o mesmo limite de compartilhamento público?”

No Docmost, estava.

Isso transforma isso de:

  • funcionalidade inconsistente

em:

  • aplicação inconsistente de controle de acesso

Por isso isso é uma vulnerabilidade real.


PoC

Validei o problema comparando os dois endpoints públicos relevantes lado a lado.

Caso 1: Árvore pública oculta corretamente a filha restrita

Primeiro, testei o endpoint normal da árvore pública usando a chave de compartilhamento público.

Exemplo de requisição:

root@kitploit:~
POST /api/shares/tree HTTP/1.1
Host: 127.0.0.1:6752
Content-Type: application/json

{
  "shareId": "public-share-key"
}

A resposta retornou apenas a página filha pública na árvore de páginas.

Resultado representativo:

root@kitploit:~
{
  "pageTree": [
    {
      "id": "public-child",
      "title": "Public roadmap"
    }
  ]
}

Isso estabeleceu o comportamento esperado do produto:

  • a filha restrita foi intencionalmente ocultada do visitante público

Caso 2: Busca do compartilhamento público ainda vaza a filha restrita

Então consultei o endpoint de busca do compartilhamento público usando um termo que aparecia dentro do descendente restrito.

Exemplo de requisição:

root@kitploit:~
POST /api/search/share-search HTTP/1.1
Host: 127.0.0.1:6752
Content-Type: application/json

{
  "shareId": "public-share-key",
  "query": "salary"
}

A resposta incluiu a filha restrita mesmo assim:

root@kitploit:~
{
  "items": [
    {
      "id": "public-child",
      "title": "Public roadmap",
      "highlight": "release plan and milestones"
    },
    {
      "id": "restricted-child",
      "title": "Payroll Q4",
      "highlight": "salary bands and bonus targets"
    }
  ]
}

Isso provou a afirmação central:

  • a filha restrita estava oculta na árvore pública
  • mas ainda vazava pela busca do compartilhamento público

Por Que as Duas Reproduções Importam

A parte mais forte desse problema não é a segunda requisição por si só.

É o contraste entre os dois endpoints.

Primeiro

Mostra que o produto já tem um modelo de restrição pretendido para compartilhamentos públicos.

O descendente restrito não deveria ser visível para o visitante público.

Segundo

Prova que o caminho de busca quebra exatamente esse mesmo limite.

Isso torna o problema mais difícil de ser descartado como comportamento de busca esperado ou lacuna de documentação.

A própria aplicação estabelece a regra através da resposta da árvore, depois a viola através da resposta da busca.

Isso é uma evidência poderosa.


O Que o Vazamento Realmente Dá a um Atacante

Este problema não expõe conteúdo arbitrário em todo o workspace.

Seu escopo é mais restrito do que isso.

Mas dentro da subárvore de compartilhamento público afetada, ainda dá a um atacante conhecimento não autorizado útil:

  • títulos de documentos ocultos
  • trechos destacados de conteúdo oculto
  • confirmação de que descendentes restritos existem
  • pistas sobre folha de pagamento, jurídico, planejamento, credenciais ou operações internas, dependendo do conteúdo do documento

Mesmo trechos curtos podem importar.

Um título como:

  • folha de pagamento
  • plano de contratação
  • minuta jurídica
  • incidente com cliente
  • rotação de credenciais

já cria valor de segurança para um atacante.

Portanto, embora tenha sido classificado como Moderado, ainda é um problema válido de confidencialidade com uma quebra de limite limpa e defensável.


Gravidade e Classificação

Este problema recebeu:

  • CVE-2026-33146

A gravidade do aviso foi:

  • Moderada
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:N/A:N

Essa pontuação reflete um vazamento de confidencialidade mais restrito, em vez de acesso total não autorizado a documentos.

O ponto importante é que o problema ainda é válido.

A alegação aqui não é:

  • leitura completa da página
  • divulgação arbitrária do workspace
  • impacto na integridade
  • impacto na disponibilidade

A alegação é:

  • um visitante de compartilhamento público pode recuperar metadados de uma página filha restrita que o produto intencionalmente oculta em outro lugar no mesmo fluxo de compartilhamento público

Isso é uma divulgação real de informações relacionadas à autorização.


Por Que Isso Ainda Valia a Pena Ser Reportado

Algumas pessoas descartam vazamentos de metadados rápido demais.

Isso é um erro.

A verdadeira questão é se os dados vazados cruzam um limite pretendido.

Aqui, cruzaram.

Se a aplicação diz:

  • esta filha restrita não deve ser visível para visualizadores de compartilhamento público

mas um endpoint público ainda revela:

  • seu título
  • parte de seu conteúdo

então o modelo de confidencialidade falhou, mesmo que o impacto seja limitado.

Isso torna o relato válido.

Bugs limpos, escopados e reproduzíveis como este são exatamente o tipo de problema que ajuda a demonstrar um bom julgamento em revisão de segurança.


Análise da Correção

A direção de correção mais segura é fazer a busca pública usar a mesma lógica de descendentes com consciência de restrição que o fluxo da árvore pública.

Na prática, isso significa que o ramo de busca do compartilhamento não deve enumerar descendentes com:

root@kitploit:~
getPageAndDescendants(...)

Ele deve se alinhar com a travessia mais segura de compartilhamento público e usar:

root@kitploit:~
getPageAndDescendantsExcludingRestricted(...)

Uma correção alternativa seria manter a enumeração mais ampla e então filtrar explicitamente os descendentes restritos antes que a consulta de busca retorne resultados.

Mas o design mais limpo é simples:

o limite da busca deve corresponder ao limite da navegação

Essa foi a propriedade de segurança que falhou.


Divulgação

Este problema foi reportado privadamente através do fluxo de relatórios de segurança do GitHub.

O relatório mostrou:

  • o comportamento seguro pretendido via /api/shares/tree
  • o comportamento vulnerável inconsistente via /api/search/share-search
  • a causa subjacente ao nível do código-fonte
  • um caminho de reprodução concreto

O problema foi aceito e recebeu:

CVE-2026-33146

A gravidade final do aviso foi Moderada, o que se encaixa melhor no escopo mais restrito de vazamento do que uma alegação de criticidade mais ampla teria.

Isso não enfraquece a validade da descoberta.

Apenas define seu impacto de forma mais precisa.


O Que Este Bug Realmente Ensina

A lição principal aqui é simples:

esconder algo em um endpoint público não é suficiente se outro endpoint público ainda o revela.

Muitos desenvolvedores pensam em autorização apenas no caminho de renderização óbvio:

  • árvore de páginas
  • visualização de página
  • interface principal

Mas o verdadeiro limite é mais amplo.

Você também precisa perguntar:

  • a busca respeita as mesmas regras?
  • os canais laterais respeitam as mesmas regras?
  • as respostas de metadados respeitam as mesmas regras?

No Docmost, a resposta foi não.

Essa é a verdadeira conclusão.


Pontos Principais

  • recursos de compartilhamento público devem aplicar o mesmo modelo de visibilidade nos caminhos de navegação e busca
  • vazamentos de metadados ainda importam quando cruzam um limite de autorização pretendido
  • a comparação lado a lado de endpoints torna essa classe de problema muito mais forte
  • descendentes restritos nunca devem permanecer buscáveis se estiverem ocultos do mesmo visualizador público
  • escopo restrito não torna um bug válido indigno de ser reportado
  • uma boa revisão de segurança muitas vezes se trata de testar consistência, não apenas encontrar crashes ou bypasses completos

Palavras Finais

Esta vulnerabilidade não foi sobre payloads chamativos ou cadeias de exploração complexas.

Foi sobre fazer uma pergunta prática de limite de confiança.

O Docmost escondeu a página restrita em um lugar.
Depois a vazou em outro.

É por isso que isso se tornou CVE-2026-33146.

Baixar ferramenta