CVE-2014-0160
読み:スィーヴィーイー-にーゼロいちよん-ゼロいちろくゼロ
外語:CVE-2014-0160
OpenSSLに存在した脆弱性の一つ。Heartbleed脆弱性。
概要
MITRE社の脆弱性情報データベースCommon Vulnerabilities and Exposures(CVE)に登録されている脆弱性の一つ。
これは、OpenSSLの欠陥により、本来秘匿すべき情報(暗号通信の内容、秘密鍵など)が漏洩する可能性がある、極めて重大なセキュリティホールである。
- 影響: OpenSSL 1.0.1 ‐ 1.0.1f
- 影響: OpenSSL 1.0.2-beta ‐ 1.0.2-beta1
1.0.1gおよび1.0.2-beta2にて修正された。
特徴
問題
原因
TLS heartbeat拡張(RFC 6520)の処理で境界検査が不足していた。
この脆弱性が悪用されると、読み込みでオーバーランを発生させ、OpenSSLが使用している保護されたシステムメモリーの内容を誰でも閲覧することができた。このため理論的にはメモリー上にある暗号通信や秘密鍵などを盗聴することが可能だった。
heartbeat(心拍)の実装による情報漏洩バグであったため、本件はHeartbleed(心臓出血)と命名された。
影響
このバグは気付かれず、または気が付かれてはいたがそのまま放置されていたようだが、2年以上経ってから修正された。
この問題が報告されてからネット界隈はパニックに陥ったが、比較的簡単な対応で修正できたため、パニックは数日間で収まった。なお、この2年以上の間にどれだけの情報が漏洩していたのかは定かではない。
例えば、アメリカの通信社Bloombergは、米国家安全保障局(NSA)は少なくとも2年前からHeartbleedの脆弱性を認識しており情報収集に利用してきた、と報道して大きな騒ぎになったが、NSAはこれを否定する声明文を発表している。
OpenSSLはAndroidでも使われているが、Androidの場合はAndroid 4.1.1のみが影響するとしている(端末メーカーが不具合のあるOpenSSLバージョンに置き換えていない場合に限る)。
修正
境界チェック処理を追加した。短すぎる場合と、長すぎる場合(今回の問題)とで、チェックをするようにしている。修正は「Add heartbeat extension bounds check.」と題されている。そもそも無かったbounds checkを追加した、ということが良く分かる題名である。
RFC 6520のセクション4において、「受信HeartbeatMessageのpayload_lengthが大きすぎる場合は、受信HeartbeatMessageは黙って破棄しなければならない(MUST)」とあり、今回の修正では、RFC通りに黙って破棄するように修正されている。
RFC通りに実装されていなかったことが問題となったもようである。
その後
このバグは世界が震撼させたが、頻発するOpenSSLの不具合調査をしたThe OpenBSD Projectは、抜本的な改善が必須との結論に至った。
OpenSSLでの抜本的な修正は困難だったため、ここからLibreSSLとして分岐され、抜本的な修正と改良が開始された。
この不具合を契機として、今後の主流はOpenSSLからLibreSSLへと移っていくものと予想される。
再検索