CVE-2014-0160 (NVD)

2014-04-07

Heartbleed - The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packets, which allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c, aka the Heartbleed bug.

Products Symantec_messaging_gateway, Ubuntu_linux, Debian_linux, Fedora, Filezilla_server, V100_firmware, V60_firmware, Micollab, Mivoice, Openssl, Opensuse, Enterprise_linux_desktop, Enterprise_linux_server, Enterprise_linux_server_aus, Enterprise_linux_server_eus, Enterprise_linux_server_tus, Enterprise_linux_workstation, Gluster_storage, Storage, Virtualization, S9922l_firmware, Application_processing_engine_firmware, Cp_1543\-1_firmware, Elan\-8\.2, Simatic_s7\-1500_firmware, Simatic_s7\-1500t_firmware, Wincc_open_architecture, Splunk
Type Out-of-bounds Read (CWE-125)
First patch http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=96db9023b881d7cd9f379b0c154650d6c108e9a3
Relevant file/s • ./ssl/d1_both.c
• ./ssl/t1_lib.c
• ./CHANGES (modified, +9)
Links http://www.oracle.com/technetwork/topics/security/opensslheartbleedcve-2014-0160-2188454.html
http://marc.info/?l=bugtraq&m=139757819327350&w=2
http://www.ubuntu.com/usn/USN-2165-1
http://marc.info/?l=bugtraq&m=139722163017074&w=2
http://marc.info/?l=bugtraq&m=139836085512508&w=2
Last changed by Ruslan Habalov
Detailed repository view
The Hearbleed bug is an issue with the Heartbeat protocol that is used for [...]. It allows an attacker to exfiltrate up to 16 KB memory data from a target running a vulnerable OpenSSL version.
`pl` points at the reserved heartbeat data buffer. This buffer will be returned back to the user later on.
Allocate up to 1 + 2 + 65535(`payload`)+16(`padding`)=65554 bytes in `buffer` referenced as `bp`. Note that there is no bounds check in place for the user-supplied payload length `payload`.
The macro s2n takes a 16-bit value and writes two bytes to `bp`.
Copies `payload` bytes (up to 64KB) from `pl` (pointing on the resulting heartbeat buffer) into `bp`. The critical part is that `payload` (the user-supplied payload length) can be greater than the actual size of the `pl` memory segment leading to an out-of-bounds read effectively copying parts of the memory into `bp`.
The `buffer` with the memory is now sent back to the user effectively allowing an attacker to leak memory from the heap.
The same bug also exists in the dtls implementation.