Linux: Falha de segurança no comando sudo: atualize seu sistema!
- Júnior André Marostega
- 21 de mar. de 2021
- 5 min de leitura
Parte 1

Uma falha de segurança grave que afeta grande parte dos computadores com Linux foi divulgada nessa terça 26 pela empresa de auditoria de segurança Qualys. A falha foi identificada no comando sudo, presente em muitas (senão todas) as instalações do Linux — inclusive do openSUSE e do Linux Kamarada. A correção já foi disponibilizada pelas distribuições, que recomendam que os usuários instalem as últimas atualizações.
O utilitário de linha de comando sudo permite que usuários comuns do sistema executem comandos que normalmente só podem ser executados pelo administrador do sistema, que no Linux é chamado de root ou superusuário. Daí vem o nome do comando sudo: su “do” (“superusuário faz”, em inglês). O administrador pode conceder permissões para que certos usuários (ou grupos de usuários) sejam capazes de executar certos comandos (ou qualquer comando) como se fossem o root ou outro usuário. Para isso, o administrador deve editar o arquivo de configuração do sudo, que é o /etc/sudoers.
O bug descoberto pela Qualys foi batizado de “Baron Samedit” e registrado no CVE (Common Vulnerabilities and Exposures, um banco de dados de falhas de segurança conhecidas) com o código CVE-2021-3156. Essa falha podia ser explorada por um usuário comum mal-intencionado (ou um invasor que conseguisse acesso a uma conta de usuário comum) para obter acesso ao root e assumir o controle do sistema vulnerável, mesmo que essa conta comum não tivesse sido previamente autorizada no arquivo /etc/sudoers.
Para os detalhes técnicos a respeito dessa falha de segurança, você pode conferir o relatório técnico da Qualys ou o vídeo a seguir, que mostra uma forma de explorar a falha para ganhar acesso ao usuário root a partir de uma conta comum (relatório e vídeo ambos em inglês).
Como posso me proteger dessa falha?
Todas as maiores distribuições Linux já liberaram atualizações de segurança com correções (patches) que resolvem esse problema. Cabe aos usuários baixarem essas atualizações.
O Projeto openSUSE liberou atualizações para suas duas distribuições: Leap e Tumbleweed. No caso do openSUSE Leap, as versões com suporte (15.1 e 15.2) receberam atualizações.
Como o Linux Kamarada é baseado no openSUSE Leap, usuários do Linux Kamarada são, por tabela, usuários do openSUSE Leap também e recebem essas mesmas atualizações.
Se você usa uma dessas distribuições:
openSUSE Leap (ou Linux Kamarada) 15.1
openSUSE Leap (ou Linux Kamarada) 15.2
openSUSE Tumbleweed
Veja como obter atualizações no texto:
Como obter atualizações para o Linux openSUSE
Se você usa uma das versões do openSUSE Leap que já foram descontinuadas e já não recebem mais suporte (por exemplo, a 15.0), a orientação passada na lista de discussão do openSUSE foi baixar o código-fonte do pacote do sudo, compilar e instalar manualmente. Se esse é o seu caso, consulte a lista de discussão (em inglês) para mais informações.
Outra opção se você usa o openSUSE Leap 15.0 é atualizar para a versão 15.1 e na sequência já atualizar para a 15.2.
O suporte do openSUSE Leap 15.1 se encerrará agora em janeiro. Portanto, usuários da versão 15.1 também são aconselhados a atualizar.
Se quiser instruções de como atualizar toda a distribuição, consulte os textos:
Como saber se estou vulnerável?
Os desenvolvedores do sudo também emitiram um alerta com informações sobre a falha. Eles sugeriram um teste simples para saber se a versão do sudo que você está usando está sujeita a essa falha. Abra uma janela do terminal e execute o comando a seguir:
1 $ sudoedit -s '\' `perl -e 'print "A" x 65536'`
Antes da correção, o comando deve informar que ocorreu uma falha de segmentação.
Se você já está usando a versão corrigida, o comando deve mostrar uma mensagem de erro.
No meu teste, após instalar a correção, a mensagem que apareceu foi:
1 2 sudoedit: invalid mode flags from sudo front end: 0x20002 sudoedit: não foi possível inicializar plug-in de política
No caso do openSUSE e do Linux Kamarada, distribuições que usam o formato de empacotamento RPM, você também pode verificar a lista de mudanças (changelog) do pacote sudo. Se a atualização foi instalada, ela deve aparecer, como no exemplo abaixo:
1 $ rpm -q --changelog sudo | head
2 * sáb jan 23 2021 Simon Lees <[email protected]>
3 - Fix Heap-based buffer overflow in Sudo [bsc#1181090,CVE-2021-
3156]
4 * sudo-CVE-2021-3156.patch
Parte 2
A serius heap-based buffer overflow has been discovered in sudo that is exploitable by any local user. It has been given the name Baron Samedit by its discoverer. The bug can be leveraged to elevate privileges to root, even if the user is not listed in the sudoers file. User authentication is not required to exploit the bug.
Sudo versions affected:
Sudo versions 1.7.7 through 1.7.10p9, 1.8.2 through 1.8.31p2, and 1.9.0 through 1.9.5p1 are affected.
CVE ID:
This vulnerability has been assigned CVE-2021-3156 in the Common Vulnerabilities and Exposures database.
Details:
When sudo runs a command in shell mode, either via the -s or -i command line option, it escapes special characters in the command's arguments with a backslash. The sudoers policy plugin will then remove the escape characters from the arguments before evaluating the sudoers policy (which doesn't expect the escape characters) if the command is being run in shell mode.
A bug in the code that removes the escape characters will read beyond the last character of a string if it ends with an unescaped backslash character. Under normal circumstances, this bug would be harmless since sudo has escaped all the backslashes in the command's arguments. However, due to a different bug, this time in the command line parsing code, it is possible to run sudoedit with either the -s or -i options, setting a flag that indicates shell mode is enabled. Because a command is not actually being run, sudo does not escape special characters. Finally, the code that decides whether to remove the escape characters did not check whether a command is actually being run, just that the shell flag is set. This inconsistency is what makes the bug exploitable.
To test whether your version of sudo is vulnerable, the following command can be used:
sudoedit -s /
A vulnerable version of sudo will either prompt for a password or display an error similar to:
sudoedit: /: not a regular file
A patched version of sudo will simply display a usage statement, for example:
usage: sudoedit [-AknS] [-a type] [-C num] [-c class] [-D directory] [-g group]
[-h host] [-p prompt] [-R directory] [-T timeout] [-u user]
file ...
If the sudoers plugin has been patched but the sudo front-end has not, the following error will be displayed:
sudoedit: invalid mode flags from sudo front end: 0x20002
Patching either the sudo front-end or the sudoers plugin is sufficient to prevent exploitation, but applying the complete patch is the safest approach.
For more information, see The Qualys advisory.
Impact:
A local user may be able to exploit sudo to elevate privileges to root as long as the sudoers file (usually /etc/sudoers) is present.
Workaround:
None. Sudo version 1.8.32, 1.9.5p2 or a patched vendor-supported version must be installed.
Fix:
The bug is fixed in sudo 1.8.32 and 1.9.5p2.
Credit:
Thanks to the Qualys Security Advisory team for their detailed bug report and explanation of its implications.
Parte 3:
CVE-2021-3156
This vulnerability has been modified since it was last analyzed by the NVD. It is awaiting reanalysis which may result in further changes to the information provided.
Current Description
Sudo before 1.9.5p2 contains an off-by-one error that can result in a heap-based buffer overflow, which allows privilege escalation to root via "sudoedit -s" and a command-line argument that ends with a single backslash character.
Para mais detalhes técnicos: Clique aqui.