ASA-2019-00565 – sudo: Potencial bypass de restrições de usuário no Runas


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00565

Identificador(es)

ASA-2019-00565, CVE-2019-14287

Título

Potencial bypass de restrições de usuário no Runas

Fabricante(s)

Todd C. Miller

Produto(s)

sudo

Versão(ões) afetada(s)

sudo versões anteriores 1.8.28

Versão(ões) corrigida(s)

sudo versão 1.8.28

Prova de conceito

Sim

Descrição

Quando o sudo é configurado para permitir que um usuário execute comandos como um usuário arbitrário por meio da palavra-chave ALL em uma especificação Runas, é possível executar comandos como root especificando o ID do usuário -1 ou 4294967295.

Isso pode ser usado por um usuário com privilégios sudo suficientes para executar comandos como root, mesmo que a especificação Runas desabilite explicitamente o acesso root, desde que a palavra-chave ALL esteja listada primeiro na especificação Runas.

As entradas no log para comandos executados dessa maneira listarão o usuário target como 4294967295 em vez de root. Além disso, os módulos de sessão PAM não serão executados para o comando.

Detalhes técnicos

A exploração do bug requer que o usuário tenha privilégios sudo que lhe permita executar comandos com um ID de usuário arbitrário. Normalmente, isso significa que a entrada de usuários do usuário tem o valor especial ALL no especificador Runas.

O sudo suporta a execução de um comando com um nome ou ID de usuário especificado, se permitido pela política sudoers. Por exemplo, a seguinte entrada sudoers permite que o comando id seja executado como qualquer usuário, pois inclui a palavra-chave ALL no especificador Runas.

myhost alice = (ALL) /usr/bin/id

O usuário alice não apenas pode executar o comando id como qualquer usuário válido, como também pode executá-lo como um ID de usuário arbitrário usando a sintaxe #uid, por exemplo:

sudo -u#1234 id -u

retornaria 1234. No entanto, as chamadas do sistema setresuid(2) e setreuid(2), que o sudo usa para alterar o ID do usuário antes de executar o comando, trata o ID do usuário -1 (ou seu equivalente unsigned 4294967295), especialmente e não altera o ID do usuário para esse valor. Como resultado,

sudo -u#-1 id -u

ou

sudo -u#4294967295 id -u

realmente retornará 0. Isso ocorre porque o próprio comando sudo já está sendo executado como ID 0, portanto, quando o sudo tenta mudar para o ID -1, nenhuma alteração ocorre.

Isso resulta em entradas log do sudo que relatam o comando como sendo executado pelo ID do usuário 4294967295 e não como root (ou ID 0). Além disso, como o ID do usuário especificado pela opção -u não existe no banco de dados de senhas, nenhum módulo de sessão PAM será executado.

Se uma entrada sudoers for gravada para permitir que o usuário execute um comando como qualquer usuário, exceto root, o bug pode ser usado para evitar essa restrição. Por exemplo, dada a seguinte entrada sudoers:

myhost bob = (ALL, !root) /usr/bin/vi

O usuário Bob tem permissão para executar o vi como qualquer usuário, exceto root. No entanto, devido ao bug, o usuário Bob consegue executar o vi como root executando o sudo -u#-1 vi, violando a política de segurança.

Somente entradas sudoers em que a palavra-chave ALL está presente no especificador Runas são afetadas. Por exemplo, a seguinte entrada sudoers não é afetada:

myhost alice = /usr/bin/id

Neste exemplo, o usuário alice só pode executar o comando id como root. Qualquer tentativa de executar o comando como um usuário diferente será negada.

Créditos

Joe Vennix (Apple Information Security)

Referência(s)

Potential bypass of Runas user restrictions
https://www.sudo.ws/alerts/minus_1_uid.html

Sudo: CVE-2019-14287
https://seclists.org/oss-sec/2019/q4/18

Treat an ID of -1 as invalid since that means “no change”.
https://github.com/sudo-project/sudo/commit/f752ae5cee163253730ff7cdf293e34a91aa5520

Add sudo_strtoid() tests for -1 and range errors.
https://github.com/sudo-project/sudo/commit/396bc57feff3e360007634f62448b64e0626390c

CVE-2019-14287
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14287

CVE-2019-14287
https://nvd.nist.gov/vuln/detail/CVE-2019-14287

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 21 outubro 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.