A empresa Qualys identificou 9 vulnerabilidades no sistema de gerenciamento de acesso mandatório AppArmor, sendo as mais perigosas aquelas que permitem a um usuário local sem privilégios obter direitos de root no sistema, escapar de contêineres isolados e contornar as restrições impostas pelo AppArmor. As vulnerabilidades receberam o codinome CrackArmor. Os identificadores CVE ainda não foram atribuídos. Exemplos de elevação de privilégios bem-sucedidos foram demonstrados no Ubuntu 24.04 e Debian 13.
Os problemas estão presentes no módulo LSM AppArmor desde o núcleo Linux 4.11, lançado em 2017, e se manifestam em distribuições que utilizam o AppArmor, como Ubuntu, Debian, openSUSE e SUSE (a partir do openSUSE/SUSE 16, o SELinux é ativado por padrão, mas o AppArmor permanece como uma opção). Os patches que corrigem as vulnerabilidades foram entregues aos desenvolvedores do núcleo Linux e serão oferecidos aos usuários nas próximas atualizações 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 e 5.10.253. A correção também foi incluída nas atualizações de pacotes do núcleo disponibilizadas hoje para o Ubuntu. Em paralelo, foram lançadas atualizações dos pacotes sudo, sudo-ldap e util-linux (incluindo a ferramenta su) para corrigir falhas que permitiam a exploração da vulnerabilidade no AppArmor. Em Debian, a atualização está em preparação.
Os problemas são causados pela presença em AppArmor de uma vulnerabilidade fundamental da classe "confused-deputy", permitindo que usuários não privilegiados carreguem, substituam e removam perfis arbitrários do AppArmor. Essa vulnerabilidade pode ser usada diretamente para desativar a proteção de programas e serviços contra ataques locais e remotos (por meio da gravação de pseudos arquivos /sys/kernel/security/apparmor/.load, .replace e .remove, por exemplo, para remover restrições em cupsd e rsyslogd), causar negação de serviço (por meio da aplicação de perfis proibitivos) e contornar restrições de namespaces (carregando um novo perfil do AppArmor "userns", por exemplo, para /usr/bin/time, permitindo a criação de namespaces de usuário ilimitados).
A capacidade de substituir perfis do AppArmor também permite obter privilégios de root por meio da vinculação a utilitários privilegiados, como su e sudo, de novos perfis que bloqueiam o acesso a chamadas de sistema específicas. Em particular, os direitos de root podem ser obtidos bloqueando a operação setuid (CAP_SETUID) para o utilitário sudo, em combinação com a manipulação da variável de ambiente MAIL_CONFIG para alterar o diretório de configurações para correios. servidor Postfix.
A essência do método é que, ao ocorrerem problemas, o utilitário sudo envia um e-mail ao administrador, executando /usr/sbin/sendmail. Ao bloquear a restauração de privilégios, é possível garantir que esse processo seja executado com privilégios de root, e ao definir a variável de ambiente MAIL_CONFIG antes da execução do sudo, é possível passar ao utilitário sendmail outras configurações, incluindo especificar seu manipulador postdrop, que será iniciado ao enviar e-mails. $ mkdir /tmp/postfix $ cat > /tmp/postfix/main.cf < /tmp/postfix/postdrop <> /tmp/postfix/pwned EOF $ chmod -R 0755 /tmp/postfix $ apparmor_parser -K -o sudo.pf < /sys/kernel/security/apparmor/.replace Senha: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operação não permitida sudo: não foi possível abrir /etc/sudoers: Operação não permitida sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operação não permitida sudo: erro ao inicializar o plug-in de auditoria sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) grupos=1001(jane), 100(users)
Outras formas de elevação de privilégios incluem vulnerabilidades no código do AppArmor que opera no nível do kernel Linux. Foi demonstrado como obter privilégios de root utilizando vulnerabilidades causadas pela execução dupla da função free() e pelo acesso a áreas de memória já liberadas (use-after-free) no código de rotina de carregamento e substituição dos perfis do AppArmor. Por exemplo, o AppArmor salva o perfil na estrutura aa_loaddata, da qual a memória é alocada no slab-cache kmalloc-192, e devido a uma condição de corrida, não é descartada a possibilidade de acesso à memória que era ocupada pela estrutura após sua liberação. Este problema pode ser explorado para obter controle sobre a memória liberada e realocar a página de memória liberada para mapear o conteúdo do arquivo /etc/passwd e reescrever a linha com a senha do root.
Fonte: opennet.ru
