Falha Crítica no Módulo PAM do OATH-Toolkit Pode Permitir Explorações com Acesso de SuperUsuário

Uma grave vulnerabilidade (CVE-2024-47191) no módulo PAM do OATH-Toolkit pode permitir que usuários obtenham acesso de superusuário explorando operações inseguras de arquivos durante a autenticação OTP. Correções foram implementadas pela SUSE e na versão 2.6.12 do OATH-Toolkit para mitigar o problema.

Uma vulnerabilidade grave foi identificada no módulo PAM do OATH-Toolkit, expondo sistemas a possíveis explorações com privilégios de superusuário (root) durante a autenticação de senhas de uso único (OTP). Este problema, rastreado como CVE-2024-47191, foi descoberto por Matthias Gerstner, da equipe de segurança da SUSE, após um relatório interno do engenheiro da SUSE, Fabian Vogt. A falha afeta sistemas que utilizam o OATH-Toolkit para autenticação de dois fatores baseada em OTP, tornando-se uma ameaça significativa para os sistemas que dependem deste módulo.

O OATH-Toolkit é amplamente utilizado para gerenciar OTPs, frequentemente como um segundo fator em processos de autenticação por senha. O problema surgiu a partir de uma funcionalidade introduzida na versão 2.6.7, que permitiu que o arquivo de estado do OTP (conhecido como “usersfile”) fosse armazenado no diretório home do usuário. A vulnerabilidade foi identificada na forma como o módulo PAM realiza operações de arquivo nesses diretórios.

Conforme explicado por Gerstner, “Fabian notou que o módulo PAM realiza operações inseguras de arquivo nos diretórios home dos usuários. Como as pilhas PAM geralmente são executadas com privilégios de root, isso pode facilmente causar problemas de segurança.” A lógica de expansão de caminhos como ${HOME} ou ${USER} não foi devidamente protegida, resultando em uma falha crítica de segurança.

A raiz do problema no CVE-2024-47191 está na interação do módulo PAM com o usersfile durante a autenticação OTP. Quando um usuário se autentica, o módulo PAM invoca a função oath_authenticate_usersfile() na biblioteca liboath, que é responsável por gerenciar o acesso a este arquivo. No entanto, como destaca Gerstner, “Os privilégios não são reduzidos e a função não está ciente do contexto especial privilegiado do PAM.”

Essa falha permite que um usuário sem privilégios explore as operações de arquivo realizadas pela pilha PAM, que opera com privilégios de root. Por exemplo, ao criar um link simbólico (symlink) em seu diretório home, um usuário pode enganar o sistema para sobrescrever arquivos críticos, como o /etc/shadow, ganhando, assim, acesso completo de superusuário.

Gerstner detalha como essa exploração pode ser facilmente desencadeada:

“Isto fará com que o arquivo /etc/shadow seja sobrescrito e sua propriedade seja alterada para o usuário autenticado. O usuário autenticado pode obter privilégios completos de root. Não é necessário vencer uma condição de corrida ou adivinhar caminhos.”

O cenário de exploração é direto e não requer condições complexas ou temporização, tornando-o uma ameaça urgente à segurança.

A equipe de segurança da SUSE agiu rapidamente para resolver a vulnerabilidade. Em colaboração com o autor original do código, desenvolveram um patch para corrigir o problema. Contudo, essa tarefa se mostrou mais complexa do que parecia inicialmente, conforme Gerstner explicou no relatório:

“O módulo PAM não pode determinar com certeza se o usersfile de destino deveria ser de propriedade do root, do usuário autenticado ou até mesmo de um usuário não relacionado.”

Um dos principais problemas identificados foi um mecanismo de bloqueio quebrado. Na sua forma original, o arquivo de bloqueio do módulo poderia ser desvinculado prematuramente, resultando em condições de corrida potenciais. Além disso, armazenar o arquivo de bloqueio no diretório home do usuário poderia desorganizar o diretório ou causar uma negação de serviço local.

Para mitigar esses problemas, a SUSE implementou várias medidas importantes:

  • O caminho do usersfile agora é percorrido com segurança utilizando chamadas de sistema que impedem ataques de symlink.
  • Os privilégios são reduzidos para o proprietário do usersfile, mitigando a possibilidade de escalonamento de privilégios.
  • O mecanismo de bloqueio foi reformulado para evitar a desorganização do diretório home do usuário, utilizando agora o próprio usersfile para o bloqueio.

Este patch abrangente está atualmente em uso nos produtos da SUSE, e uma solução mais portátil foi lançada na versão 2.6.12 do OATH-Toolkit.

Os desenvolvedores upstream do OATH-Toolkit também lançaram uma correção, incluída na versão 2.6.12. Embora sua abordagem vise maior compatibilidade entre plataformas, não aborda todos os casos de uso considerados pela equipe de segurança da SUSE. No entanto, ambas as soluções resolvem a vulnerabilidade principal, protegendo os sistemas contra o devastador ataque de escalonamento de privilégios descrito no relatório original.