初めに #
AlmaLinux をはじめとする多くの Linux ディストリビューションは長期的な安定運用を前提としており、リリース後にパッケージのバージョンを大きく更新しないという方針があります。
そのため、最新版の変更内容のうち重要なセキュリティ修正部分だけを抽出して安定版のパッケージに適用するバックポート形式が採用されています。
この方式により、安定性を保ったまま脆弱性を解消できる一方で、実際にソースを開発している上流のパッケージとはバージョン番号やソースが異なることがよくあります。
この影響として、上流で「〇〇以上のバージョンが影響を受ける」といった情報が公開されていても、手元の環境のバージョン番号と単純に比較するだけでは、そのCVEがすでに修正済みかどうか判断しにくい場合があります。
そういった場合は、RPMパッケージの変更履歴(Changelog)を確認することで、実際にどのCVEに対する修正が取り込まれているかを簡単に把握することができます。
本記事では、AlmaLinux 9 を例にRPMパッケージの変更履歴を確認し、特定のCVEが修正済みかを確認する方法をご紹介いたします。
Changelogとは #
Changelog(チェンジログ)は、ソフトウェアやパッケージに対して行われた変更内容を記録した履歴となります。
いつ、誰が、どのような修正を行ったのかが時系列でまとめられており、バグ修正・セキュリティアップデート・改善点・既知の問題などが記載されます。
RPMベースのLinuxディストリビューションでは、パッケージごとにChangelogが管理されており、rpm コマンドを利用することで簡単に内容を確認することができます。
チェンジログを確認する方法 #
基本的な確認方法 #
パッケージの Changelog を表示する基本的なコマンドは以下の通りです。
rpm -q --changelog <パッケージ名>
上記の <パッケージ名> の部分に確認したいパッケージ名を指定することで、該当パッケージの更新履歴が一覧で表示されます。
出力は新しい変更履歴が先頭に表示され、各エントリは 更新日・担当者・リリースバージョン・変更内容 で構成されています。
CVE一覧に絞り込む #
Changelog には、脆弱性に関連する情報意外にもパッケージの機能変更やバグ修正といった多くの履歴が含まれています。
また、セキュリティの脆弱性に関する修正は、多くの場合CVE番号とセットで Changelog に記載されています。
特定の脆弱性だけを確認したい場合や、セキュリティ関連の修正のみに絞り込みたい場合は、grep コマンドを利用し CVE 番号で抽出する方法がおすすめです。
rpm -q --changelog <パッケージ名> | grep CVE
このようにすることで、Changelog の中から セキュリティ修正に関連する情報だけを効率的に確認できます。
例えば、 OpenSSL にて CVE を確認した場合はい以下となります。
$ rpm -q --changelog openssl |grep "CVE"
- RFC7250 handshakes with unauthenticated servers don't abort as expected (CVE-2024-12797)
- Fix CVE-2024-6119: Possible denial of service in X.509 name checks
- Fix CVE-2024-5535: SSL_select_next_proto buffer overread
- Rebase to OpenSSL 3.2.2. Fixes CVE-2024-2511, CVE-2024-4603, CVE-2024-4741,
- POLY1305 MAC implementation corrupts vector registers on PowerPC (CVE-2023-6129)
- Excessive time spent checking invalid RSA public keys (CVE-2023-6237)
associated data entries (CVE-2023-2975)
- Excessive time spent checking DH keys and parameters (CVE-2023-3446)
- Excessive time spent checking DH q parameter value (CVE-2023-3817)
- Fix incorrect cipher key and IV length processing (CVE-2023-5363)
- Excessive time spent in DH check/generation with large Q parameter value (CVE-2023-5678)
Resolves: CVE-2023-2650
Resolves: CVE-2022-4203
Resolves: CVE-2022-4304
Resolves: CVE-2022-4450
Resolves: CVE-2023-0215
Resolves: CVE-2023-0216
Resolves: CVE-2023-0217
Resolves: CVE-2023-0286
Resolves: CVE-2023-0401
この結果から、直近では CVE-2024-12797 に関する脆弱性が修正されていることがわかります。
Changelog の該当箇所は以下の通りとなります。
* Wed Jan 29 2025 Dmitry Belyavskiy <dbelyavs@redhat.com> - 1:3.2.2-6.1
- RFC7250 handshakes with unauthenticated servers don't abort as expected (CVE-2024-12797)
Resolves: RHEL-76755
このログには、修正に関する様々な情報が含まれています。
表に整理すると以下のようになります。
| 項目 | 内容 |
|---|---|
| 修正日 | 2025年1月29日 |
| 担当者 | Dmitry Belyavskiy |
| 対象パッケージとバージョン | OpenSSL 1:3.2.2-6.1 |
| 修正内容 | RFC7250 のハンドシェイクで、認証されていないサーバとの通信が正しく中断されない不具合を修正 |
| 関連 CVE | CVE-2024-12797 |
| RHELチケット | RHEL-76755 |
dnfコマンドで確認する方法 #
rpm コマンドと同様に、dnf コマンドでもインストール済みパッケージの変更履歴やセキュリティ情報を簡単に確認できます。
例えば OpenSSL パッケージの Changelog を確認する場合は次のように実行します。
dnf changelog openssl
このコマンドにより、rpm -q --changelog と同じように、パッケージの変更履歴やセキュリティ修正の情報を一覧で確認できます。
ただし、個人的な体感として、詳細な情報は rpm コマンドの方がより正確に表示されるケースが多いと感じます。
そのため、基本的には rpm コマンドを利用して確認することをおすすめします。
注意点 #
Changelog を確認する際にはいくつかの注意が必要です。
まず、Changelog にすべての修正内容が記載されているわけではありません。
パッケージによっては、修正内容が省略されていたり簡略化されている場合があります。
中にはサイレントで修正されていることもあるため、Changelog だけで脆弱性の対応状況を完全に把握することはできません。
Changelog の確認はあくまでも概要を把握するための簡易的な方法となっております。
より正確に脆弱性対応状況を確認したい場合は、以下の方法を併用することをおすすめします。
- ベンダの公式情報を確認する(セキュリティ情報やリリースノート)
- rpm パッケージを展開して実際のパッチ内容を確認する
- サポートやコミュニティにお問い合わせを行う
これにより、Changelog では確認できない修正内容や脆弱性対応の詳細も把握でき、より安全にシステム運用を行うことができます。