flawopen.com/Incidents/citrix-bleed-session-token-leak-october-2023
Citrix Bleed: kebocoran token sesi dan bypass MFA
CVE-2023-4966 membocorkan memori NetScaler, termasuk token sesi, sehingga sesi dapat dibajak tanpa MFA. Eksploitasi dimulai pada akhir Agustus 2023.[1], [2]
Anda meminta asisten menyalin pesan ke kartu kecil dan memberi tahu panjangnya. Kartu itu hanya muat 50 karakter, jadi ia menulis 50, tetapi saat ditanya panjangnya ia menjawab jujur "800 karakter", karena begitulah panjang aslinya. Lalu Anda memberikan kartu itu kepada orang lain dan menyuruhnya membaca 800 karakter. Ia membaca 50 karakter Anda, lalu terus membaca apa pun yang tertulis di sisa lembaran.[2]
Konsep Kunci & Istilah
snprintf- Fungsi C yang memformat teks ke buffer berukuran tetap. Jika teks tidak muat, fungsi ini memotongnya, tetapi mengembalikan panjang yang seharusnya dimiliki teks lengkap.[3]
NetScaler ADC / Gateway- Perangkat Citrix yang menyediakan akses jarak jauh dan penyeimbangan beban di tepi jaringan. Hanya yang dikonfigurasi sebagai Gateway atau server virtual AAA yang terdampak.[1]
Pembacaan di luar batas buffer (CWE-125)- Membaca melewati ujung buffer. Tidak ada yang ditimpa, tetapi isi memori di sebelahnya ikut terungkap. Ini menjelaskan mekanisme pembacaan di luar batas yang spesifik (
CWE-125); Citrix mengklasifikasikanCVE-2023-4966secara umum sebagaiCWE-119.[1], [3] Token sesi- Nilai yang membuktikan bahwa pengguna sudah masuk. Siapa pun yang menunjukkannya diperlakukan sebagai pengguna itu, tanpa diminta kata sandi atau MFA.[2]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-119
- CISA KEV — ditambahkan 2023-10-18 — CVE-2023-4966
Kronologi Insiden
Menurut laporan penanganan insiden yang terbit kemudian, eksploitasi celah ini sebagai zero-day dimulai.[2]
Citrix menerbitkan buletin CTX579459 dengan build perbaikan 14.1-8.50, 13.1-49.15, dan 13.0-92.19.[1]
CISA memasukkan CVE-2023-4966 ke katalog Known Exploited Vulnerabilities.[4]
Alur Serangan Langkah demi Langkah
Memori di luar buffer terkirim
Respons dikirim dengan panjang yang lebih besar itu, sehingga perangkat mengembalikan memori di sebelahnya bersama JSON yang terpotong.[2]
Kode Sumber: Rentan vs Aman
Kode C ilustratif, bukan kode sumber NetScaler. Perbaikannya memeriksa nilai kembali snprintf, yang menunjukkan panjang keluaran lengkap seandainya seluruhnya ditulis. Jika nilainya negatif atau sama dengan maupun lebih besar dari ukuran buffer, pemformatan gagal atau terpotong sehingga fungsi tidak mengirim apa pun. Dengan demikian, panjang hanya diteruskan ke send_response jika respons lengkap muat di buf.[3], [2]
#include <stdio.h>
int send_response(const char *data, int len);
int send_oidc_config(const char *host)
{
char buf[256];
/* n adalah jumlah byte yang seharusnya ditulis dan dapat melebihi sizeof(buf) */
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
return send_response(buf, n); /* mengirim n byte dengan membaca melewati buf */
}
#include <stdio.h>
int send_response(const char *data, int len);
int send_oidc_config(const char *host)
{
char buf[256];
int n = snprintf(buf, sizeof(buf), "{\"issuer\":\"https://%s\"}", host);
if (n < 0 || (size_t)n >= sizeof(buf))
return -1; /* tolak keluaran yang terpotong; jangan pernah mengirim melewati buffer */
return send_response(buf, n);
}
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Selalu periksa pemotongan oleh snprintf: if (n < 0 || (size_t)n >= sizeof(buf)) adalah jalur galat. Memperlakukan nilai kembalian sebagai byte yang ditulis adalah bug C yang umum dan serius.[3]
- ✓Jangan pernah biarkan masukan yang dikendalikan penyerang menentukan panjang keluaran. Batasi setiap ukuran yang berasal dari data tak tepercaya ke batas buffer yang sebenarnya sebelum dipakai.[3]
- ✓Panduan respons FlawOpen: jika token sesi diduga terekspos, cabut atau batalkan sesi yang terdampak jika platform mendukungnya. Patch menutup kebocoran, tetapi tidak mencabut token yang sudah terekspos.
- ✓Panduan operasional FlawOpen: persingkat masa berlaku sesi jika kebutuhan layanan memungkinkan, lalu selidiki penggunaan token dari jaringan atau perangkat yang tidak terduga. Mandiant menyebut pola login yang mencurigakan sebagai petunjuk investigasi dan mengingatkan bahwa pola tersebut harus dinilai sesuai konteks organisasi.[2]
- ✓Terapkan disiplin patch dan pemantauan yang sama pada perangkat tepi seperti pada server Anda sendiri; perangkat itu menghadap internet dan memegang akses semua orang di belakangnya.[1], [2]