Falha crítica no framework de segurança Java ‘pac4j’ expõe vulnerabilidade RCE (CVE-2023-25581)

Uma vulnerabilidade crítica no framework pac4j (CVE-2023-25581) permite execução remota de código, afetando versões anteriores à 4.0.0 e requer atualização imediata.

Uma nova análise conduzida por Michael Stepankin (@artsploit), pesquisador do GitHub Security Lab (GHSL), revelou uma vulnerabilidade crítica no pac4j, um popular framework de segurança amplamente utilizado em aplicativos Java. Essa vulnerabilidade, rastreada como CVE-2023-25581, foi classificada com uma pontuação CVSS de 9,2, refletindo sua gravidade, e pode permitir que atacantes executem código arbitrário em sistemas comprometidos, resultando em uma potencial Execução Remota de Código (RCE).

O pac4j foi desenvolvido para simplificar a autenticação e autorização em aplicativos Java, oferecendo um conjunto robusto de ferramentas que visam proteger aplicativos web e serviços. No entanto, a pesquisa de Stepankin destacou uma falha significativa nas versões anteriores à 4.0.0 da estrutura, que compromete sua segurança.

Detalhes da Vulnerabilidade (CVE-2023-25581)

A vulnerabilidade está relacionada à maneira como o pac4j lida com os atributos de perfis de usuários. Conforme explicado por Stepankin, a falha está no método org.pac4j.core.profile.InternalAttributeHandler#restore, que desserializa dados não confiáveis. Em outras palavras, a estrutura não valida adequadamente objetos Java serializados que são armazenados nos perfis de usuário, abrindo uma perigosa porta para explorações.

Essa falha pode ser explorada quando um invasor injeta um objeto serializado malicioso, codificado em Base64 e prefixado com {#sb64}, em um atributo de perfil de usuário. Quando o método de restauração processa esse atributo, ele desserializa o objeto, permitindo a execução de código arbitrário no servidor vulnerável. Stepankin alerta: “É possível enganar o sistema para desserializar uma classe Java arbitrária”, o que coloca a infraestrutura de qualquer aplicativo afetado em risco.

Mecanismo de Exploração e Limitações

Embora o pac4j-core utilize o RestrictedObjectInputStream para restringir os tipos de objetos que podem ser desserializados, essas restrições não são suficientes para impedir completamente a exploração. Segundo Stepankin, “ele ainda permite uma ampla gama de pacotes Java que podem ser explorados por cadeias de gadgets maliciosos.” Isso significa que invasores habilidosos podem explorar diferentes tipos de objetos permitidos, obtendo assim acesso à execução remota de código e controlando potencialmente o sistema afetado.

A Execução Remota de Código (RCE) é uma das consequências mais graves dessa vulnerabilidade, pois pode permitir que atacantes assumam o controle do sistema, executando comandos de sua escolha. As consequências podem variar desde o roubo de dados confidenciais até a interrupção completa do serviço, ou até mesmo a expansão do ataque a outras partes da rede.

Medidas de Mitigação e Recomendações

A boa notícia para os usuários é que as versões 4.0.0 e posteriores do pac4j não são afetadas por essa vulnerabilidade. A equipe do GitHub Security Lab, juntamente com Stepankin, recomenda fortemente que todos os usuários de versões anteriores façam uma atualização imediata para as versões corrigidas. A atualização é essencial para proteger aplicativos de ataques que possam explorar essa falha grave.

Em resumo, a vulnerabilidade CVE-2023-25581 serve como um lembrete crítico da importância de manter frameworks e bibliotecas de segurança sempre atualizados. O uso de versões desatualizadas do pac4j pode colocar aplicativos em risco, comprometendo sua integridade e segurança. Além da atualização, os desenvolvedores também devem revisar suas políticas de serialização e desserialização de dados, garantindo que essas operações sejam tratadas com o máximo cuidado para evitar futuras explorações.