[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

Adͥᴍiͣnͫ
Admin
Süper Üye
Geliştirici
Yardımsever Üye
Mesaj
4.634
Çözümler
457
Beğeni
5.733
Puan
5.349
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