[CVE] CVE 분석 · 작성: 2026-07-19 19:39:08 · 조회 4
Heartbleed는 SSL/TLS 구현체로 인터넷 대부분의 암호화 통신에서 쓰이던 OpenSSL 라이브러리에서 발견된 메모리 노출 취약점이다. 2014년 공개 당시 전 세계 웹 서버의 상당수(추정치로 수십만 대 이상)가 영향을 받았고, "심장에서 피가 샌다"는 이름 그대로 서버 메모리에 있던 개인키, 세션 쿠키, 사용자 비밀번호 같은 민감 정보가 그대로 유출될 수 있었다.
TLS의 Heartbeat 확장은 연결이 살아있는지 확인하기 위한 기능이다. 클라이언트가 임의의 데이터와 그 길이를 서버에 보내면, 서버는 같은 데이터를 그대로 돌려보내는 단순한 핑퐁 구조다.
클라이언트 → 서버: "이 데이터(길이: N바이트)를 그대로 돌려줘"
서버 → 클라이언트: (동일한 데이터, N바이트)
취약한 OpenSSL 코드는 클라이언트가 "길이는 N바이트"라고 주장한 값을 그대로 믿고, 실제로 보낸 데이터의 실제 길이와 대조하지 않았다. 공격자가 실제로는 1바이트짜리 데이터만 보내면서 "이건 64KB짜리 데이터야"라고 주장하면, 서버는 그 1바이트 뒤에 이어지는 서버 프로세스 메모리의 나머지 부분(공격자가 보낸 적 없는 데이터)까지 그대로 응답에 채워서 돌려보냈다.
// 개념적으로 이런 문제였다
memcpy(response_buffer, payload, claimed_length); // claimed_length를 검증 없이 그대로 사용
이건 전형적인 버퍼 오버리드(over-read) 취약점이다 — 쓰기가 아니라 읽기 방향으로 경계를 넘는다는 점에서 스택 버퍼 오버플로우와는 성격이 다르지만, "길이를 검증하지 않고 신뢰한다"는 근본 원인은 동일한 패턴이다.
한 번의 요청으로 서버 메모리의 최대 64KB를 읽어갈 수 있었고, 이 요청을 반복하면 서버 프로세스 메모리를 계속 다른 조각으로 훑어볼 수 있었다. 서버 프로세스 메모리에는 그 시점에 처리 중이던 다른 사용자의 세션 쿠키, 로그인 정보, 심지어 서버의 TLS 개인키(private key) 조각까지 우연히 포함될 수 있었다. TLS 개인키가 유출되면 그 인증서로 이루어지는 모든 통신을 사후에 복호화하거나, 해당 서버를 완벽하게 사칭하는 것까지 가능해진다 — 단순 정보 유출을 넘어 신뢰 체계 자체가 무너지는 결과다.