- Gangguan lama
No user logon di Counter-Strike juga dapat direproduksi di CS2; jika terhubung ke server terlalu cepat segera setelah game dimulai, verifikasi Steam ID bisa saja tidak dimulai
- Intinya, saat
CS2.exe sedang berjalan, loop levelload berakhir terlalu dini sebelum verifikasi Steam3 selesai, lalu server memproses koneksi dengan Steam ID yang belum diverifikasi
- Dalam log Esportal, pengguna normal pun mencatat
STEAM USERID validated sekitar 1 menit 20 detik setelah koneksi, sementara pengguna yang gagal terputus 2–3 menit kemudian dengan STEAMAUTH failure code 8 dan NETWORK_DISCONNECT_STEAM_LOGON
- Instal ulang game, verifikasi file, restart Steam, reboot PC, dan menonaktifkan WiFi tidak memperbaiki akar masalah; CS2 harus dijalankan lebih dulu, lalu tunggu 5–10 detik di menu utama
- Pada 10 Januari 2024, Esportal memperbaiki perilaku yang menjalankan
steam://connect/<IP>:<Port> sebelum CS2.exe sepenuhnya terinisialisasi, dan setelah itu porsi tiket terkait turun menjadi 0%
Fenomena No user logon yang Terus Berulang sejak Lama
- Gangguan
No user logon di Counter-Strike dikenal sebagai masalah yang terjadi secara acak saat bermain, dan dilaporkan berulang kali di berbagai forum serta forum dukungan resmi Valve dari 2008 hingga 2023
No user logon dan No steam logon yang terlihat di beberapa tulisan kemungkinan secara teknis adalah nama berbeda untuk akar masalah yang sama
- Solusi yang tersebar luas di internet tidak memperbaiki akar masalahnya
- Instal ulang game
- Verifikasi file game
- Restart Steam
- Reboot komputer
- Nonaktifkan WiFi
- CS2 menggantikan CS:GO pada 27 September 2023, dan pengguna umum tidak lagi dapat memainkan CS:GO
- Cakupan bug bounty HackerOne milik Valve tidak mencakup
cs2.exe, dan laporan CS2 Limited Test juga ditandai berada di luar cakupan
Laporan yang Mendadak Meningkat di Esportal
- Esportal juga pernah mengalami masalah ini di CS:GO sebelumnya; kejadian pertama yang tercatat adalah 2019-11-15 19:15:32 CET, dan kejadian CS:GO terakhir adalah 2023-09-26 21:38:01 CET, sehari sebelum digantikan oleh CS2
- Pada awal CS2, masalah ini tampak menghilang, tetapi laporan pengguna meningkat pada minggu pertama Januari 2024
- 2024-01-03: 6% dari tiket harian
- 2024-01-05~06: 18%
- 2024-01-07: 23%
- 2024-01-08: 10%
- 2024-01-09: 9%
- Waktu laporan terutama terkonsentrasi pada 13–17 CET, yang setara dengan 04–08 waktu Washington, lokasi Valve
- Sebelumnya, laporan tersebar merata sepanjang hari, tetapi masalah yang baru diamati ini terkonsentrasi pada rentang waktu tertentu
- Pemain di luar Esportal juga mengalami masalah yang sama, jadi ini bukan masalah yang hanya terjadi pada platform tertentu
Gejala: Verifikasi Steam yang Terlambat dan Skin yang Hilang
- Error
No user logon yang diamati terjadi 2–3 menit setelah pemain terhubung ke server game, dan interval waktu ini cukup konsisten
- Seorang rekan mengatakan, “selama beberapa menit setelah masuk ke game, skin tidak terlihat di CS2,” dan pemain di luar Esportal juga melaporkan skin yang tidak muncul
- Karena skin terhubung dengan kepemilikan Steam ID, sampai skin pribadi muncul, ada kemungkinan pemain belum diautentikasi dengan benar melalui Steam
- Dalam log pengguna normal,
STEAM USERID validated tercatat sekitar 1 menit 20 detik setelah koneksi
16:39:55: "Alice<1><>" connected
16:41:14: "Alice<1><>" STEAM USERID validated
17:17:32: "Alice<1><CT>" disconnected (reason "NETWORK_DISCONNECT_DISCONNECT_BY_USER")
- Pada log lama sebelum 3 Januari 2024, verifikasi Steam selesai dalam 2–3 detik setelah koneksi
- Pada jam malam di Washington, masalah dapat direproduksi langsung; pada jam siang di Washington, tidak dapat direproduksi
NETWORK_DISCONNECT_STEAM_LOGON dan failure code 8
- Dalam log pengguna yang gagal, koneksi terputus dengan
NETWORK_DISCONNECT_STEAM_LOGON tepat setelah STEAMAUTH: Client Bob received failure code 8
16:40:13: "Bob<6><>" connected
16:43:02: STEAMAUTH: Client Bob received failure code 8
16:43:02: "Bob<6><TERRORIST>" disconnected (reason "NETWORK_DISCONNECT_STEAM_LOGON")
NETWORK_DISCONNECT_STEAM_LOGON diduga merupakan pengenal internal untuk pesan No user logon yang dilihat pengguna
- String
STEAMAUTH: Client %s received failure code %d ditemukan di libengine2.so, lalu dibandingkan bersama sv_steamauth.cpp dari source CS:GO yang bocor dan hasil reverse engineering
- Fungsi terkait di CS2 memutus klien berdasarkan nilai
eAuthSessionResponse
1: k_EAuthSessionResponseUserNotConnectedToSteam
7: k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed
8: k_EAuthSessionResponseAuthTicketInvalid
- failure code
8 tampaknya sesuai dengan k_EAuthSessionResponseAuthTicketInvalid, yang muncul saat verifikasi Steam3 gagal
Alur Verifikasi Steam3
- Klien game
CS2.exe mengirimkan Steam ID miliknya saat terhubung ke server game
- Server game memiliki struktur yang menanyakan ke server Steam3 apakah Steam ID tersebut valid dan apakah pengguna memiliki gamenya
- Sambil menunggu respons verifikasi, pemain tetap dapat bermain di server, tetapi skin pribadi mungkin tidak terlihat
- Jika server Steam3 mengembalikan “yes”, server game mempercayai informasi tersebut dan dapat menerapkan informasi pribadi seperti skin
- Jika server Steam3 mengembalikan “no”, server game memutus klien dengan
NETWORK_DISCONNECT_STEAM_LOGON
- Dalam situasi respons Steam3 melambat pada jam malam di Washington, butuh sekitar 1 menit 20 detik sampai verifikasi selesai
Verifikasi Kepercayaan CS2.exe dan Klien Steam
- Steam ID yang valid saja tidak membuktikan bahwa instance
CS2.exe tersebut adalah game milik akun Steam yang sedang login di mesin yang sama
CS2.exe harus terhubung dengan Steam.exe di mesin yang sama untuk memastikan bahwa Steam ID yang dikirimnya cocok dengan akun Steam yang sedang login
- Jika
Steam.exe mengonfirmasi kecocokan tersebut, ia menyimpan sementara informasi di server Steam3 bahwa Steam ID tersebut valid untuk CS2
- Dari beberapa kandidat penyebab Steam3 dapat mengembalikan “no”, dua yang paling dekat dengan masalah sebenarnya dipersempit menjadi berikut
- Instance
CS2.exe tidak dipercaya
- Server Steam3 belum mengetahui informasi Steam ID untuk instance
CS2.exe tersebut
Petunjuk di Sisi Klien: NETWORK_DISCONNECT_LOOPSHUTDOWN
- Dalam log kegagalan,
NETWORK_DISCONNECT_LOOPSHUTDOWN muncul lebih dulu sebelum NETWORK_DISCONNECT_STEAM_LOGON
16:40:03: "Bob<6><>" connected
16:40:08: "Bob<6><Unassigned>" disconnected (reason "NETWORK_DISCONNECT_LOOPSHUTDOWN")
16:40:13: "Bob<6><>" connected
16:43:02: STEAMAUTH: Client Bob received failure code 8
16:43:02: "Bob<6><TERRORIST>" disconnected (reason "NETWORK_DISCONNECT_STEAM_LOGON")
- Setelah
NETWORK_DISCONNECT_LOOPSHUTDOWN, game otomatis mencoba terhubung kembali 5 detik kemudian
- Pemutusan pertama ini dimulai bukan oleh server game, melainkan oleh
CS2.exe itu sendiri
- Karena itu, akar masalahnya ada di sisi klien game, bukan di server game
Loop levelload Source 2 dan Urutan Inisialisasi
- Engine Source 2 menjalankan satu loop aktif dalam satu waktu, dan loop mengulang pemrosesan tugas latar belakang serta input pengguna sampai target tertentu selesai
- Loop yang pada akhirnya berjalan setelah
CS2.exe dimulai adalah loop game, yang menangani interaksi menu dan gameplay sebenarnya
- Dalam output konsol, tepat sebelum beralih ke loop
game, status autentikasi Steam ditampilkan sebagai OK
[SteamNetSockets] AuthStatus (steamid:<redacted>): OK (OK)
[Client] CL: CLoopModeLevelLoad::MaybeSwitchToGameLoop switching to "game" loopmode with addons ()
[EngineServiceManager] SwitchToLoop game requested: id [1] addons []
levelload adalah loop inisialisasi yang berjalan saat CS2 dimulai, dan tampaknya memuat layar awal seperti video intro dan menu utama meski bukan map sebenarnya
- Salah satu tugas terakhir
levelload adalah memulai verifikasi Steam3 dari CS2.exe melalui Steam.exe
Penyebab Langsung Bug
- CS2 baru dapat dianggap sepenuhnya terinisialisasi setelah loop
levelload selesai dengan sukses
- Jika berhenti terlalu dini sebelum inisialisasi
levelload selesai, verifikasi Steam3 tidak dimulai
- Instance
CS2.exe dalam kondisi ini menjadi rusak, dan tidak akan pulih sampai CS2 direstart begitu saja
- Alur bugnya sebagai berikut
CS2.exe dimulai
- Loop
levelload dimulai
levelload berakhir terlalu dini sebelum memulai verifikasi Steam3
- Loop
game terhubung ke server game dengan Steam ID yang belum diverifikasi
- Server game memeriksa ke Steam3
- Setelah maksimal sekitar 2 menit 50 detik, menerima respons gagal dan terputus dengan
No user logon
- Masalah ini dibahas berdasarkan contoh dan nama CS2, tetapi bug yang setara juga ada di CS:GO dan Counter-Strike: Source; hanya nama teknis dan caranya yang berbeda
Cara Koneksi yang Memicu Bug
- Masalah ini adalah race condition berdasarkan cara CS2 dimulai
- Cara yang hampir pasti memicu bug adalah langsung terhubung ke server game saat CS2 belum terbuka
- Cara koneksi yang berisiko adalah sebagai berikut
- Menghubungkan ke server dari browser server di luar game saat CS2 belum berjalan atau baru saja mulai berjalan
- Menghubungkan ke teman dari daftar teman Steam saat CS2 belum berjalan atau baru saja mulai berjalan
- Menghubungkan langsung dari luar melalui protokol browser Steam seperti
steam://connect/127.0.0.1:27015
- Jika tindakan di atas dilakukan sebelum CS2 sepenuhnya terinisialisasi setelah dimulai, kemungkinan terjadinya lebih tinggi
- Proporsi penyebabnya dirangkum dengan perumpamaan: “cara memulai Counter-Strike 90%, kecepatan komputer 3%, kecepatan pengguna 3%, kondisi bulan 3%, masalah konfigurasi pengguna yang sebenarnya 1%”
Solusi Nyata
- Tindakan yang tidak perlu dilakukan
- Instal ulang game
- Verifikasi file game
- Restart Steam
- Reboot komputer
- Nonaktifkan WiFi
- Menghubungkan ke server game dari luar sebelum CS2 dimulai
- Sebagai gantinya, jalankan CS2 lebih dulu dan tunggu cukup lama sebelum terhubung ke server game
- Patokannya adalah menunggu sampai konsol game terlihat, atau menunggu 5–10 detik setelah video intro terlihat
- Untuk memastikan, setelah menjalankan CS2, masukkan
status di konsol game dan periksa baris berikut
[EngineServiceManager] @ Current : game
Hasil Perbaikan Esportal
- Alasan pengguna yang gagal,
Bob, berhasil diverifikasi 9 menit setelah percobaan pertama adalah karena ia memulai ulang CS2, dan saat itu kebetulan bug tidak terjadi
- Setelah Steam ID diverifikasi sekali, pada instance game yang sama kegagalan tidak akan terjadi lagi nanti selama klien Steam tidak ditutup
- Hingga 10 Januari 2024, segera setelah proses
CS2.exe dibuat, Esportal menghubungkan pemain ke server matchmaking melalui steam://connect/<IP>:<Port> bahkan sebelum inisialisasi penuh selesai
- Setelah perilaku tersebut diperbaiki dan dirilis ke semua pemain Esportal, tiket pengguna terkait berhenti
- Porsi
No user logon dalam tiket harian sempat naik hingga 23% pada 2024-01-07, tetapi turun menjadi 0% dari 2024-01-10 hingga 2024-01-12
1 komentar
Opini Hacker News
Alur pada diagram lebih dekat dengan mekanisme yang disebut Steam sebagai Session Tickets, dan kenyataannya sedikit lebih bernuansa
Klien game meminta tiket sesi ke server Steam, lalu mengirimkan tiket itu ke server game untuk membuktikan bahwa dirinya adalah Steam ID tertentu
Setelah itu server game harus memeriksanya secara online ke Web API Steam untuk memastikan tiket tersebut tidak dipakai berkali-kali atau dimodifikasi
Kedengarannya klien CS2 tidak menangani respons yang terlambat dengan benar dalam proses memperoleh tiket sesi
Alurnya dijelaskan secara rinci di sini: https://partner.steamgames.com/doc/features/auth#3
Jika cara kerjanya seperti diagram di tulisan itu, ini cukup mengkhawatirkan karena penyerang bisa berlomba masuk ke server dengan Steam ID korban
Masalahnya tampak terjadi ketika game terhenti sebelum benar-benar membuat tiket sesi, atau saat menunggu respons server Steam yang lambat, lalu mencoba terhubung ke server game tanpa tiket
Tulisannya bagus, tetapi proses pelacakan dan kesimpulannya tidak sepenuhnya nyambung
Mengatakan “cara Counter-Strike dimulai: porsi tanggung jawab 90%”, sementara juga menyatakan bahwa pemain di seluruh dunia mengalami masalah yang sama di luar Esportal dan itu dikonfirmasi karena pemeliharaan tengah malam di Washington, sulit untuk sama-sama benar
Jika 90% tanggung jawabnya ada pada cara eksekusi, masalahnya tidak akan terdistribusi di jam pemeliharaan
Intinya tampaknya ada pada bagian “verifikasi Steam ID dimulai tepat sebelum game loop dimulai” dan “jika inisialisasi levelload belum selesai, verifikasi Steam3 adalah tahap terakhir sehingga tidak dimulai”
Jadi jika server steam3 menjadi sangat lambat pada jam pemeliharaan, proses ini memanjang, dan peluang untuk memulai game lalu memutus loop di sela-sela itu meningkat
Karena itu “cara Counter-Strike dimulai” memang benar, tetapi ungkapan seperti “keadaan bulan: porsi tanggung jawab 3%” pada dasarnya menunjuk ke jam pemeliharaan, jadi terasa agak meleset
Sarannya juga akan lebih baik jika mencakup “pada pukul 13–17 CET itu jam pemeliharaan Valve, jadi tunggulah beberapa menit lagi”
Bagaimanapun, saya pernah mengalami masalah ini, dan solusi “tunggu sebentar sampai loading selesai” adalah yang paling praktis dan masuk akal yang pernah saya dengar sejauh ini
Di CS:GO, masalah yang sama juga ada terlepas dari jam pemeliharaan, sedangkan di CS2 hanya teramati pada jam pemeliharaan
Pada akhirnya sifat bug di CS:GO dan CS2 mungkin memang berbeda, tetapi karena CS:GO sudah digantikan CS2, tidak ada lagi cara untuk membuktikannya
Dulu, sebelum ada Steam, saya pernah membuat alat yang menampilkan daftar pemain aktif dan skor supaya bisa melihat server yang dimasuki teman lalu langsung ikut masuk
Saat membuat alat itu, saya mengirim paket yang salah ke server yang sedang diuji, dan servernya mati
Saya masih punya source code yang ditulis dengan Delphi, dan kalau bug-bug berumur 10 tahun masih tersisa, saya penasaran apakah ini masih bisa mematikan server
Bug yang sebenarnya adalah autentikasi yang selesai bukan merupakan syarat wajib untuk memulai multiplayer non-LAN
Cara yang lebih cepat dan tangguh mungkin adalah klien Steam menerima dan menyimpan token bertanda tangan berdurasi beberapa jam dari Valve, lalu mengirim token itu setiap kali terhubung ke server game
Server game tinggal memverifikasinya secara lokal dengan sertifikat publik yang diterbitkan Valve dan didistribusikan bersama konten server
Beberapa paragraf terasa seperti “menaruh topi di atas topi”
Di atas paragraf yang sudah terasa seperti meme, ditumpuk lagi sarkasme, sehingga unsur yang lebih efektif saat tersirat terasa berlebihan
Seperti yang dikatakan orang lain, lebih baik masuk ke inti lebih cepat
Sangat menyenangkan dibaca. Saya penasaran apakah alasan klien game tiba-tiba crash juga bisa diselidiki dengan cara yang sama
Saya juga penasaran apakah pemeriksaan integritas executable berjalan saat game sedang berjalan, dan apakah jika salah satunya gagal saat berjalan akan muncul pesan pemutusan koneksi yang berbeda
Rasanya layak mendapat imbalan seperti tulisan yang menganalisis masalah waktu loading GTA V yang terlalu lama: https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times...
Crash secara teori bisa diselidiki, tetapi Valve tidak menyimpan laporan crash ke disk, melainkan mengirimkannya ke server
Kalau tidak tertangkap secara real-time dengan debugger terpasang, analisis jadi lebih sulit, dan karena VAC ini merepotkan, meski bukan mustahil. Matikan saja VAC
Menaruh ringkasan di awal tulisan untuk orang yang datang dari pencarian solusi terlihat penuh perhatian
Namun setelah itu langsung mengatakan “hal yang tidak boleh dilakukan”, sementara tindakan yang benar-benar bisa dilakukan justru disembunyikan dalam satu kalimat di tengah tulisan sepanjang kilometer
Sebaiknya workaround dimasukkan ke ringkasan
Saya mengatakan ini karena selera menulis ala Strunk and White sudah tertanam di kepala, jadi silakan abaikan kalau mau
Kalau menginginkan masukan, saya sarankan penyuntingan besar-besaran agar tulisannya jauh lebih langsung dan ringkas
Menulis panjang boleh saja, tetapi setelah beberapa menit, penjelasan tambahan dan anekdot menumpuk sampai saya cukup cepat kehilangan alur utama
Ditambah lagi ada gambar referensi Inception, sehingga rasanya makin seperti kumpulan hal yang tidak saling terkait daripada tulisan penyampai informasi
Pikirkan apa yang ingin dikatakan, katakan itu, lalu kembali dan pastikan benar-benar hanya itu yang dikatakan
Sisanya lebih mirip latihan mengetik daripada menulis. Kalau yang ingin dikatakan ada 3–4 hal, katakan saja hal-hal itu
Tulisannya bagus, tetapi masih menyisakan beberapa pertanyaan
Apakah levelloadloop hanya dijalankan saat game diluncurkan, dan tidak saat masuk server serta loading map?
Jika masalahnya adalah loop berakhir sebelum proses autentikasi Steam dimulai, mengapa perlambatan akibat pemeliharaan menjadi penting?
Nama loop ini tampaknya berkaitan dengan game single-player seperti Portal, dan pada game seperti itu level berganti tanpa jeda, sehingga nama seperti ini jauh lebih alami
Nomor 2 memang ada celah dalam penjelasannya, dan saya tidak tahu jawabannya
Namun metode ini jelas memperbaiki masalahnya. Detail kesimpulannya sangat mungkin tidak lengkap, tetapi saat ini saya tidak merasa perlu menggali lebih dalam
Teks program bounty Valve menyebutkan bahwa cakupannya mencakup “platform Steam dan game saat ini yang dikembangkan serta diterbitkan oleh Valve”
Juga disebutkan bahwa mulai 14 Juni 2023 pukul 10 pagi PDT, laporan baru untuk CS:GO berada di luar cakupan, dan laporan CS2 Limited Test juga saat ini berada di luar cakupan
Memang benar Valve lemah soal keamanan, tetapi jika membaca seluruh deskripsi HackerOne secara luas, secara pribadi saya akan menganggap ini dalam cakupan
Maksudnya, mereka belum memperbarui tab “Scope” untuk mengecualikan
csgo.exe, jadi tab itu saja sulit dipercayaMeski begitu, Valve benar-benar harus memperbarui bagian tersebut
Namun saya setuju dengan kesimpulannya, dan itu masuk akal