fix: harden dual-boot mount options and report directory permissions - #32
Open
jankesec wants to merge 2 commits into
Open
fix: harden dual-boot mount options and report directory permissions#32jankesec wants to merge 2 commits into
jankesec wants to merge 2 commits into
Conversation
…report permissions (CWE-266, CWE-200)
/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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Özet
Bu geliştirme,
pardus-aboutbileşeni içerisindeki iki ayrı güvenlik riskini (yetki yükseltme ve hassas sistem bilgilerinin yetkisiz okunması) gidermektedir:DualBootManager.py- Güvenli Bağlama Seçenekleri (nosuid,nodev,noexec) (CWE-266 / CWE-250):tr.org.pardus.pkexec.pardus-about.system_info) root olarak çalışan ikili önyükleme (dual boot) tespit mantığı, disk bölümlerini/run/winrootaltınamount -o defaults,roile bağlamaktaydı.defaultsseç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.ro,nosuid,nodev,noexecolarak sıkılaştırılmış,winroot_dirdizini için sembolik bağ koruması ve0700izinleri sağlanmış, ayrıcaos.systemçağrısı güvenlisubprocess.runlisteli argüman yapısına geçirilmiştir.SystemReportManager.py- Rapor Dizini İzinlerinin Kısıtlanması (CWE-200 / CWE-732):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ıpchmod 755 -Rile herkese okunabilir (world-readable) yapmaktaydı.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
defaults,robağlama —nosuidyok (PA-02 + PA-18)CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hchmod 755 -R(SR-07)CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:L/A:NGerekçe
tr.org.pardus.pkexec.pardus-about.system_infopolitikasıallow_active=yesolduğu için aktif oturumdaki yönetici olmayan kullanıcı dual-boot tespitini parolasız tetikleyebilir. Bölümlermount -o defaults,roile bağlanır;nosuid,nodev,noexecyoktur. 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.auth_administer (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:mountkomutunaro,nosuid,nodev,noexecparametreleri eklendi./run/winrootdizini oluşturulmadan önce sembolik bağ kontrolü eklendi ve dizin erişim izinleri0700ile sınırlandı.os.system("umount -lf /run/winroot")çağrısı güvenlisubprocess.run(["umount", "-lf", winroot_dir], check=False)ile değiştirildi.src/util/SystemReportManager.py:ARCHIVE_DIRve kullanıcı alt dizinimode=0o700ile oluşturuldu.subprocess.run(["chmod", "755", "-R", ARCHIVE_DIR])çağrısıchmod 700 -Ryapılarak diğer yetkisiz yerel kullanıcıların rapor dosyalarını okuması engellendi.generate_user_reportfonksiyonunda da dizin oluşturma izinleri0700olarak 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:
nosuid,noexecbayrakları sayesinde çalıştırılması engellenmiş (Permission denied) ve yetki yükseltme vektörü kapatılmıştır.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.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.