
patch-manager
Ubuntu CVE-2019-14287 Patch Manager — это лабораторный инструмент с графическим интерфейсом для проверки, устранения и подтверждения защиты от CVE-2019-14287 — уязвимости повышения привилегий в sudo.
Проект разработан для лабораторного окружения Ubuntu 19.04 amd64.
CVE-2019-14287 затрагивает старые версии sudo. Уязвимость позволяет пользователю, для которого правило sudoers исключает root, обойти это ограничение, используя поддельный числовой идентификатор пользователя, например -1 или 4294967295.
Пример опасного правила sudoers:
someuser ALL=(ALL, !root) /usr/bin/vim
В уязвимых версиях sudo это можно использовать так:
sudo -u#-1 id -u
sudo -u#4294967295 id -u
Если вывод содержит 0, команда выполнилась с правами root.
Приложение обеспечивает два уровня защиты:
Реальный патч пакета sudo
Инструмент может выполнить официальную команду обновления пакета для обновления sudo.
Смягчение конфигурации sudoers
Инструмент сканирует файлы sudoers и отключает опасные правила, содержащие !root или !#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/ создаются во время выполнения
├── backups/ создаются во время выполнения
├── package/ создаётся при сборке .deb
└── dist/ выходной каталог .deb
Установите зависимости:
sudo apt update
sudo apt install -y python3 python3-tk sudo
Перейдите в папку проекта:
cd ~/projects/ubuntu-cve-2019-14287-patch-manager
Запустите приложение:
sudo python3 app.py
Приложение должно работать от root, поскольку ему нужен доступ к:
/etc/sudoers
/etc/sudoers.d/*
Из корня проекта:
mkdir -p package/DEBIAN
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager
mkdir -p package/usr/local/bin
mkdir -p dist
Скопируйте файлы приложения:
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/
Создайте папки для работы во время выполнения:
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager/logs
mkdir -p package/usr/share/ubuntu-cve-2019-14287-patch-manager/backups
Создайте запускающий скрипт:
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
Создайте управляющий файл 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: GUI patch manager for CVE-2019-14287 sudo vulnerability
A lab GUI tool for checking sudo version, applying the sudo package patch,
scanning sudoers files for risky !root or !#0 rules, disabling selected risky
rules safely, and verifying CVE-2019-14287 protection.
CONTROL
Сборка:
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
Установка:
sudo dpkg -i dist/ubuntu-cve-2019-14287-patch-manager_1.0.0_all.deb
sudo apt --fix-broken install -y
Запуск после установки:
sudo ubuntu-cve-2019-14287-patch-manager
Check SystemApply Real Sudo PatchScan Sudoers RulesDisable Selected Risky RulesVerify ProtectionПриложение обнаруживает любые активные строки sudoers, содержащие:
!root
! root
!#0
! #0
Оно не зависит от фиксированного имени пользователя или пути к команде.
Примеры опасных правил:
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
После отключения опасное правило превращается в:
# DISABLED by Ubuntu CVE-2019-14287 Patch Manager: john ALL=(ALL,!#0) /bin/bash
Приложение проверяет защиту с помощью:
sudo -u#-1 id -u
sudo -u#4294967295 id -u
Защищённый результат:
Команды завершаются с ошибкой или не возвращают UID 0.
Уязвимый результат:
0
Этот инструмент предназначен для лабораторного и учебного использования.
Для производственных систем:
(ALL, !root).visudo.cd ~/projects/ubuntu-cve-2019-14287-patch-manager
cat >> README.md <<'EOF'
Ubuntu 19.04 больше не поддерживается, поэтому её стандартные репозитории пакетов могут не предоставлять необходимые зависимости, такие как python3-tk. Если установщик завершается с ошибкой, похожей на:
Depends: python3-tk but it is not installable
Unable to correct problems, you have held broken packages
воспользуйтесь шагами восстановления ниже.
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
Если apt install не принимает локальный файл .deb в Ubuntu 19.04, используйте:
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
sudo ubuntu-cve-2019-14287-patch-manager
Это изменение репозитория требуется в основном для старых лабораторных машин на Ubuntu 19.04. Для производственных систем используйте текущий поддерживаемый выпуск Ubuntu, а не полагайтесь на репозитории с завершённым сроком поддержки.
После загрузки файла .deb в latest release на GitHub пользователи могут установить приложение одной командой:
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
Hivin Manju Sri