[Fix] Güvenlik Açığı [Kill pidDB]

  • Konuyu açan Konuyu açan Kaiser
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 1K

Kaiser

Admin
Admin
Geliştirici
Yardımsever Üye
Mesaj
4.545
Çözümler
451
Beğeni
5.400
Puan
2.849
Ticaret Puanı
0
#FR0Z3N isimli kişinin kullandığı bir açık olduğu söyleniyor.
Açık: Karakter seçim ekranında spam yaparak HEADER_CG_CHARACTER_SELECT paketi aracılığı ile işlemler veritabanı üzerinden sonlandırılır ve sunucu kapatılır.

Önlemek için input_login.cpp açın ve aratın:
C++:
Genişlet Daralt Kopyala
db_clientdesc->DBPacket(HEADER_GD_PLAYER_LOAD, d->GetHandle(), &player_load_packet, sizeof(TPlayerLoadPacket));

Değiştirin:
C++:
Genişlet Daralt Kopyala
if (player_load_packet.player_id == 0)
{
    sys_err("invalid player_id from account %d\n",c_r.id);
    d->DelayedDisconnect(0);
    return;
}
db_clientdesc->DBPacket(HEADER_GD_PLAYER_LOAD, d->GetHandle(), &player_load_packet, sizeof(TPlayerLoadPacket));



Alternatif yol -> yukarıdakini arattığınızda, üst satırlarda şunu göreceksiniz:

C++:
Genişlet Daralt Kopyala
TPlayerLoadPacket player_load_packet;

Bunun üstüne ekleyin:
C++:
Genişlet Daralt Kopyala
if (!c_r.players[pinfo->index].dwID)
{
    d->SetPhase(PHASE_CLOSE);
    return;
}

uiHzEus.jpg
 
bu fix i kesin yapmak gerekiyormu ? birde bu fix e gerek varmı yokmu nasıl test ediriz?
 
Uyarı: Bu konu açıldığından bu yana baya zaman geçmiş.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.
Geri
Üst