
Script de exploit em Python para CVE-2019-5420, visando força bruta de chave AES GCM de sessão assinada do Ruby on Rails para alcançar execução remota de código em ambientes de desenvolvimento/staging.
O Ruby-on-Rails oferece três ambientes diferentes nos quais pode executar: desenvolvimento, teste e produção. Obviamente, você não deve ter código executando em desenvolvimento ou teste disponível na internet, mas (como sempre) isso acontece (por exemplo, em ambientes de staging).
O Ruby-on-Rails utiliza "sessões assinadas" para permitir que as pessoas escalem facilmente suas aplicações. Com o tempo, a forma como as sessões eram tratadas mudou. A partir da versão 5.2.2, as sessões são dados codificados em JSON que são protegidos usando AES GCM (aes-256-gcm) por padrão.
A CVE-2019–5420 é, na verdade, muito simples. A chave usada para criptografar sessões pode ser adivinhada (ou forçada por brute force) no modo de desenvolvimento, pois é baseada no nome da aplicação. Esse problema pode potencialmente ser usado para obter execução remota de código (RCE), de acordo com o aviso de segurança.
Um script simples em Python explora a funcionalidade acima.