\n\n\n\n\n\n\n\n\n\n\n

flawopen.com/Simulator/Heartbleed Buffer Overread

Keamanan Memori / OpenSSL TLS

Visualisator Interaktif Buffer Overread OpenSSL Heartbleed (CVE-2014-0160)

Simulator memori interaktif di peramban yang mendemonstrasikan bagaimana panjang TLS Heartbeat tanpa validasi memicu kebocoran memori heap server secara visual.

💡 Penjelasan Sederhana (ELI5)

Bayangkan Anda memberikan 4 huruf kata 'BIRD' kepada burung beo terlatih dan berkata: 'Ulangi kata saya, tetapi buat jawabanmu sepanjang 64.000 huruf.' Burung beo berkicau 'BIRD' lalu langsung melanjutkan dengan mengoceh 63.996 huruf berikutnya yang tersimpan di memorinya—termasuk kata sandi rahasia, kunci privat SSL, dan percakapan rahasia pengunjung lain. Pada Heartbleed, OpenSSL mempercayai panjang pesan yang diklaim klien tanpa memeriksa ukuran paket sebenarnya, menyalin memori mentah server kembali ke penyerang.

Konsep Inti dan Istilah Subsistem

Ekstensi TLS Heartbeat
Mekanisme keep-alive RFC 6520 untuk memverifikasi jalur komunikasi aktif tanpa renegosiasi.
\n
Field Payload Length
Bilangan bulat 16-bit dalam header heartbeat yang menyatakan panjang muatan (hingga 65.535 byte).
\n
Buffer Overread
Kerentanan memori di mana perangkat lunak membaca melebihi batas buffer yang dialokasikan.
\n
memcpy() Tanpa Batas
Penyalinan memori yang menggunakan ukuran klaim klien tanpa memeriksa catatan paket yang sebenarnya.

Mekanisme Eksploitasi dan Eksekusi Langkah demi Langkah

1

Pengiriman Permintaan Heartbeat Cacat

Penyerang mengirim Heartbeat dengan muatan 1 byte ('A') namun memanipulasi field panjang menjadi 65.535 byte (0xFFFF).

\n
2

Ketiadaan Validasi Batas Paket

OpenSSL membaca ukuran dengan n2s(p, payload) tanpa memeriksa apakah 1 + 2 + payload + 16 <= rrec.length.

\n
3

Alokasi Buffer Respons 64 KB

Server mengalokasikan 64 KB penuh pada memori heap berdasarkan klaim penyerang.

\n
4

Kebocoran Memori Heap ke Penyerang

Fungsi memcpy() menyalin 64 KB memori heap di luar paket 1 byte, mengekspos kunci privat RSA dan token sesi aktif.

Perbandingan Kode Sumber: Validasi Batas pada tls1_process_heartbeat()

KERENTANAN TANPA PATCH: TANPA PEMERIKSAAN BATAS DI OPENSSL 1.0.1f
/* Membaca panjang 16-bit langsung dari paket tanpa pemeriksaan batas */
n2s(p, payload);
pl = p;

/* Mengalokasikan buffer balasan berdasarkan klaim sepihak klien */
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;

/* KESALAHAN FATAL: Menyalin hingga 64 KB memori heap server yang berdekatan! */
memcpy(bp, pl, payload);
r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding);
PATCH PERBAIKAN: VALIDASI KETAT TERHADAP PANJANG RECORD YANG DITERIMA (RFC 6520)
/* Membaca panjang 16-bit dari paket */
n2s(p, payload);
pl = p;

/* PERBAIKAN: Pastikan muatan yang diklaim tidak melebihi panjang record sebenarnya */
if (1 + 2 + payload + 16 > s->s3->rrec.length)
    return 0; /* Buang paket cacat secara senyap */

buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;
memcpy(bp, pl, payload);

Daftar Periksa Penguatan Keamanan Sistem

← Semua Simulator Baca Teardown Lengkap CVE-2014-0160 Heartbleed →