mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
13 KiB
13 KiB
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.pyboş veritabanında varsayılanadmin/adminhesabı oluşturmaktadır. Bu hesap doğrudan yetki gaspına yol açar. - Güvenlik (P1):
accounts/views.pyiçindekiredirect(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.keypublicalanımax_length=500ile sınırlıdır; RSA-4096 anahtarları (~730 karakter) ve sertifikalı anahtarlar kesilmekte veya kaydedilememektedir (TextFieldolmalı).on_delete=models.DO_NOTHINGyetim kayıt bırakmaktadır (CASCADEolmalı). - İ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):
ComputeViewSetyalnızcaIsAuthenticatedizni gerektirmektedir.ComputeSerializerisepasswordalanı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_busesveoverviewendpoint'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):
InstanceViewSetnested 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_instancesizni salt okunur olarak tasarlanmasına rağmen,instanceview fonksiyonlarında power on/off/force off, snapshot ve konfigürasyon değişikliklerine izin vermektedir. - Güvenilirlik (P1):
refresh_instance_databasefonksiyonu libvirt'ten anlık yanıt alınamadığında DB kaydını silmekte, bu daUserInstancesahiplik ilişkilerini kalıcı olarak silmektedir. - İyileştirme (P2): 1,959 satırlık monolitik
instances/views.pydosyası ve 30'dan fazlarequest.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_filefonksiyonundakitarget_temp.startswith(path)kontrolü yetersizdir;/var/lib/images-evilgibi 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.pydetay görünümündesuperuser_onlyeksiktir; 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):
novncddaemon'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):
socketiodtek 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.pyyalnızcalogin_requirediçermekte; standart bir kullanıcı global sistem ayarlarını ve SASS derleme dizinini değiştirebilmektedir. - İyileştirme (P2):
Logsmodeli kaynak IP adresi, işlem sonucu (başarı/hata) ve korelasyon ID'si içermemektedir.auto_now=Trueyerine değişmezauto_now_add=Truekullanı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 /
pflashgeçici olarakromyapılırkenfinallybloğ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ı ✅)
- API Yetkilendirme & Secret İzolasyonu: [x]
ComputeViewSet,StorageViewSet,VolumeViewSet,NetworkViewSet,InterfaceViewSet,MigrateViewSet,CreateInstanceViewSetsınıflarınapermission_classes = [IsSuperUser](admin.permissions.IsSuperUser) atanarakis_staffyetki aşımı tamamen önlendi;FlavorViewSetmutasyonları süper kullanıcılara sınırlandı.@superuser_onlydekoratörüne@wraps(function)eklenerek fonksiyon meta verileri korundu.ComputeSerializeriçindekipasswordalanınawrite_only=Trueverildi; GET yanıtlarında şifre ifşası tamamen engellendi.InstanceViewSet.listüzerindeis_adminharici 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.
- 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.novncdveconsole/views.pyiçinde imza doğrulama, 2 dakikalık süre aşımı kontrolü,is_activehesap denetimi ve kullanıcı sahiplik doğrulaması uygulandı.novncdiçerisindekisettings.DEBUGimzası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.
- Varsayılan Hesap ve Arka Plan Daemon Sıkılaştırması: [x]
accounts/apps.pyiçinde hardcodedadmin/adminüretimi kaldırıldı;ADMIN_PASSWORDortam değişkeni veyasecrets.token_urlsafe(16)ile rastgele güçlü parola üretimi sağlandı (test modunda test ortamı uyumluluğu korundu).conf/daemon/gstfsdvarsayılan olarak127.0.0.1(loopback) üzerine bağlandı ve ortam değişkeni (GSTFSD_BIND_HOST) ile yapılandırılabilir hale getirildi.
- Appsettings & NWFilter İzin Sıkılaştırması: [x]
appsettings/views.pyvenwfilters/views.py(nwfilterdetay görünümü dahil)@superuser_onlydekoratö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)
- Veritabanı Senkronizasyonunda Sahiplik Koruması:
refresh_instance_databaseiçinde instance'ları anında silmek yerinemissingolarak işaretleme ve grace period tanıma.- Periyodik senkronizasyonu sayfa GET isteklerinden ayırıp arka plan görevine devretme.
- Snapshot Güvenliği ve Rollback Garantisi:
vrtManager/instance.pysnapshot fonksiyonlarınatry...finallyblokları eklenerek XML'in her koşulda orijinal haline getirilmesi.
- Upload Güvenliği ve Path Traversal Engeli:
storages/views.pyiçindePath.resolve().relative_to()ile kesin dizin sınır denetimi.- Paramiko
AutoAddPolicyyerine kontrollüknown_hostsve fingerprint doğrulama.
- XML Injection Koruması:
vrtManager/create.pyvenetwork.pyiçindeki string birleştirmelerininlxml.builder/xml.etreeile güvenli eleman inşasına dönüştürülmesi.
Faz 3: P2 — Mimari İyileştirme ve Django 5 Geçiş Hazırlığı (Orta Vade)
- Django 5.x Uyumluluğu:
USE_L10Nayarının kaldırılması.django-login-required-middlewareyerine Django 5 yerelLoginRequiredMiddlewareplanlaması.
- OpenAPI / drf-spectacular Standardizasyonu:
- Tüm viewset'lerin
@extend_schemaile belgelenmesi, eksik serializer sınıflarının tanımlanması.
- Tüm viewset'lerin
- Monolitik Görünümlerin Modülerleştirilmesi:
instances/views.pyiçerisindeki yaşam döngüsü aksiyonlarının (power, volume, snapshot, network) ayrıştırılması.
- 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)
- 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.
- 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).
- 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.