Redash Redashé uma ferramenta popular de análise e visualização de dados. Recentemente, relatamos uma vulnerabilidade crítica de bypass de autenticação SAML afetando sua versão mais recente (10.1.0). is a popular data analysis and visualization tool. We recently reported a critical SAML authentication bypass vulnerability affecting its latest version (10.1.0).
A vulnerabilidade pode ser explorada por qualquer pessoa para obter os privilégios mais altos possíveis no sistema. Sua descoberta levou a um The vulnerability could be exploited by anyone to gain highest possible privileges on the system. Its discovery led to an importante anúncio important announcementdo mantenedor do projeto. from the project’s maintainer.
A VulnerabilidadeThe Vulnerability
Encontramos Redash em um noivado recente. Esta não é a primeira vez que encontramos este software de código aberto, então decidimos dar uma olhada mais de perto.We encountered Redash in a recent engagement. This is not the first time we met this open-source software, so we decided to take a closer look.
A maior parte da superfície de ataque do Redash é colocada atrás da autenticação. É por isso que o SAML estava entre as áreas que auditamos primeiro. Tivemos algumas descobertas, mas a mais crítica, de longe, é um bypass de autenticação SAML.Most of Redash's attack surface is put behind authentication. That’s why SAML was among the areas we audited first. We had a couple of findings, but the most critical by far is a SAML authentication bypass.
A vulnerabilidade funciona da seguinte forma:The vulnerability works as follows:
No fluxo SAML, o Redash atua como Provedor de Serviços (SP) e provedores populares como Okta ou Google atuam como Provedor de Identidade (IdP).In the SAML flow, Redash acts as the Service Provider (SP), and popular providers like Okta or Google act as the Identity Provider (IdP).
SAML depende de assinaturas digitais para autenticar usuários. O usuário faz login no IdP e é redirecionado de volta ao Redash com uma mensagem SAML assinada contendo as informações do usuário.SAML relies on digital signatures to authenticate users. The user logs into the IdP and gets redirected back to Redash with a signed SAML message containing the user’s information.
O Redash usa a biblioteca Redash uses the library pysaml2 pysaml26.1.0 para implementar a autenticação SAML nos dois endpoints 6.1.0 to implement SAML authentication at the two endpoints /saml/login /saml/logine and /saml/callback /saml/callback. No entanto, pysaml2 antes da versão 6.5.0 é vulnerável a . However, pysaml2 before version 6.5.0 is vulnerable to CVE-2021-21239 CVE-2021-21239, que permite ignorar a verificação de assinatura em mensagens SAML arbitrárias., which allows one to bypass signature verification on arbitrary SAML messages.
Especificamente, o back-end padrão de pysaml2, Specifically, the default backend of pysaml2, CryptoBackendXmlSec1 CryptoBackendXmlSec1, usa o utilitário de linha de comando , uses the command line utility xmlsec1xmlsec1 para verificar mensagens SAML assinadas. No entanto, xmlsec1, por padrão, prefere a chave incorporada na mensagem em vez de chaves carregadas explicitamente (como especificadas na linha de comando). Esse comportamento perigoso foi relatado pela primeira vez por Greg Vishnepolsky to verify signed SAML messages. However, xmlsec1 by default prefers the key embedded in the message over explicitly loaded keys (such as specified on the command line). This dangerous behaviour was first reported by Greg Vishnepolsky em 2013 in 2013..
A ExploraçãoThe Exploit
A vulnerabilidade nos permite forjar mensagens SAML de qualquer provedor de identidade. Para explorá-lo contra instâncias do Redash do mundo real, temos que superar alguns pequenos obstáculos:The vulnerability allows us to forge SAML messages from any identity providers. To exploit it against real-world Redash instances, we have to overcome a few small obstacles:
Obtenção de ID de Entidade SAML: no mundo SAML, cada provedor de identidade é identificado exclusivamente por um ID de Entidade SAML. O Redash só aceitará mensagens SAML se este valor estiver correto. Felizmente, a maioria dos IdP usa IDs de entidade SAML que podem ser inferidos ao observar uma sessão de login SAML. Por exemplo, o Google usa o padrão Obtaining SAML Entity ID: in the SAML world, each identity provider is uniquely identified by a SAML Entity ID. Redash will only accept SAML messages if this value is correct. Fortunately, most IdP uses SAML entity IDs that can be inferred from observing a SAML login session. For example, Google uses the pattern https://accounts.google.com/o/saml2?idpid=<IDPID> https://accounts.google.com/o/saml2?idp … t;conforme mostrado na captura de tela abaixo. as shown in the screenshot below.
Fazendo login como administrador: quando um usuário entra no Redash por SAML com um endereço de e-mail inexistente, o Redash cria automaticamente uma conta para esse endereço. Isso é chamado de provisionamento Just In Time (JIT). Para que possamos entrar como test@victim.com, vá para Configurações → Usuários para obter uma lista de todas as contas na instância do Redash - como a captura de tela abaixo - e crie outra mensagem SAML para entrar como uma das contas de administrador.Signing in as administrator: when a user signs in to Redash over SAML with a non-existent email address, Redash automatically creates an account for that address. This is called Just In Time (JIT) provisioning. So we can sign in as test@victim.com, go to Settings → Users to obtain a list of all accounts on the Redash instance - like the screenshot below - and forge another SAML message to sign in as one of the admin accounts.
Além disso, o Redash permite respostas SAML não solicitadas, o que significa que não é necessário passar por todo o fluxo de logon iniciado pelo SP para criar uma carga útil de resposta SAML válida, simplificando a exploração.Other than that, Redash allows unsolicited SAML responses, which means one does not have to go through the whole SP-initiated logon flow to craft a valid SAML response payload, simplifying the exploit.
RemediaçãoRemediation
Redash reconheceu rapidamente a vulnerabilidade, mas não lançou uma nova versão com a correção de dependência. O Redash quickly acknowledged the vulnerability, but has not released a new version with the dependency fix. The comunicado oficial official advisoryrecomenda atualizar o pysaml2 para a versão >= 6.5.0. recommends upgrading pysaml2 to version >= 6.5.0.
Como uma defesa em profundidade, considere:As a defense-in-depth, consider:
mudar para OAuth2 em vez de SAMLswitch to OAuth2 instead of SAML
atualize REDASH_COOKIE_SECRET para invalidar todas as sessões existentesupdate REDASH_COOKIE_SECRET to invalidate all existing sessions
ImpactoImpact
Relatamos o problema a várias organizações afetadas. Considerando que a correção deve ser aplicada manualmente, é impressionante como eles resolveram isso em questão de dias. A maioria classificou a vulnerabilidade como crítica e recompensou generosamente por isso.We reported the issue to multiple affected organizations. Considering the fix has to be applied manually, it’s impressive how they resolved this in a matter of days. Most classified the vulnerability as critical and rewarded generously for it.
Linha do tempoTimeline
16 de janeiro de 2023: descobriu a vulnerabilidadeJan 16, 2023: Discovered the vulnerability
17 de março de 2023: Reportado ao RedashMar 17, 2023: Reported to Redash
18 de março de 2023: Redash confirmou a vulnerabilidadeMar 18, 2023: Redash confirmed the vulnerability
4 de abril de 2023: Apr 4, 2023: comunicado do GitHub publicadoGitHub advisory published
4 de abril de 2023: relatado às organizações afetadas conhecidasApr 4, 2023: Reported to known affected organizations
28 de abril de 2023: publicou esta postagem no blogApr 28, 2023: Published this blog post
palavras de despedidaParting words
Essa vulnerabilidade é lamentável. Apesar de ser muito popular, o desenvolvimento do Redash foi interrompido desde que foi adquirido pela Databricks. É provavelmente por isso que esse problema evitou a detecção por tanto tempo. Qualquer ferramenta de automação poderia tê-lo detectado. Na verdade, o dependapot do GitHub enviou um This vulnerability is unfortunate. Despite being very popular, Redash’s development has been halted since it was acquired by Databricks. This is probably why this issue has evaded detection for so long. Any automation tool could have caught it. In fact, GitHub’s dependapot submitted a pull request pull requestpara atualizar o pysaml2 há algum tempo, mas foi ignorado. to upgrade pysaml2 a while ago, but it was ignored.
Pelo lado positivo, estamos felizes em ver que este trabalho está gerando mudanças positivas. Redash fez outro anúncio após a divulgação e decidiu ressuscitar o projeto, conforme On the bright side, we’re glad to see this work is driving positive changes. Redash made another announcement after the disclosure and decided to resurrect the project, as per A New Chapter as a Community-Led Project A New Chapter as a Community-Led Project..
Como sempre, o SAML é difícil de implementar corretamente e continua sendo uma grande superfície de ataque a ser explorada.As always, SAML is tricky to implement correctly and remains a large attack surface to explore.
Finalmente, parabéns à equipe por uma grande colaboração nesta pequena pesquisa, especialmente a An por encontrar a vulnerabilidade e Gia por fazer todo o trabalho pesado.Finally, props to the team for a great collaboration on this little research, especially to An for finding the vulnerability and Gia for doing all the heavy work.
[1] https://github.com/getredash/redash/sec … -rgmf-qv5c
[2] https://github.com/IdentityPython/pysam … -r448-pc62