Skip to content

fix: harden dual-boot mount options and report directory permissions - #32

Open
jankesec wants to merge 2 commits into
pardus:masterfrom
jankesec:fix/secure-mount-options-and-report-permissions
Open

fix: harden dual-boot mount options and report directory permissions#32
jankesec wants to merge 2 commits into
pardus:masterfrom
jankesec:fix/secure-mount-options-and-report-permissions

Conversation

@jankesec

@jankesec jankesec commented Sep 4, 2026

Copy link
Copy Markdown

Özet

Bu geliştirme, pardus-about bileşeni içerisindeki iki ayrı güvenlik riskini (yetki yükseltme ve hassas sistem bilgilerinin yetkisiz okunması) gidermektedir:

  1. DualBootManager.py - Güvenli Bağlama Seçenekleri (nosuid,nodev,noexec) (CWE-266 / CWE-250):

    • Polkit yetkilendirmesiyle (tr.org.pardus.pkexec.pardus-about.system_info) root olarak çalışan ikili önyükleme (dual boot) tespit mantığı, disk bölümlerini /run/winroot altına mount -o defaults,ro ile bağlamaktaydı.
    • defaults seçeneği altında bağlı dosya sistemi üzerinde bulunan SUID/SGID bitine sahip ikili dosyalar ve aygıt düğümleri kısıtlanmamaktaydı. Yerel bir saldırganın diğer bölümlere yerleştirdiği bir SUID dosyayı bu bağlama işlemi esnasında tetiklemesi yetki yükseltmeye (privilege escalation) imkan tanıyabilirdi.
    • Düzeltme ile bağlama parametreleri ro,nosuid,nodev,noexec olarak sıkılaştırılmış, winroot_dir dizini için sembolik bağ koruması ve 0700 izinleri sağlanmış, ayrıca os.system çağrısı güvenli subprocess.run listeli argüman yapısına geçirilmiştir.
  2. SystemReportManager.py - Rapor Dizini İzinlerinin Kısıtlanması (CWE-200 / CWE-732):

    • Sistem raporlama aracı; sistem günlüklerini (journalctl), çekirdek mesajlarını (dmesg), çekirdek parametrelerini (sysctl), PCI/USB aygıt dökümlerini ve APT kaynaklarını /tmp/pardus_system_report/ dizini altında toplayıp chmod 755 -R ile herkese okunabilir (world-readable) yapmaktaydı.
    • Düzeltme ile rapor dizini oluşturulurken ve raporlama tamamlandıktan sonra dizin izinleri 0700 (chmod 700 -R) olarak ayarlanmış; toplanan hassas sistem bilgilerine yalnızca raporu üreten kullanıcının ve root yetkisinin erişmesi güvence altına alınmıştır.

📊 Önerilen CVSS 3.1

Bulgu CWE Skor Şiddet Vektör
Dual-boot defaults,ro bağlama — nosuid yok (PA-02 + PA-18) CWE-266, CWE-250, CWE-269 7.8 Yüksek CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Sistem raporu dizini chmod 755 -R (SR-07) CWE-200, CWE-732, CWE-377 5.1 Orta CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:L/A:N

Skorlar CVSS v3.1 ile bağımsız hesaplanmıştır (NVD / resmi CVE skoru değildir). Yerel pkexec → root zincirlerinde kapsam S:U alınmıştır (PwnKit emsali). Şiddet bantları: 0.1–3.9 Düşük, 4.0–6.9 Orta, 7.0–8.9 Yüksek.

Gerekçe

  • 7.8 (Yüksek): tr.org.pardus.pkexec.pardus-about.system_info politikası allow_active=yes olduğu için aktif oturumdaki yönetici olmayan kullanıcı dual-boot tespitini parolasız tetikleyebilir. Bölümler mount -o defaults,ro ile bağlanır; nosuid,nodev,noexec yoktur. SUID kök ikilisi bu bağlama üzerinden çalıştırılabilir. Kapsam S:U (PwnKit ile aynı çerçeve); 8.8 (S:C) kullanılmamıştır.
  • 5.1 (Orta): Rapor üretimi auth_admin ister (PR:H). Üretim sonrası /tmp/pardus_system_report/ özyinelemeli 0755 yapıldığından journal/dmesg/sysctl dökümü diğer yerel kullanıcılara açık kalır (C:H).

Yapılan Değişiklikler

  • src/util/DualBootManager.py:

    • mount komutuna ro,nosuid,nodev,noexec parametreleri eklendi.
    • /run/winroot dizini oluşturulmadan önce sembolik bağ kontrolü eklendi ve dizin erişim izinleri 0700 ile sınırlandı.
    • os.system("umount -lf /run/winroot") çağrısı güvenli subprocess.run(["umount", "-lf", winroot_dir], check=False) ile değiştirildi.
    • Dizin temizleme işlemlerinde olası hata durumları için koruyucu bloklar eklendi.
  • src/util/SystemReportManager.py:

    • ARCHIVE_DIR ve kullanıcı alt dizini mode=0o700 ile oluşturuldu.
    • subprocess.run(["chmod", "755", "-R", ARCHIVE_DIR]) çağrısı chmod 700 -R yapılarak diğer yetkisiz yerel kullanıcıların rapor dosyalarını okuması engellendi.
    • generate_user_report fonksiyonunda da dizin oluşturma izinleri 0700 olarak eşitlendi.

Laboratuvar Doğrulaması ve Regresyon Testleri

Bu çalışma, izole bir Pardus 25 (yirmibes - Debian 13 tabanlı) laboratuvar ortamında hem zafiyetlerin engellenmesi hem de uygulamanın normal işlevleri açısından kapsamlı olarak test edilmiştir:

  • Bağlama (Mount) Güvenliği: İkincil bir bölüme yerleştirilen SUID ikili dosyasının nosuid,noexec bayrakları sayesinde çalıştırılması engellenmiş (Permission denied) ve yetki yükseltme vektörü kapatılmıştır.
  • Rapor İzinleri: Rapor dizini drwx------ (700) izinleriyle sınırlandırılmış; yetkisiz yerel kullanıcıların sistem günlüklerine erişimi başarıyla engellenmiştir.
  • İşlevsel Doğrulama (Regresyon Testi): İkili önyükleme tespit fonksiyonu (get_dualboot_oses()) çalıştırılmış; Windows ve Linux bölümlerinin doğru şekilde tespit edildiği (Çıkış: 0), sistem raporu üretme işlevinin eksiksiz çalıştığı ve kullanıcı arayüzünde herhangi bir işlevsel gerileme veya problem oluşmadığı teyit edilmiştir.

Pardus ekibine kıymetli çalışmaları ve emekleri için teşekkür eder, incelemenize sunarız.

@jankesec jankesec changed the title fix: güvenli mount seçenekleri (nosuid,nodev,noexec) ve rapor dizini izinlerinin kısıtlanması (CWE-266, CWE-200) fix: harden dual-boot mount options and report directory permissions Sep 4, 2026
/tmp/pardus_system_report remains replaceable between rmtree and
makedirs. /run/pardus-about-report is root-owned tmpfs, so the
directory cannot be planted as a symlink by another user.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant