[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.038
Çözümler
390
Beğeni
4.159
Puan
1.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?
 
Geri
Üst