Um pesquisador de segurança encontrou uma vulnerabilidade de execução remota de código nos sites de documentação para desenvolvedores do Google. Ao mapear o fluxo OAuth compartilhado entre esses sites, o pesquisador notou que o endpoint /oauth2authorize definia um cookie de sessão Flask incomumente grande, de cerca de 1.200 bytes, muito mais do que um token CSRF e uma URL de retorno exigiriam. Os cookies de sessão do Flask são assinados, mas não criptografados, então seu conteúdo podia ser lido por qualquer pessoa que tivesse um deles.
Ao decodificar o cookie, o pesquisador encontrou um objeto serializado com pickle contendo o client_id e o client_secret OAuth do Google em texto simples. Descobriu que o client secret também servia como SECRET_KEY do Flask, o que significa que o mesmo valor guardava e verificava a assinatura. Como a chave de assinatura estava exposta dentro do próprio cookie, o pesquisador conseguia recalcular assinaturas válidas offline e forjar dados de sessão arbitrários.
O endpoint de callback lê os dados do fluxo OAuth da sessão e os passa para pickle.loads. Com uma sessão forjada, um atacante poderia fornecer uma carga pickle maliciosa, tornando isso um caminho de execução remota de código sem autenticação. O pesquisador verificou o problema de forma segura usando uma carga que apenas acionava time.sleep, evitando executar comandos nos sistemas de produção do Google.
A descoberta ilustra como armazenar segredos em dados de sessão do lado do cliente e desserializar dados pickle não confiáveis podem se somar e resultar em uma vulnerabilidade crítica. A falha rendeu uma recompensa de US$ 90 mil.
Fonte: Hacker News · Resumido por HeadlinesBriefing