fix: harden sources.list validation, temp file handling and group script - #24
fix: harden sources.list validation, temp file handling and group script#24jankesec wants to merge 4 commits into
Conversation
…d harden group management (CWE-184, CWE-377, CWE-250)
The outer try around APT cache init was closed before the existing cache.upgrade try, which is a SyntaxError. Nest the upgrade/report body inside the same try so the finally always cleans the temp sources list.
Reject only security-weakening options (trusted=*, allow-insecure, check-valid-until=false, attacker-controlled signed-by paths). Keep http/https URIs, [arch=...], and signed-by under /usr/share/keyrings or /etc/apt/keyrings so dist-upgrade of stock Pardus/Debian lines is unchanged.
|
İş akışı notu (lab, Pardus 25.2): Resmi
|
|
Önceki iş akışı notunu sadeleştireyim — bu bulgu false positive değil. Sorun (gerçek): 0.7.0’daki kara liste yalnızca Yama ne yapıyor: Kötü seçenekleri ( Yani: zafiyet duruyor, düzeltme kullanıcı güncellemesini kırmıyor. |
Comma-splitting options treated extra signed-by paths as unknown tokens and allowed them. Parse option boundaries so each signed-by path must stay under /usr/share/keyrings or /etc/apt/keyrings. Unknown keys such as trusted and inrelease-path are denied.
|
Resmi Pardus satırları ( |
Özet
Bu geliştirme,
pardus-updatebileşeni içerisindeki üç ayrı güvenlik ve kararlılık riskini (kaynak listesi doğrulaması kara liste atlatması, öngörülebilir geçici dosya yolu üzerinden hizmet reddi ve grup betiği girdi güvenliği) gidermektedir:is_safe_sources()Güvenli Liste (Whitelist) Doğrulaması (CWE-184 / CWE-20):SysActions.pyveAptSourceActions.pybetiklerindekiis_safe_sources()kontrolü önceki uygulamada kara liste (blacklist) yaklaşımı kullanmakta ve yalnızcatrusted=yes,trusted=trueilefile://dizelerini filtrelemekteydi.trusted=1,trusted=on,trusted=with,trusted=enablegibiStringToBooltruthy değerlerini de imzasız depoları güvenilir kabul etmek için geçerli saymaktadır. Ayrıcafile:/(tek eğik çizgi) biçimindeki yerel depolar da bu filtreden kaçabilmekteydi.http://vehttps://protokollerine izin verilmiş,file:,copy:,cdrom:gibi yerel/güvensiz şemalar koşulsuz engellenmiş ve seçenekler ([...]) içerisindetrusted,allow-insecure,allow-downgrade,signed-bygibi güvenliği zayıflatan tüm parametreler kesin olarak reddedilmiştir.Öngörülebilir
/tmp/tmp-sources.listYolu ve Hizmet Reddi Önlemesi (CWE-377 / CWE-379):controldistupgrade()vedownupgrade()fonksiyonları geçici kaynak listesini/tmp/tmp-sources.listadlı sabit ve tahmin edilebilir bir yola yazmaktaydı. Yetkisiz bir yerel kullanıcının bu dosyayı önceden oluşturması durumunda kök kullanıcı (root) dosyaya yazamamakta ve yükseltme denetimi kalıcı olarak kilitlenmekteydi (Hizmet Reddi / DoS)./run/pardus-update/dizini altında güvenle oluşturulmakta, dizinin bulunmaması durumunda isetempfile.mkstempile tahmin edilemez adlı ve0600izinli güvenli geçici dosya açılmaktadır. İşlem tamamlandığındafinallybloğu ile geçici dosya sistemden güvenle temizlenmektedir.Group.pyArgüman ve Kullanıcı Doğrulaması (CWE-250 / CWE-20):IndexErrorçökmesi giderilmiş, kullanıcı adı POSIX standardına (^[a-zA-Z0-9_.][a-zA-Z0-9_.-]*\$?$) vepwd.getpwnam()sistem kullanıcı veritabanı kontrolüne tabi tutulmuştur.📊 Önerilen CVSS 3.1
is_safe_sourceskara liste atlatması + grup delegasyonu (PU-14 + UG-12)CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H/tmp/tmp-sources.list(PU-19)CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:LGroup.pyargüman / kullanıcı doğrulamasıGerekçe
pardus-updategrubu üyesi (yönetici olmayan, sevkiyattaki parolasız-güncelleme özelliğiyle eklenen kullanıcı)pardus-update-sysactioneylemini parolasız çağırabilir. 0.7.0'dakiis_safe_sources()kara listesitrusted=1/trusted=on/file:/gibi APTStringToBooldoğruluk değerleriyle atlatılır; imzasız depo + çevrimdışı yükseltme zinciri kök yetkisine götürür.AC:H, kötü niyetli depo ve yükseltme/reboot akışı gerektiği içindir. Bu, CVE-2026-16287 düzeltmesinin eksik kalan parçasıdır./tmp/tmp-sources.listyolunu önceden oluşturarak yükseltme denetimini kilitleyebilir (hizmet reddi). Gizlilik/bütünlük etkisi yoktur.Group.pydoğrulaması tek başına LPE değildir (auth_admingerekir); zincirin yardımcı yüzeyini kapatır.Yapılan Değişiklikler
src/SysActions.py&src/AptSourceActions.py:is_safe_sources()fonksiyonu güvenli liste mantığıyla yeniden yapılandırıldı;re.matchile URI ve seçenek blokları ayrıştırıldı.write_temp_sources_list()vecleanup_temp_sources_list()yardımcı fonksiyonları eklenerek/run/pardus-update/vetempfilegüvenli dosya yönetimine geçildi.controldistupgradevedownupgradefonksiyonlarıtry ... finallybloklarıyla sarılarak geçici dosyaların ve APT yapılandırmasının her durumda temizlenmesi güvenceye alındı.src/Group.py:len(sys.argv) < 3) eklendi.pwd.getpwnam()kontrolü eklendi.Laboratuvar Doğrulaması ve Regresyon Testleri
Bu çalışma, izole laboratuvar ortamında kapsamlı birim testleri ve senaryolarla test edilmiş ve doğrulanmıştır:
trusted=1,trusted=01,trusted=on,trusted=with,trusted=enable,trusted=yes,trusted=truegibi tüm varyantlarınis_safe_sources()tarafından başarıyla yakalanıp reddedildiği doğrulandı.file:/,file:///,copy:/,cdrom:/,ftp://protokollerinin vesigned-by=/...manipülasyonlarının engellendiği teyit edildi./tmp/tmp-sources.listdosyasının yetkisiz kullanıcı tarafından önceden oluşturulması durumunda dahi yükseltme simülasyonunun/run/pardus-update/üzerinden güvenle çalıştığı ve hizmet reddinin (DoS) engellendiği doğrulandı.IndexErrorgiderildi), geçersiz kullanıcıların engellendiği teyit edildi.http://depo.pardus.org.tr/pardus yirmibes main,[arch=amd64], güvenlik depoları) test edilmiş; meşru kaynak listelerinin sorunsuz kabul edildiği, paket listeleme ve güncelleme denetimi işlevlerinde herhangi bir aksama veya gerileme yaşanmadığı doğrulanmıştır.Pardus ekibine kıymetli çalışmaları ve emekleri için teşekkür eder, incelemenize sunarız.