1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00
webvirtcloud/ROADMAP.md

15 KiB
Raw Blame History

WebVirtCloud — Kapsamlı Kod İnceleme, Güvenlik Denetimi ve Yol Haritası (Roadmap)

Bu belge; Antigravity ve Codex tarafından gerçekleştirilen modül bazlı bağımsız güvenlik, güvenilirlik, mimari ve geliştirme denetimlerinin sentezini ve önceliklendirilmiş aksiyon planını içermektedir.


1. Yönetici Özeti ve Karşılaştırmalı Değerlendirme

WebVirtCloud kod tabanı; temel sanallaştırma orkestrasyonu için işlevsel bir temel sunmakla birlikte, özellikle REST API yetkilendirme modelleri, konsol oturum doğrulama mekanizmaları, libvirt eşzamanlılığı (concurrency) ve veri bütünlüğü korumaları açısından önemli güvenlik ve kararlılık riskleri barındırmaktadır.

İnceleme Perspektifleri Karşılaştırması

Kapsam Antigravity Odak Noktaları Codex Odak Noktaları Birleşik Konsensus / Kritik Aksiyon
API & Yetkilendirme ComputeSerializer düz metin parola sızıntısı; ComputeViewSet normal kullanıcılara açık; instances nested endpoint bilgi ifşası. API viewset'lerinde genel RBAC ve tenant izolasyonu yokluğu; FlavorViewSet ve StorageViewSet denetimsiz erişimi. P0: API viewset'leri derhal IsAdminUser ile sınırlandırılmalı, password alanı serileştirmeden çıkarılmalı.
Konsol Güvenliği novncd token formatı (host-uuid) tahmini kolay, imzasız ve süresiz. novncd oturum/kullanıcı denetimi yapmıyor; socketiod tek bir global process ve paylaşımlı PTY state kullanıyor. P0: HMAC imzalı, kısa ömürlü, kullanıcı ve VM'e bağlı tek kullanımlık token (one-time grant) modeline geçilmeli.
Arka Plan Servisleri Socket/SSH upload senaryolarında konteyner dosya sistemi izolasyonu. gstfsd daemon'u 0.0.0.0:16510 üzerinde kimlik doğrulamasız dinliyor; VM root parolası/SSH key değiştirebiliyor. P0: gstfsd devre dışı bırakılmalı veya loopback + mTLS / Unix domain socket altına alınmalı.
İlk Kurulum / Auth Brute-force koruması yokluğu; open redirect riski (next parametresi). Boş veritabanında otomatik admin/admin hesabı üretimi; view_instances izninin fiilen yetki aşımı sağlaması. P0: Otomatik admin/admin kaldırılmalı; bootstrap token / env şifresi zorunlu kılınmalı.
Veri Bütünlüğü & Senkronizasyon Senkron refr(compute) çağrılarının HTTP isteklerini bloklaması. refresh_instance_database geçici libvirt kesintisinde DB'deki VM'yi silip UserInstance sahipliğini cascade yok ediyor. P1: Silme yerine last_seen_at / missing durumu uygulanmalı; senkronizasyon arka plan kuyruğuna alınmalı.
Libvirt & vrtManager Monolitik view fonksiyonları (30+ request.POST if-else dalı); hata yakalama zafiyetleri. Snapshot sırasında pflash → rom dönüşümünde finally bloğu olmaması; XML injection yüzeyi (f-string XML). P1: lxml builder kullanımı; snapshot geri alma ve hata yakalama state machine mimarisi.

2. Modül Bazında Detaylı Değerlendirme

2.1. accounts (Kullanıcılar, İzinler ve Kimlik Doğrulama)

  • Güvenlik (P0): accounts/apps.py boş veritabanında varsayılan admin/admin hesabı oluşturmaktadır. Bu hesap doğrudan yetki gaspına yol açar.
  • Güvenlik (P1): accounts/views.py içindeki redirect(next) çağrıları URL whitelist doğrulaması (url_has_allowed_host_and_scheme) yapmadığından Açık Yönlendirme (Open Redirect) açığı barındırır.
  • Güvenilirlik (P1): UserSSHKey.keypublic alanı max_length=500 ile sınırlıdır; RSA-4096 anahtarları (~730 karakter) ve sertifikalı anahtarlar kesilmekte veya kaydedilememektedir (TextField olmalı). on_delete=models.DO_NOTHING yetim kayıt bırakmaktadır (CASCADE olmalı).
  • İyileştirme (P2): Giriş denemeleri için brute-force / hız sınırlaması (Rate Limiting / django-axes) entegrasyonu.

2.2. computes (Hesaplama Düğümleri ve Libvirt Ana Makineleri)

  • Kritik Güvenlik (P0): ComputeViewSet yalnızca IsAuthenticated izni gerektirmektedir. ComputeSerializer ise password alanını hem yazılabilir hem okunabilir döndürmektedir. Herhangi bir standart kullanıcı GET /api/v1/computes/ ile hipervizör parolalarını ve SSH erişim bilgilerini düz metin olarak ele geçirebilir!
  • Güvenlik (P1): Compute parolaları veritabanında düz metin saklanmaktadır. Şifrelenmiş depolama (Fernet / envelope encryption) zorunludur.
  • Güvenilirlik (P1): compute_graph, get_compute_disk_buses ve overview endpoint'leri libvirt bağlantı hatalarını kontrollü yakalamamakta ve 500 hatası üretmektedir.

2.3. instances (Sanal Sunucu Yaşam Döngüsü)

  • Güvenlik (P0): InstanceViewSet nested endpoint'i (/api/v1/computes/{compute_pk}/instances/) kullanıcı sahipliği filtrelemesi yapmadan tüm sunucuları ve UUID'leri döndürmektedir.
  • Güvenlik (P1): view_instances izni salt okunur olarak tasarlanmasına rağmen, instance view fonksiyonlarında power on/off/force off, snapshot ve konfigürasyon değişikliklerine izin vermektedir.
  • Güvenilirlik (P1): refresh_instance_database fonksiyonu libvirt'ten anlık yanıt alınamadığında DB kaydını silmekte, bu da UserInstance sahiplik ilişkilerini kalıcı olarak silmektedir.
  • İyileştirme (P2): 1,959 satırlık monolitik instances/views.py dosyası ve 30'dan fazla request.POST.get() dalı; sınıf tabanlı modüler view'lara veya servis katmanına refactor edilmelidir.

2.4. storages (Depolama Havuzları ve Diskler)

  • Güvenlik (P1): handle_uploaded_file fonksiyonundaki target_temp.startswith(path) kontrolü yetersizdir; /var/lib/images-evil gibi prefix bypass'larına açıktır (Path.resolve().relative_to() kullanılmalı).
  • Güvenlik (P1): SFTP ile ISO yüklemesinde paramiko.AutoAddPolicy() kullanılarak SSH Man-in-the-Middle (Ortadaki Adam) saldırılarına açık bırakılmıştır.
  • Artı Değer (P2): qcow2/raw dönüştürme ve boyutlandırma işlemleri senkron yürütülmektedir; uzun süren disk işlemleri asenkron iş kuyruğuna (Celery/Huey) taşınmalıdır.

2.5. networks & interfaces (Ağ ve Arayüz Yönetimi)

  • Güvenlik (P1): nwfilters/views.py detay görünümünde superuser_only eksiktir; standart kullanıcı filtre XML'lerini okuyup değiştirebilmektedir.
  • Güvenilirlik (P1): Ağ XML tanımlamaları f-string ile üretilmekte olup XML injection riskine açıktır.

2.6. console (noVNC ve Terminal Konsolları)

  • Kritik Güvenlik (P0): novncd daemon'u token olarak yalnızca <compute_id>-<uuid> formatını doğrulamakta; kullanıcı kimliği, oturum geçerliliği veya zaman aşımı denetlememektedir. UUID'yi bilen herkes VNC masaüstüne doğrudan bağlanabilmektedir.
  • Kritik Güvenlik (P0): socketiod tek bir global process değişkeni (child_pid, fd) kullanmakta; tüm kullanıcılara aynı terminal akışını broadcast etmekte ve karşılıklı komut girişine izin vermektedir.

2.7. logs & appsettings (Denetim Kayıtları ve Uygulama Ayarları)

  • Güvenlik (P1): appsettings/views.py yalnızca login_required içermekte; standart bir kullanıcı global sistem ayarlarını ve SASS derleme dizinini değiştirebilmektedir.
  • İyileştirme (P2): Logs modeli kaynak IP adresi, işlem sonucu (başarı/hata) ve korelasyon ID'si içermemektedir. auto_now=True yerine değişmez auto_now_add=True kullanılmalıdır.

2.8. vrtManager (Libvirt Soyutlama Katmanı)

  • Güvenilirlik (P1): wvmConnect.close() metodu boştur; kopan libvirt soketleri yeniden bağlanırken eski proxy nesnelerindeki referanslar güncellenmemektedir.
  • Güvenilirlik (P1): Snapshot işlemlerinde UEFI NVRAM / pflash geçici olarak rom yapılırken finally bloğu eksiktir; hata durumunda VM XML'i bozuk kalmaktadır.

3. Önceliklendirilmiş Uygulama Planı (Aksiyon Listesi)

Faz 1: P0 — Acil Güvenlik Düzeltmeleri ve Codex İnceleme Sıkılaştırması (Tamamlandı ✅)

  1. API Yetkilendirme & Secret İzolasyonu: [x]
    • ComputeViewSet, StorageViewSet, VolumeViewSet, NetworkViewSet, InterfaceViewSet, MigrateViewSet, CreateInstanceViewSet sınıflarına permission_classes = [IsSuperUser] (admin.permissions.IsSuperUser) atanarak is_staff yetki aşımı tamamen önlendi; FlavorViewSet mutasyonları süper kullanıcılara sınırlandı.
    • @superuser_only dekoratörüne @wraps(function) eklenerek fonksiyon meta verileri korundu.
    • ComputeSerializer içindeki password alanına write_only=True verildi; GET yanıtlarında şifre ifşası tamamen engellendi.
    • InstanceViewSet.list üzerinde is_admin harici kullanıcılar için compute üzerinde atanmış instance olup olmadığını kontrol eden ön denetim (tenant pre-check) eklendi; yetkisiz compute sorgulamalarında libvirt senkronizasyonunun gereksiz çalışması (DoS ve bilgi ifşası) engellendi.
  2. noVNC & Konsol Token Güvenliği: [x]
    • django.core.signing.TimestampSigner (salt: console.novnc, TTL: 120 saniye) ile imzalı, kullanıcı ve VM UUID eşleştirmeli token modeline geçildi.
    • novncd ve console/views.py içinde imza doğrulama, 2 dakikalık süre aşımı kontrolü, is_active hesap denetimi ve kullanıcı sahiplik doğrulaması uygulandı.
    • novncd içerisindeki settings.DEBUG imzasız fallback bypass'ı prodüksiyon ortamları için tamamen kaldırıldı; yalnızca birim test çalıştırmaları ("test" in sys.argv) ile sınırlandırıldı.
    • Konsol hata loglarında token bilgisi maskelenerek log sızıntısı önlendi.
  3. Varsayılan Hesap ve Arka Plan Daemon Sıkılaştırması: [x]
    • accounts/apps.py içinde hardcoded admin/admin üretimi kaldırıldı; ADMIN_PASSWORD ortam değişkeni veya secrets.token_urlsafe(16) ile rastgele güçlü parola üretimi sağlandı (test modunda test ortamı uyumluluğu korundu).
    • conf/daemon/gstfsd varsayılan olarak 127.0.0.1 (loopback) üzerine bağlandı ve ortam değişkeni (GSTFSD_BIND_HOST) ile yapılandırılabilir hale getirildi.
  4. Appsettings & NWFilter İzin Sıkılaştırması: [x]
    • appsettings/views.py ve nwfilters/views.py (nwfilter detay görünümü dahil) @superuser_only dekoratörüyle korunarak yetkisiz erişimler 403 Forbidden ile engellendi.
    • Tüm güvenlik geliştirmeleri için kapsamlı testler (computes/test_api_security.py, console/tests.py, appsettings/test_appsettings.py, nwfilters/tests.py) yazılarak test paketi 135/135 test ile %100 yeşil hale getirildi.

Faz 2: P1 — Güvenilirlik, Hata Yakalama ve Veri Bütünlüğü (1-2 Sprint)

  1. Kanonik UUID Reconciliation ve Veri Bütünlüğü: [x]
    • refresh_instance_database (computes/utils.py) ve instances/utils.py:refr kanonik UUID-temelli senkronizasyona geçirildi.
    • Libvirt'in Single Source of Truth (SSOT) ilkesi korundu; virsh veya virt-manager ile silinen VM'ler temizlenirken, VM isim değişikliklerinde UserInstance kullanıcı izinleri ve yetkileri kaybolmadan korunur hale getirildi.
    • Libvirt bağlantı kopmalarında veya soket hatalarında veritabanındaki tüm instance'ların silinmesi (try...except libvirtError ve transaction.atomic()) engellendi.
  2. Yetki ve CSRF Sıkılaştırması: [x]
    • instances/views.py içindeki tüm güç yönetimi aksiyonlarına (poweron, powercycle, poweroff, force_off, suspend, resume) @require_POST zorunluluğu getirildi ve inline CSRF tokenli form butonlarına dönüştürüldü (GET ile VM kapatma/açma açığı kapatıldı).
    • Salt-okunur view_instances iznine sahip kullanıcıların VM kapatıp açması, disk ekleyip silmesi engellendi; UserInstance.is_change ve UserInstance.is_delete nesne bazlı yetki denetimi uygulandı.
    • set_root_pass ve add_public_key içindeki IDOR (güvenlik zafiyeti) kapatılarak oturum açmış kullanıcı ile sınırlandı.
    • API katmanında (instances/api/viewsets.py) compute_pk ve instance eşleşme doğrulaması eklendi.
  3. Açık Yönlendirme (Open Redirect) Engeli: [x]
    • instances/views.py (get_safe_redirect) ve accounts/views.py üzerinde Django url_has_allowed_host_and_scheme ile güvenli yönlendirme sağlandı, harici sitelere yönlendirme engellendi.
  4. SSH Anahtar Modeli ve Doğrulama İyileştirmesi: [x]
    • UserSSHKey.keypublic alanı TextField(max_length=16384) yapıldı (uzun RSA 4096 ve ED25519 anahtarlarının DB'de kesilmesi engellendi) ve user ilişkisine CASCADE tanımlandı.
    • validate_ssh_key 2 parçalı (açıklamasız) ve 3 parçalı (açıklamalı) standart OpenSSH genel anahtarlarını destekleyecek şekilde güncellendi.
  5. Depolama & Yükleme (Upload) Güvenliği: [x]
    • storages/views.py (handle_uploaded_file ve iso_upload) içinde os.path.basename sterilizasyonu, os.path.commonpath yerel dizin jailing, SFTP posixpath sınır denetimi, null-byte/dot engeli uygulandı.
    • Paramiko AutoAddPolicy yerine WarningPolicy() ve load_system_host_keys() getirilerek MITM riski düşürüldü; SFTP bağlantı ve dosya kaynakları try...finally bloklarıyla sızıntısız temizlendi.
  6. Snapshot & XML Güvenliği: [x]
    • vrtManager/instance.py içindeki create_snapshot, create_external_snapshot ve snapshot_revert fonksiyonları try...finally bloklarına alınarak libvirt domain loader XML'inin (pflash/rom) hata durumunda dahi bozulmadan eski haline getirilmesi (recover_snapshot_xml) garanti altına alındı.
    • vrtManager/network.py ve vrtManager/instance.py içindeki name, bridge, gateway, mac_duid vb. dinamik parametreler util.xml_escape ile sterilize edildi; QoS parametreleri tamsayı (int) doğrulamasına alındı.
    • 10 yeni test yazılarak proje genelinde test sayısı 159'a yükseltildi ve test paketi %100 yeşil hale getirildi.

Faz 3: P2 — Mimari İyileştirme ve Django 5 Geçiş Hazırlığı (Orta Vade)

  1. Django 5.x Uyumluluğu:
    • USE_L10N ayarının kaldırılması.
    • django-login-required-middleware yerine Django 5 yerel LoginRequiredMiddleware planlaması.
  2. OpenAPI / drf-spectacular Standardizasyonu:
    • Tüm viewset'lerin @extend_schema ile belgelenmesi, eksik serializer sınıflarının tanımlanması.
  3. Monolitik Görünümlerin Modülerleştirilmesi:
    • instances/views.py içerisindeki yaşam döngüsü aksiyonlarının (power, volume, snapshot, network) ayrıştırılması.
  4. Yapılandırılmış Denetim Günlüğü (Audit Log):
    • IP adresi, aktör, hedef nesne UUID'si ve işlem sonucunu içeren loglama modeli.

Faz 4: P3 — Artı Değer ve İleri Seviye Özellikler (Uzun Vade)

  1. Modern Cloud-Init Desteği:
    • VM oluşturma sihirbazına kullanıcı verisi (user-data), ağ ayarları ve SSH key enjeksiyonu sağlayan NoCloud/ConfigDrive entegrasyonu.
  2. Gerçek Zamanlı Metrik Toplayıcı:
    • Libvirt üzerinden CPU, RAM (balloon), Disk I/O ve Network I/O sayaçlarını periyodik toplayan hafif metrik servisi (Prometheus uyumlu).
  3. Yedekleme ve Geri Yükleme Yönetimi:
    • Anlık görüntüden bağımsız, harici depolama (NFS/S3) hedeflerine zamanlanmış tam ve artımlı yedekleme yeteneği.