Verifique cada condição. Os usuários são afetados quando todos os três primeiros se mantiverem. - O aplicativo deles habilita o plugin `oidc- provider` ou o plugin `mcp` do `melhor- auth/plugins`. O plugin `mcp` envolve o mesmo provedor e carrega o mesmo defeito. Ambos estão no caminho de migração para `@ better-auth/oauth- provider`, que não é afetado. - A versão de seu aplicativo ` better-auth` é ` 1.6.12 ` ou anterior na linha estável, ou qualquer ` 1.7.0 -beta` compilar na linha pré- liberação. Ambas as linhas de lançamento carregam o mesmo defeito. - A página de consentimento do aplicativo é um componente do cliente que lê `redirecionarURI` a partir do `authClient.oauth 2.consent(...)` responde e atribui a um alvo de navegação do navegador como `window.location.href`, `location.assegna' ou `location.replace`. Duas condições aumentam a exposição de um aplicativo. - Ele define ` permitindo o Registro de Clientes Dinâmicos: true`. O registro do cliente não é autenticado, para que qualquer visitante possa plantar o cliente malicioso. O padrão é "falso", que limita o plantio a usuários autenticados. - Expõe a página de consentimento a usuários finais comuns em vez de a uma audiência restrita do operador.
O aplicativo de um desenvolvedor não é afetado quando qualquer um destes segurá- lo: - O aplicativo deles copiou a demo do projeto 'Consent- buttons.tsx' textual. Esse arquivo lê um campo `uri` que este plugin nunca retorna, por isso seu ramo de navegação nunca funciona e ele cai até um toast de erro. - O aplicativo completa o fluxo de consentimento com um redirecionamento do lado do servidor, por exemplo uma ação do servidor Next.js ou Remix. Os navegadores não seguem um URL `javascript:` entregue num cabeçalho de resposta `Location`. - Seu aplicativo usa `@ better-auth/oauth- provider` em vez do plug- indefinido `oidc- provider`. 1. Atualizar para ` melhor- auth@ 1.6.13 ` (estável) ou ` 1.7.0 -Beta. 4 ` (pré- lançamento). 2. Se os desenvolvedores não puderem atualizar seus aplicativos, veja as soluções abaixo.
O plug- in depreciado `oidc- provider` registra os clientes OAuth sem validar o esquema de seus `redirect_uris`. Um atacante armazena um `javascript:` como um cliente redirecionando alvo, e o servidor de autorização mais tarde retorna aquele URI para o navegador na resposta de consentimento. Uma página de consentimento que navega até o valor devolvido executa o JavaScript do atacante na origem do servidor de autorização, o que expõe a sessão da vítima e permite a tomada de conta. O plugin `mcp` envolve o mesmo provedor e carrega o mesmo defeito, assim as implantações do servidor MCP também são afetadas; como `oidc- provider`, ele está migrando para `@ better- auth/oauth- provider`. O registro do cliente aceita qualquer string. O esquema do corpo de registro digita `redirect_uris` como `z.array(z.string())` sem cheque de esquema, então ` POST / oauth 2 /regist ` armazena um valor como `javascript:fetch('/api/auth/get- session')// `. Na configuração padrão, ` allowDynamicClientRegistration ' é `false', então o registro requer uma sessão autenticada; qualquer usuário conectado se qualifica. Com o registro dinâmico do cliente habilitado, o registro não é autenticado.
O valor perigoso então sobrevive ao fluxo do código de autorização inalterado. ` GET / oauth 2 /authorize` corresponde ao pedido `redirect_uri` contra a lista armazenada por igualdade exata de string, assim o `javascript:` URI registrado coincide com ele mesmo e é escrito no registro de verificação de consentimento. Quando o usuário aprova na tela de consentimento, o manipulador executa `novo URL(value.redirectURI)`, adiciona o código de autorização através de `searchParams.set` e retorna o resultado no JSON sob a chave `redirectURI'. O esquema `javascript:` passa por `novo URL` intacto, e um '//` na carga útil observa a string de consulta anexada. O plug- in documenta a chamada de consentimento, mas não o passo de redirecionamento que o segue, e não dá aviso de que o `redirecionamento' pode carregar um esquema perigoso. A forma natural como um operador completa o fluxo é atribuir `res.data.redirectURI` para `window.location.href`. Em função da especificação de URL e do comportamento do navegador, navegando por `window.location` para um URL `javascript:` executa o corpo do script na origem do documento atual, que aqui é o servidor de autorização. O script injetado pode chamar `/api/auth/get-session` e qualquer outro endpoint com game de sessão nessa origem.
O pacote `@ better-auth/oauth- provider` já impede isso. Ele valida o mesmo campo com os esquemas `SafeUrlSchema`, que rejeita os `javascript:`, `data:` e `vbscript:` e requer HTTPS ou um loopback host. O plug- in depreciado nunca recebeu esse controle; o campo enviado não foi validado quando o endpoint de registro foi adicionado pela primeira vez, bem antes do pacote de irmãos introduzido `SafeUrlSchema`. Corregido em ` melhor- auth@ 1.6.13 ` (estável) e ` 1.7.0 -Beta. 4 ` (pré- lançamento). A correção adiciona validação de esquema ao `redirect_uris` dos plug- in `oidc- provider` e `mcp`, combinando com o controle `@better-auth/oauth- provider` já executado.
Se os desenvolvedores não puderem atualizar, aplique um dos seguintes. - Endureça a página de consentimento. Antes de navegar, analise o valor devolvido e navegue somente quando o seu esquema for `http:` ou `https:`. Por exemplo, rejeite o valor quando `nueva URL(redirectURI).protocol` não é `http:` nem `https:`, e mostrar um erro em vez de navegar. Isto fecha o lavatório, independentemente do que o servidor retorna. - Migra para `@ better- auth/oauth- provider`. Ele valida URIs de redirecionamento no registro e é a substituição suportada para o plugin depreciado. - Manter `AllowDynamicClientRegistration` em seu padrão de `false` e restringir quem pode registrar clientes. Isto não remove o problema, porque qualquer usuário autenticado ainda pode registrar um cliente malicioso, mas remove o caminho não autenticado.
Este é um problema de scripts DOM armazenado na própria origem do servidor de autorização, o que leva à tomada de contas. Um atacante que pode registrar um cliente planta um `javascript:` redirecione URI. Uma vítima que visita a URL do atacante e aprova o consentimento executa o JavaScript do atacante na origem do servidor de autorização. A partir daí, o script lê `/ api/ auth/get- session`, chama qualquer endpoint scoped de sessão e assume a conta. A tela de consentimento mostra o nome do cliente controlado pelo atacante, o que torna a aprovação fácil de engendrar socialmente. O impacto realizado depende de uma condição prévia do lado do operador: a página de consentimento deve atribuir o `redirecionamento' devolvido a um alvo de navegação. O Auth melhor nunca executa essa navegação, razão pela qual a Complexidade de Ataque avaliada é Alta e a pontuação fica abaixo de uma falha de execução do lado do servidor. O estado depreciado do plugin `oidc- provider` não reduz o impacto. O plugin permanece publicado, importável e documentado, e os usuários nas versões afetadas não podem optar por desativar sem mudar a sua integração. O plugin ` mcp` envolve o mesmo provedor e é afetado nas mesmas versões; os seus documentos anunciam um movimento para `@ better- auth/ oauth- provider`, mas até que os usuários migram ou atualizem, as versões publicadas afetadas permanecem expostas. `@ better- auth/ oauth- provider` valida redireciona URIs e fornece suporte MCP, por isso é o alvo de migração para ambos os plugins.
Relatório do @hillalee. - CWE- 79: Neutralização incorreta da entrada durante a geração da página web ('Cross- site Scripting'). 79.html - CWE- 601: Redireção de URL para o Site Não Confiável ('Abrir Redireção'). 601.html - RFC 6749 (Auth 2.0 ) Seção 3.1.2, Ponto de End: o URI do endpoint de redirecionamento deve ser um URI absoluto. 6749 # seção- 3.1.2 - MDN, javascript: URLs: navegando por `window.location` para um URL `javascript:` executa o corpo do script. Registro de aconselhamento: GHSA- 86 j 7 - 9 j 95 - vpqj. Não há nenhum identificador adicional listado.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 07 T 20: 55: 28.000 Z e lista a sua última modificação como 2026 - 07 - 07 T 20: 55: 28.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:N.
Informações sobre software e versão afetadas: pacote npm better- auth — ECOSISTEM: introduzido 0, corrigido 1.6.13. pacote npm better- auth — ECOSISTEM: introduzido 1.7.0 -Beta. 0, corrigido 1.7.0 -Beta. 4. Classificação e evidência: identificadores de fraqueza CWE- 601, CWE- 79. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.