Falha no sudo permite execução de comandos restritos como root

System

Uma falha de segurança afeta as versões do sudo anteriores à 1.8.28, permitindo que usuários executem comandos como root, mesmo que estes estejam restritos.

A vulnerabilidade recebeu a designação CVE-2019-14287, e foi descoberta por Joe Vennix da Apple Information Security, sendo divulgada pelo projeto Sudo.

O interessante é que um atacante pode explorar a falha de segurança simplesmente especificando um ID “-1” ou “4294967295” para o usuário, permitindo a execução de comandos como superadministrador, sem restrições.

Administradores de sistemas GNU/Linux são recomendados a atualizarem os sistemas sob sua tutela imediatemente para a versão mais recente do sudo, cuja vulnerabilidade já foi corrigida. No momento em que escrevo este post, a dsitribuição Slackware Linux já havia disponibilizado pacotes de correção para as versões -current, 14.0, 14.1 e 14.2.

Algumas distribuições de referência, como Red Hat e derivadas, ainda não haviam divulgado atualizações para corrigir a falha, enquanto outras, como Ubuntu Linux e Debian Linux, haviam disponibilizado correções para algumas das versões sendo mantidas.

Slackware Linux – Atualizações de segurança. Junho, 2019.

Slackware logo

Mês movimentado por diversas atualizações de segurança junto a distribuição Slackware Linux, principalmente pelas correções realizadas pela Mozilla para o navegador Firefox, bem como para o seu cliente de e-mails Thunderbird, contando com duas versões disponibilizadas para cada um deles somente neste período.

No momento em que escrevo este post, o navegador e o cliente de e-mails mantido pela Mozilla estão disponíveis em suas versões 60.7.2, tanto para a versão estável 14.2 da Slackware Linux, quanto para a árvore de desenvolvimento current da distribuição.

Além dos produtos citados e oferecidos pela Mozilla, o servidor de resolução de nomes Bind também recebeu correções de segurança, mitigando explorações que geravam uma negação do serviço, sendo disponibilizado agora em sua versão 9.11.8 para diversas versões da distribuição Slackware, sendo elas: 14.0, 14.1, 14.2 e current.

Por último, mas não menos importante, correções também foram aplicadas ao kernel Linux, visando mitigar diversas falhas de segurança, entre elas a conhecida como “SACK Panic”, descoberta por engenheiro de segurança que atua junto a Netflix, e que podia originar negações de serviço remotamente.

As correções foram disponibilizadas junto à versão 4.4.182 do kernel Linux, junto às versões 14.2 e current da distribuição Slackware no dia 18/06, porém depois disso já houveram avanços, especificamente junto a árvore current, que neste momento conta com a versão 4.19.53 do kernel Linux.

Para consultar mais detalhes a respeito das atualizações disponibilizadas, acesse a página Slackware Security Advisories.

Slackware Linux 14.2 – Reinstalando o VirtualBox 6.0.4 após upgrade do kernel

Slackware logo

Olá pessoal! Passando para compartilhar uma solução de contorno, que visa reparar a instalação do VirtualBox junto a Slackware Linux, após a recente atualização de segurança disponibilizada para o kernel Linux, junto a versão 14.2 da distribuição.

Após a instalação dos pacotes atualizados e tentativa de reinstalação do VirtualBox, a partir do binário disponibilizado pela Oracle junto ao site da aplicação, o mesmo afirma que a instalação foi realizada, porém apresentando erros que devem ser consultados através do arquivo de log.

Ao verificar o conteúdo do arquivo /var/log/vbox-setup.log, encontrei os seguintes erros:

$ tail -n 50 /var/log/vbox-setup.log

scripts/Makefile.build:277: recipe for target ‘/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o’ failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs….
if [ “-pg” = “-pg” ]; then if [ /tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o != “scripts/mod/empty.o” ]; then ./scripts/recordmcount “/tmp/vbox.0/r0drv/linux/memuserkernel-r0drv-linux.o”; fi; fi;
if [ “-pg” = “-pg” ]; then if [ /tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o != “scripts/mod/empty.o” ]; then ./scripts/recordmcount “/tmp/vbox.0/r0drv/linux/assert-r0drv-linux.o”; fi; fi;
if [ “-pg” = “-pg” ]; then if [ /tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o != “scripts/mod/empty.o” ]; then ./scripts/recordmcount “/tmp/vbox.0/r0drv/linux/alloc-r0drv-linux.o”; fi; fi;
if [ “-pg” = “-pg” ]; then if [ /tmp/vbox.0/linux/SUPDrv-linux.o != “scripts/mod/empty.o” ]; then ./scripts/recordmcount “/tmp/vbox.0/linux/SUPDrv-linux.o”; fi; fi;
if [ “-pg” = “-pg” ]; then if [ /tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o != “scripts/mod/empty.o” ]; then ./scripts/recordmcount “/tmp/vbox.0/r0drv/linux/mp-r0drv-linux.o”; fi; fi;
Makefile:1436: recipe for target ‘_module_/tmp/vbox.0’ failed
make[1]: *** [_module_/tmp/vbox.0] Error 2
/tmp/vbox.0/Makefile.include.footer:106: recipe for target ‘vboxdrv’ failed
make: *** [vboxdrv] Error 2

As linhas que nos interessam são justamente as que aparecem mais acima, no log:

scripts/Makefile.build:277: recipe for target ‘/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o’ failed
make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[2]: *** Waiting for unfinished jobs….

Com base nesse erro, busquei por informações na Internet, e encontrei uma postagem em um blog, cujo autor já havia enfrentado o mesmo problema, postando a solução de contorno para o mesmo.

Para corrigir o erro, precisamos editar o arquivo referenciado, alterando a versão do kernel disponível no script:

$ vi /usr/src/vboxhost-6.0.4/vboxdrv/r0drv/linux/memobj-r0drv-linux.c

Substitua a versão destacada em vermelho, em três locais diferentes no arquivo:

if GET_USER_PAGES_API >= KERNEL_VERSION(4, 9, 0)

fWrite ? FOLL_WRITE | /* Write to memory. */

FOLL_FORCE /* force write access. */

: 0, /* Write to memory. */

Deixando com esta versão:

if GET_USER_PAGES_API >= KERNEL_VERSION(4, 4, 168)

fWrite ? FOLL_WRITE | /* Write to memory. *

/ FOLL_FORCE /* force write access. */

: 0, /* Write to memory. */

Agora basta executar o comando para configurar o VirtualBox novamente, e este compilará sem erros:

# /sbin/vboxconfig

Para acessar o artigo original, siga o link para o SlackBlogs – Unofficial Blog for Slackware Linux.