ID:

CVE-2014-0160 (NVD)

- Vulnerability Info (edit)
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 Openssl
Type Improper Restriction of Operations within the Bounds of a Memory Buffer (CWE-119)
First patch http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=96db9023b881d7cd9f379b0c154650d6c108e9a3
Patches http://git.openssl.org/gitweb/?p=openssl.git;a=commit;h=96db9023b881d7cd9f379b0c154650d6c108e9a3
https://gist.github.com/chapmajs/10473815
Relevant file/s • ./ssl/t1_lib.c
• ./ssl/d1_both.c
• ./CHANGES (modified, +9)
Links http://marc.info/?l=bugtraq&m=139889295732144&w=2
http://marc.info/?l=bugtraq&m=139869720529462&w=2
http://www-01.ibm.com/support/docview.wss?uid=ssg1S1004661
http://marc.info/?l=bugtraq&m=139757726426985&w=2
http://marc.info/?l=bugtraq&m=139757819327350&w=2
Annotation
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.