HTTP/2 sunucusunda bellek bozulması kaynaklı çökme
Dahili HTTP/2 sunucusunda raporlanan bir bellek bozulması çökmesi giderildi. 5562 recommended duyurusu bunu güvenlik başlığı altında listeliyor.
Dahili HTTP/2 sunucusunda raporlanan bir bellek bozulması çökmesi giderildi. 5562 recommended duyurusu bunu güvenlik başlığı altında listeliyor.
Bağlantı el sıkışması, HTTP istek ayrıştırıcısı ve latent event birleştirmede sınır kontrolleri eksikti. Özel hazırlanmış veri gelince sunucu çökebiliyordu ve sunucu portuna ulaşabilen herkes bunu tetikleyebiliyordu. 38435 veya üstüne geç.
37262 öncesinde netGameEvent paketlerine çekirdekte bir hız sınırı yoktu. Tek bir oyuncu weaponDamageEvent gibi eventleri yağdırıp ana thread'i kilitleyebiliyor, txAdmin de sunucuyu yeniden başlatmak zorunda kalıyordu. Sorun 35636 ve 36727'de raporlandı. 37262 ile yeni 'netGameEvent' hız sınırını aşan oyuncu sunucudan atılıyor.
Oyuncudan sunucuya gelen büyük latent eventlerin birleştirilmesine kesin sınırlar ve 'latent ACK overflow' için teşhis kaydı eklendi. Eski sürümlerde bir oyuncu gereğinden fazla yarım event durumu tutturabiliyordu, bu da bellek ve CPU yiyordu.
Oyunculardan gelen latent (TriggerLatentServerEvent) trafiğinin hız sınırı, reassembly paket işleyicisinde sıkılaştırıldı. Eski sürümlerde bir oyuncu latent event trafiğini olması gerekenden fazla zorlayabiliyordu.
9635 öncesinde bir oyuncu sunucuda sınırsız sayıda yarım kalmış latent event açık tutabiliyordu. Artık varsayılan sınır 100. Sınırı sv_netEventReassemblyMaxPendingEvents ile ayarlayabilirsin, sv_netEventReassemblyUnlimitedPendingEvents ise sınırı kapatır.
OneSync'te modlu bir istemci kendisi için birden fazla ağ oyuncu objesi (CNetObjPlayer) kaydedebiliyordu. Bu, desync ve çökme için bilinen bir suistimal yolu. 23984'ten beri sunucu fazlalarını reddediyor.
Sunucu sahipleri artık block_net_game_event ile oyunculardan gelen belirli net game event türlerini engelleyebiliyor, unblock_net_game_event ile de geri açabiliyor. Bir event türü suistimal ediliyorsa işe yarar. Komut 16541'de sadeleştirildi.
Varsayılanı kapalı olan bu yeni replicated convar, sunucu scriptlerinin oluşturduğu entity'leri oyuncuların silmesine karşı korur. Hileciler sunucunun spawnladığı araç, ped ya da propları siliyorsa 14317 veya üstüne geç ve sv_protectServerEntities true yap.
Sunucu artık bir oyuncunun sahibi olmadığı entity'ler üzerinde başlattığı network synchronized scene'leri kontrol ediyor. Bu, başka oyunculara zorla animasyon oynatmanın yaygın bir yolu. 13174 ayrıca bunu entity bazında yönetmek için SET/GET_ENTITY_REMOTE_SYNCED_SCENES_ALLOWED native'lerini ekliyor.
setr sv_stateBagStrictMode true yaparsan oyuncular replicated state bag'leri hiç değiştiremez, onları yalnızca sunucu yazar. Scriptlerin istemciden yazılan state bag'e ihtiyaç duymuyorsa aç, çünkü hileciler bunları sık sık suistimal ediyor.
7375 öncesinde sunucu, oyuncudan gelen state bag güncellemelerini sınırsız kabul ediyordu. Bir oyuncu sunucunun belleğini bitirebiliyor ya da state bag üzerinden herkese veri yağdırabiliyordu. Artık sınır var, rateLimiter_stateBagSize_rate ve rateLimiter_stateBagSize_burst ile daha da düşürebilirsin.
Gelen state bag paketlerinin doğrulaması sıkılaştırıldı, bozuk istemci paketleri işlenmeden reddediliyor. Eski sürümler bozuk girdiyi daha rahat kabul ediyor.
initConnect sırasında geçersiz bir ticket uzunluğu sunucunun sınır dışı okuma yapmasına yol açabiliyordu ve bağlanmaya çalışan herkes bunu tetikleyebiliyordu. 7290, Cfx.re sürüm API'sinde hâlâ 'critical' minimum sürüm, yani bunun altı asla kullanılmamalı.
Herkese açık /players.json eskiden her oyuncunun kimliklerini (license, Steam, Discord vb.) herkese gösteriyordu. CVE-2024-46310 bu sorunu takip ediyor ve v9601 ile öncesini sayıyor. 10188'den beri sv_exposePlayerIdentifiersInHttpEndpoint true yapmadıkça kimlikler gizli, sv_playersToken ile de endpoint'i kısıtlayabilirsin.
Sunucunun performans ve profiler HTTP endpoint'leri kimlik bilgisi olmadan okunabiliyordu. 'TCP endpoint hardening' kapsamında /perf artık basic auth, profileData.json ise token istiyor. Eski sürümler bu iç verileri URL'yi bilen herkese açıyor.
Kötüye kullanımı önlemek için rcon_password salt okunur bir convar yapıldı. Örneğin bir resource artık uzaktan konsol şifresini çalışırken değiştiremiyor. Hâlâ RCON kullanıyorsan 9813 veya üstünü kullan.
Ortak ağ kodundaki bir boyut hesabı beklenmedik değerlerde taşabiliyordu, bu da bellek hatalarına yol açabilir. 10048'de düzeltildi.
Ağ kodu bir buffer'ın sonunu aşıp okuduğunda çıktının yalnızca birkaç baytı temizleniyor, gerisinde bellekten kalan veri duruyordu. 7776'da düzeltildi.
Oyuncular array update paketlerini hiç hız sınırı olmadan gönderebiliyordu. 8151 bir sınır ekledi ve böylece bir flood yolu kapandı.
Client HTTP endpoint'lerine gelen POST gövdelerinin ayrıştırılması değişti ve bir maksimum istek boyutu (sv_maxClientEndpointRequestSize) eklendi. Aşırı büyük istekler artık sunucunun belleğini ve CPU'sunu harcatmıyor.
Ses istemcisi başına varsayılan maksimum bant genişliği artırıldı, bu da bazı oyuncularda sesin gitmesini düzeltti. Dinleyici sınırı da 256'ya çıkarıldı.
Aşırı büyük ya da geçersiz giden ses mesajları eskiden bir assertion'a takılıyordu. Artık sessizce atılıyorlar ve gönderim kuyruğu düzgün boşaltılıyor. Ses sunucusunun kötü trafik altında takılma veya çökme ihtimali azalıyor.