Skip to content

fix: prevent apt argument injection and propagate installer exit codes - #9

Open
jankesec wants to merge 1 commit into
pardus:masterfrom
jankesec:fix/secure-actions-parameter-handling
Open

fix: prevent apt argument injection and propagate installer exit codes#9
jankesec wants to merge 1 commit into
pardus:masterfrom
jankesec:fix/secure-actions-parameter-handling

Conversation

@jankesec

@jankesec jankesec commented Sep 4, 2026

Copy link
Copy Markdown

Özet

Bu geliştirme, /usr/share/pardus/pardus-package-installer/src/Actions.py Polkit yetkilendirme betiğinde APT komutlarına yönelik olası parametre/bayrak enjeksiyonu (Argument Injection - CWE-88) riskini giderir, paket girdilerini doğrular, IndexError çökmesini önler ve alt süreç dönüş kodlarının doğru şekilde iletilmesini sağlar.

📊 Önerilen CVSS 3.1

Bulgu CWE Skor Şiddet Vektör
APT argüman / bayrak enjeksiyonu (PI-13) CWE-88, CWE-20 4.2 Orta CVSS:3.1/AV:L/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:L

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

  • PR:H: tr.org.pardus.pkexec.pardus-package-installer.actions auth_admin ister.
  • Sınır (abartılmamalı): Girdi tek argv elemanı olarak apt'e gider; -- ayracı olmadığı için -o... bayrak enjeksiyonu mümkündür. Canlı testte Dpkg::Pre-Invoke kancası tetiklenmemiştir (paket kurulmadığı için dpkg çalışmaz). Bu doğrudan RCE değildir; girdi doğrulama ve kardeş paket (pardus-software) ile tutarsızlıktır.
  • Çıkış kodunun maskelenmesi güvenlik skoru değil, kararlılık düzeltmesidir.

Karşılaşılan Güvenlik ve Kararlılık Problemleri (CWE-88, CWE-20)

Actions.py betiği Polkit üzerinden (tr.org.pardus.pkexec.pardus-package-installer.actions eylemi) root yetkileriyle çalıştırılmaktadır.

Önceki uygulamada:

def install(debianpackage):
    subprocess.call(["apt", "install", debianpackage, "-yq", "-o", "APT::Status-Fd=2",
                     "-o", "Dpkg::Options::=--force-confnew"],
                    env={**os.environ, 'DEBIAN_FRONTEND': 'noninteractive'})
...
if len(sys.argv) > 1:
    if control_lock():
        if (sys.argv[1] == "install"):
            install(sys.argv[2])

Bu yapılandırmada aşağıdaki sorunlar tespit edilmiştir:

  1. Argüman ve Parametre Enjeksiyonu (CWE-88): debianpackage parametresi apt komut dizisi içerisine herhangi bir bayrak ayracı (--) olmaksızın yerleştirilmekteydi. Girdi tire (-) ile başladığında (örneğin --option=... veya -oAPT::...), apt bunu bir paket adı olarak değil, bir komut satırı yapılandırma seçeneği olarak yorumlayabilmekteydi.
  2. Girdi Doğrulama Eksikliği (CWE-20): Paket adı veya dosya yolu biçimsel olarak (\n, geçersiz karakterler, dosya varlığı) denetlenmemekteydi.
  3. IndexError Çökmesi: len(sys.argv) > 1 koşulu nedeniyle betik tek argümanla çağrıldığında sys.argv[2] erişimi yakalanmamış IndexError ile çökmekteydi.
  4. Hata Kodunun Maskelenmesi: Fonksiyonlar subprocess.call çıkış kodunu üst sürece (MainWindow.py) iletmediği için apt başarısız olsa dahi betik daima 0 ile sonlanmaktaydı.

Yapılan Değişiklikler

  1. -- Bayrak Ayracı: Tüm apt komut çağrılarında paket parametresinden hemen önce -- ayracı eklenerek girdinin bayrak olarak yorumlanması kesin olarak engellendi.
  2. Sıkı Girdi Doğrulaması:
    • Paket parametresinin tire (-) ile başlaması, satır sonu veya boşluk içermesi engellendi.
    • remove işlemi için paket adının Debian paket adlandırma standardına (^[a-zA-Z0-9][a-zA-Z0-9+.-]*$) uygunluğu denetlendi.
    • .deb dosyası üzerinden yapılan işlemlerde dosyanın diskteki varlığı (os.path.isfile) kontrol edildi.
  3. Argüman Denetimi ve Hata Kodu İletimi:
    • Eksik argüman kontrolü yapılarak IndexError çökmesi giderildi.
    • subprocess.call sonucu dönen çıkış kodu sys.exit(rc) ile ana sürece iletilerek arayüzün işlem sonucunu doğru takip etmesi sağlandı.

Laboratuvar Doğrulaması ve Regresyon Testleri

Bu çalışma, izole bir Pardus 25 (yirmibes - Debian 13 tabanlı) laboratuvar ortamında hem zafiyet engelleme hem de paket yönetim fonksiyonları açısından iki tur halinde test edilip doğrulanmıştır:

  • Parametre Enjeksiyonu Engeli: --help, -s, -oAPT::... gibi parametre enjeksiyon denemeleri sys.exit(1) ile güvenle engellendi.
  • Girdi ve Dosya Doğrulaması: Sistemde bulunmayan .deb dosyaları ve geçersiz adlandırmalar kontrollü şekilde reddedildi.
  • İşlevsel Doğrulama (Regresyon Testi): Gerçek bir Debian paketi (hello) üzerinden hem kurulum (install) hem de kaldırma (remove) işlemleri uçtan uca test edilmiş; paket başarıyla kurulup kaldırılmış (Çıkış: 0), arayüze iletilen ilerleme akışının (APT::Status-Fd=2) hatasız çalıştığı ve mevcut paket kurma işlevinde hiçbir aksama veya regresyon oluşmadığı doğrulanmıştır.

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

@jankesec jankesec changed the title fix: Actions betiğinde argüman enjeksiyonunun önlenmesi, girdi doğrulaması ve dönüş kodu iletimi (CWE-88, CWE-20) fix: prevent apt argument injection and propagate installer exit codes Sep 4, 2026
@xHector1337

Copy link
Copy Markdown

AI'ya buldurmayın kuzum, saksıyı çalıştırın

@jankesec

jankesec commented Sep 11, 2026

Copy link
Copy Markdown
Author

AI'ya buldurmayın kuzum, saksıyı çalıştırın @xHector1337

Lise arkadaşın değilim, bu samimiyet nereden geliyor? Eleştirilerinde üslubunu korumalısın.

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.

2 participants