
مدير التصحيحات
مدير التصحيح لأوبونتو CVE-2019-14287 هو أداة معملية بواجهة رسومية للتحقق من الحماية ضد ثغرة CVE-2019-14287 وتخفيفها والتحقق منها، وهي ثغرة تصعيد امتيازات في sudo.
تم تطوير هذا المشروع لبيئة معملية تعمل بأوبونتو 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، فقد نُفذ الأمر كجذر.
يوفر التطبيق طبقتين من الحماية:
تصحيح حزمة 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/ generated at runtime
├── backups/ generated at runtime
├── package/ generated during .deb build
└── dist/ generated .deb output
قم بتثبيت التبعيات:
sudo apt update
sudo apt install -y python3 python3-tk sudo
انتقل إلى مجلد المشروع:
cd ~/projects/ubuntu-cve-2019-14287-patch-manager
شغّل التطبيق:
sudo python3 app.py
يجب تشغيل التطبيق كجذر لأنه يحتاج إلى الوصول إلى:
/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'
أوبونتو 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 المحلي على أوبونتو 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
هذا التغيير في المستودعات مطلوب بشكل أساسي لأجهزة المعمل القديمة التي تعمل بأوبونتو 19.04. بالنسبة للأنظمة الإنتاجية، استخدم إصدار أوبونتو مدعومًا حاليًا بدلاً من الاعتماد على مستودعات منتهية الصلاحية.
بعد رفع ملف .deb إلى أحدث إصدار على 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