Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
linux-entra-sso-PoC — PoC — erro de validação de origem que permite a exfiltração do cookie SSO PRT do Entra ID no linux-entra-sso (GHSA-g9vc-5j77-f2cm, CVE-2026-87005, CVSS 5.3). | Kitploit
Ferramentas/GitHubGitHub/squeeze440/linux-entra-sso-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebColeta de InformaçõesSegurança WebTestes de PenetraçãoAutenticaçãoPapers e Pesquisa
GitHub
squeeze440/linux-entra-sso-poc

linux-entra-sso-PoC

PoC — erro de validação de origem que permite a exfiltração do cookie SSO PRT do Entra ID no linux-entra-sso (GHSA-g9vc-5j77-f2cm, CVE-2026-87005, CVSS 5.3).

Ver Repositório
12há 20 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

Resumo

Status da CVE: solicitada, aguardando atribuição. Esta descoberta é publicada como GHSA-g9vc-5j77-f2cm. Após a atribuição da CVE, este repositório é renomeado para CVE-YYYY-NNNNN-linux-entra-sso-PoC e este banner é substituído pelo link da CVE.

PesquisadorDostxodjayev Abdullox (@squeeze440)
AvisoGHSA-g9vc-5j77-f2cm
CVSS 3.15.3 (Médio)
FraquezaCWE-346, CWE-20

Resumo

Platform.SSO_URL em linux-entra-sso não possui um separador de caminho à direita, portanto a proteção onBeforeSendHeaders do Firefox/Thunderbird (e.url.startsWith(Platform.SSO_URL)) é contornada por qualquer domínio registrado pelo atacante no formato login.microsoftonline.com.<attacker-domain>, fazendo com que a extensão adquira e injete um cookie SSO de Primary Refresh Token (PRT) do Entra ID ativo em requisições enviadas ao próprio host do atacante.

Produto

siemens/linux-entra-sso — Plugin de navegador para Linux para SSO no Microsoft Entra ID através do Microsoft Identity Broker local (Intune). A versão para Firefox é praticamente explorável; o Thunderbird compartilha o caminho de código vulnerável idêntico, mas atualmente não é alcançável por este vetor (ver Detalhes); Chrome/Chromium não é afetado (ver Detalhes).

Versão Testada

v1.10.0 (commit 676854c, main atual em 2026-08-03). Confirmado presente na versão atual, ou seja, não corrigido por GHSA-52rj-42vh-2rxc / CVE-2026-42177 (aquela correção tocou apenas o adaptador declarativeNetRequest do Chrome).

CVSS v3.1 Estimado

5.3 (Médio) — CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N

  • AC:H — a exploração requer que a extensão possua uma permissão de host concedida que cubra o hostname elaborado pelo atacante. Na prática, o atacante deve enganar a vítima para que ela clique no link "Background SSO (enable)" da extensão enquanto estiver na página do atacante — uma condição fora do controle direto do atacante, correspondendo à justificativa de complexidade usada para o GHSA-52rj-42vh-2rxc irmão.
  • UI:R — a concessão de permissão é um clique explícito do usuário.
  • C:H — um cookie SSO PRT roubado é diretamente reproduzível contra login.microsoftonline.com para emitir tokens de acesso/ID para qualquer aplicativo que a vítima tenha consentido (sequestro completo da sessão SSO).
  • I:N/A:N — o bug divulga uma credencial, mas não modifica dados nem disponibilidade por si só.

Detalhes

Causa raiz — src/platform.js:9:

static SSO_URL = "https://login.microsoftonline.com";

Sem / à direita.

Verificação vulnerável — platform/firefox/js/platform-firefox.js:55-59:

async #onBeforeSendHeaders(e) {
    // filter out requests that are not part of the OAuth2.0 flow
    if (!e.url.startsWith(Platform.SSO_URL)) {
        return { requestHeaders: e.requestHeaders };
    }
    ...

String.prototype.startsWith realiza uma comparação bruta de prefixo de caracteres, não uma comparação de hostname/origem. Como Platform.SSO_URL não possui um separador à direita, qualquer URL cujo host seja login.microsoftonline.com.<anything> — um nome DNS sintaticamente válido totalmente controlado pelo atacante — também satisfaz a verificação, por exemplo:

"https://login.microsoftonline.com.attacker.example/phish".startsWith("https://login.microsoftonline.com")
=> true

Esta é a mesma verificação defensiva que a própria descrição do GHSA-52rj-42vh-2rxc chamou de "a verificação defensiva canônica ... ausente do adaptador do Chrome" — ela existe aqui, mas é ela própria contornável, então a correção do aviso (que apenas reforçou a regra declarativeNetRequest do Chrome) deixou este caminho aberto. platform/thunderbird/js/platform-thunderbird.js estende PlatformFirefox sem sobrescrever update_request_handlers() ou #onBeforeSendHeaders, então o Thunderbird herda a mesma falha.

Caminho de disparo (update_request_handlers, platform/firefox/js/platform-firefox.js:36-53): o listener é registrado com urls: this.well_known_app_filters, que é populado a partir de chrome.permissions.getAll().origins (src/platform.js:78-79, update_host_permissions()). Qualquer permissão de host que o usuário tenha concedido — incluindo uma concessão de site único através do link "Background SSO (enable)" do popup (popup/menu.js:171-260, usando current_filter = "https://" + tab_hostname + "/*" derivado da aba ativa) — é suficiente para registrar o listener para aquele host exato. Nenhuma permissão catch-all https://*/* é necessária, ao contrário do pré-requisito de exploração descrito no GHSA-52rj-42vh-2rxc; uma única concessão direcionada no próprio domínio sósia do atacante é suficiente aqui, o que é um obstáculo menor do que o PoC do aviso anterior.

Sink — mesmo arquivo, linhas 60-70:

let prt = await this.#broker.acquirePrtSsoCookie(this.account, e.url);
ssoLog("inject PRT SSO into request headers");
e.requestHeaders.push({ name: prt.cookieName, value: prt.cookieContent });

e.url (a URL completa do atacante) é passada diretamente como ssoUrl para o broker nativo. linux-entra-sso.py:27-30 documenta que o backend do broker da Microsoft não valida ssoUrl no lado do servidor ("o valor correto não é verificado ... pelo backend de autorização"), então um cookie é emitido independentemente, e é injetado nos cabeçalhos da requisição que realmente vai para o próprio host do atacante — uma exfiltração direta, não apenas um cabeçalho definido em uma requisição destinada à Microsoft.

Chrome não é afetado: platform/chrome/js/platform-chrome.js:96-99 (após a correção do GHSA-52rj-42vh-2rxc, commit 8183759) ancora com "|" + Platform.SSO_URL + "/" (âncora de início de string + barra à direita) e adiciona uma lista de permissões explícita requestDomains: [URL.parse(Platform.SSO_URL).hostname] — ambas rejeitam corretamente um host login.microsoftonline.com.attacker.example.

Thunderbird — mesmo código vulnerável, atualmente não alcançável por este vetor: platform/thunderbird/js/platform-thunderbird.js estende PlatformFirefox sem alterações, então o mesmo bypass de startsWith existe no binário da versão para Thunderbird. No entanto, platform/thunderbird/manifest.json declara apenas um "host_permissions": ["https://login.microsoftonline.com/*"] fixo, sem chave optional_host_permissions. WebExtensions só permite que chrome.permissions.request() conceda origens que estejam pré-declaradas em optional_permissions/optional_host_permissions; como o Thunderbird não declara nenhuma, o fluxo "Background SSO (enable)" do popup (popup/menu.js:259-261) não pode obter permissão para um domínio escolhido pelo atacante no Thunderbird atualmente. O bug é latente ali, não é atualmente alcançável pelo atacante, e ainda deve ser corrigido para defesa em profundidade / caso optional_host_permissions seja algum dia adicionado àquele manifesto.

Prova de Conceito

Confirmado dinamicamente o predicado vulnerável contra a constante real distribuída (importada diretamente do src/platform.js do alvo, não copiada manualmente). Script mantido em ~/engagements/linux-entra-sso/evidence/prt_bypass_poc.mjs.

$ node prt_bypass_poc.mjs
Real Platform.SSO_URL from src/platform.js: "https://login.microsoftonline.com"

Legit MS URL passes filter (expected true): true
Attacker domain-suffix URL: https://login.microsoftonline.com.attacker.example/phish
Attacker URL passes filter (SHOULD be false, is): true
Baixar ferramenta