
patch-manager
O Gerenciador de Patch CVE-2019-14287 do Ubuntu é uma ferramenta de laboratório baseada em GUI para verificar, mitigar e verificar a proteção contra CVE-2019-14287, uma vulnerabilidade de escalonamento de privilégios no sudo.
Este projeto foi desenvolvido para um ambiente de laboratório Ubuntu 19.04 amd64.
CVE-2019-14287 afeta versões antigas do sudo. A vulnerabilidade permite que um usuário com uma regra sudoers que exclui root contorne a restrição usando um ID de usuário numérico modificado, como -1 ou 4294967295.
Exemplo de regra sudoers arriscada:
someuser ALL=(ALL, !root) /usr/bin/vim
Em versões vulneráveis do sudo, isso poderia ser abusado com:
sudo -u#-1 id -u
sudo -u#4294967295 id -u
Se a saída for 0, o comando foi executado como root.
O aplicativo fornece duas camadas de proteção:
Patch real do pacote sudo
A ferramenta pode executar o comando oficial de atualização do pacote para atualizar o sudo.
Mitigação da configuração sudoers
A ferramenta escaneia arquivos sudoers e desabilita regras arriscadas contendo !root ou !#0.
/etc/sudoers/etc/sudoers.d/*!root! root!#0! #0visudo -cfubuntu-cve-2019-14287-patch-manager/
├── app.py
├── scripts/
│ ├── check_system.sh
│ ├── apply_real_sudo_patch.sh
│ └── verify_patch.sh
├── assets/
├── README.md
├── .gitignore
├── logs/ gerado em tempo de execução
├── backups/ gerado em tempo de execução
├── package/ gerado durante a compilação .deb
└── dist/ saída .deb gerada
Instale as dependências:
sudo apt update
sudo apt install -y python3 python3-tk sudo
Vá para a pasta do projeto:
cd ~/projects/ubuntu-cve-2019-14287-patch-manager
Execute o aplicativo:
sudo python3 app.py
O aplicativo deve ser executado como root porque precisa de acesso a:
/etc/sudoers
/etc/sudoers.d/*
A partir da raiz do projeto:
mkdir -p package/DEBIAN
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager
mkdir -p package/usr/local/bin
mkdir -p dist
Copie os arquivos do aplicativo:
cp app.py package/usr/share/ubuntu-cve-2019-14287-patch-manager/
cp -r scripts package/usr/share/ubuntu-cve-2019-14287-patch-manager/
cp -r assets package/usr/share/ubuntu-cve-2019-14287-patch-manager/
Crie pastas de tempo de execução:
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager/logs
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager/backups
Crie o lançador:
cat > package/usr/local/bin/ubuntu-cve-2019-14287-patch-manager <<'LAUNCHER'
#!/bin/bash
cd /usr/share/ubuntu-cve-2019-14287-patch-manager
exec python3 app.py
LAUNCHER
chmod +x package/usr/local/bin/ubuntu-cve-2019-14287-patch-manager
Crie o arquivo de controle Debian:
cat > package/DEBIAN/control <<'CONTROL'
Package: ubuntu-cve-2019-14287-patch-manager
Version: 1.0.0
Section: utils
Priority: optional
Architecture: all
Depends: python3, python3-tk, sudo
Maintainer: Hivin Manju Sri <[email protected]>
Description: Gerenciador de patch GUI para a vulnerabilidade sudo CVE-2019-14287
Uma ferramenta de laboratório GUI para verificar a versão do sudo, aplicar o patch do pacote sudo,
escanear arquivos sudoers em busca de regras arriscadas !root ou !#0, desabilitar regras arriscadas
selecionadas com segurança e verificar a proteção contra CVE-2019-14287.
CONTROL
Compile:
chmod 755 package/DEBIAN
chmod 644 package/DEBIAN/control
dpkg-deb --build package dist/ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb
Instale:
sudo dpkg -i dist/ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb
sudo apt --fix-broken install -y
Execute após a instalação:
sudo ubuntu-cve-2019-14287-patch-manager
Check SystemApply Real Sudo PatchScan Sudoers RulesDisable Selected Risky RulesVerify ProtectionO aplicativo detecta qualquer linha ativa do sudoers contendo:
!root
! root
!#0
! #0
Não depende de um nome de usuário ou caminho de comando fixo.
Exemplos de regras arriscadas:
testone ALL=(ALL, !root) /usr/bin/vim
john ALL=(ALL,!root) /bin/bash
admin ALL=(ALL, !#0) /usr/bin/python3
%developers ALL=(ALL,!#0) /any/path
Quando desabilitada, uma regra arriscada se torna:
# DISABLED by Ubuntu CVE-2019-14287 Patch Manager: john ALL=(ALL,!#0) /bin/bash
O aplicativo verifica a proteção usando:
sudo -u#-1 id -u
sudo -u#4294967295 id -u
Resultado protegido:
Os comandos falham ou não retornam UID 0.
Resultado vulnerável:
0
Esta ferramenta é destinada a uso em laboratório e educacional.
Para sistemas de produção:
(ALL, !root).visudo.cd ~/projects/ubuntu-cve-2019-14287-patch-manager
cat >> README.md <<'EOF'
O Ubuntu 19.04 atingiu o fim da vida útil, portanto seus repositórios de pacotes padrão podem não fornecer mais as dependências necessárias, como python3-tk. Se o instalador falhar com um erro semelhante a:
Depends: python3-tk but it is not installable
Unable to correct problems, you have held broken packages
use as etapas de recuperação abaixo.
sudo dpkg --remove ubuntu-cve-2019-14287-patch-manager 2>/dev/null || true
sudo apt --fix-broken install -y
sudo dpkg --configure -a
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup.$(date +%F_%H-%M-%S)
sudo sed -i -E 's|http://([a-z]{2}\.)?archive.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list
sudo sed -i -E 's|http://security.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list
sudo apt update
sudo apt install -y python3-tk
wget -O ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb "https://github.com/HivinManjuSri/ubuntu-cve-2019-14287-patch-manager/releases/latest/download/ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb" && sudo apt install -y ./ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb
Se o apt install não aceitar o arquivo .deb local no Ubuntu 19.04, use:
wget -O ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb "https://github.com/HivinManjuSri/ubuntu-cve-2019-14287-patch-manager/releases/latest/download/ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb" && sudo dpkg -i ./ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb && sudo apt --fix-broken install -y