本記事は2022年10月31日に公開した英語ブログNew OpenSSL critical vulnerability: What you need to knowを日本語化した内容です。
※日本語ブログ注記:リリース後、日本時間の2022年11月2日(水)に内容を一部更新しました。
※最新情報に関するブログと、この脆弱性に関する解説記事のリンクを下記に記載しました。
2022年10月25日、OpenSSL プロジェクトは、重大なセキュリティ脆弱性に対処するために、 OpenSSL (バージョン 3.0.7) を近日中にリリースすることを発表しました。 この脆弱性(1つではなく2つありました)は2022年11月1日(火)に公開され、OpenSSLプロジェクトは問題点と修正の詳細を記したブログを公開しました。この脆弱性と、なぜ「クリティカル(Critical)」から「高(High)」に下がったのかについては、近日中に別のブログにてご説明する予定です。本ブログは、このような脆弱性に備えるためにSnykをどのように使用するかに焦点を当て、最新の情報に基づいて更新しています。
Snykは詳細なアドバイザリを公開しており、新たな詳細が公表された場合には、このアドバイザリを更新します。
この脆弱性について
OpenSSL プロジェクトは、この脆弱性の深刻度を高い (High) とし、OpenSSL の 3.x バージョンにのみ影響を与えるとしています。つまり、3.0 未満のバージョンの OpenSSL を使用している場合は、今のところ影響を受けないはずです。
OpenSSL プロジェクトのセキュリティポリシーは、OpenSSL プロジェクトが重大な脆弱性と考えるものを次のとおり示しています。
これ (重大な脆弱性) はよく使われる設定に影響し、また悪用される可能性があるものです。例えば、サーバーのメモリの内容の著しい漏洩 (ユーザー情報が漏洩する可能性)、リモートからの容易な攻撃によりサーバー秘密鍵の漏洩や、またはよくある状況でリモートコード実行 (RCE) を可能とする脆弱性などです。これらの問題は非公開とされ、サポート対象の全バージョンへ新しいリリースを提供することになります。私たちは、できるだけ早くこれらの問題に対処するよう努めます。
深刻度を「高い」に引き下げた理由については、OpenSSL のブログで詳しく説明されています。
現在、脆弱性のあるバージョンの OpenSSL (3.0 以上) は、Ubuntu 22.04 LTS、RHEL 9 などの Linux OS で使用されています。しかし、Debian などの Linux ディストリビューションでは、OpenSSL 3.x はまだテスト版とみなされる最新のリリースにしか含まれていないため、実稼働システムでの普及は限定的である可能性があります。また、影響を受けるバージョンの Linux を使用して構築されたコンテナイメージも影響を受けます。ただし、多くの Docker 公式イメージは Debian Bullseye (11) と Alpine を使用しています。これらのディストリビューションはまだ OpenSSL 1.x を使用しているので、影響を受けないことは特筆すべきことです。ウェブトラフィックの処理に人気のある nginx や httpd などのプロジェクトの Docker 公式コンテナイメージも Bullseye と Alpine を使用しており、影響はありません。
Node.js 18.x および 19.x もデフォルトで OpenSSL3 を使用しているため、数日中に Node.js でのアップグレードが行われると予想されます。
最後に、もしあなたの開発者が C/C++ を使用している場合、それらのコードにOpenSSL v3 パッケージが組み込まれている可能性があります。そして、このコードに関連する OpenSSL のパッケージがあるかどうかを確認する必要があります。
脆弱性が公表される前に影響の有無を確認する方法
この脆弱性に関して興味深いことの1つは、OpenSSLプロジェクトが、重要なセキュリティ修正について、リリースの1週間前に公表していたことです。少なくとも1つの重要な脆弱性があると指摘されていたため、人々は、影響を受ける可能性のあるアプリケーション、コンテナ、およびサーバーを検索する方法を見つけ出す時間を得ることができたのです。脆弱性が公表された後、Snykのようなセキュリティツールは当然その存在を検出し、修正を提供します。しかし、脆弱性が公表される前に、Snyk を使ってどのようにそれらを計画することができるでしょうか?以下は、このOpenSSL脆弱性についての手順ですが、SBOM(ソフトウェアの部品表)があり、すべてのオープンソースコードパッケージとコンテナについて完全なSCA分析を行っている限り、事前にいくつかの詳細が分かっているあらゆる脆弱性に使用することが可能です。
Snyk の Business または Enterprise プランをご利用の場合、OpenSSL の脆弱なバージョン (3.0.x) を含むすべてのプロジェクトを検索することができます。Reports に進み、Dependencies の検索ボックスで、"openssl" を入力し、3.0.x バージョンを含むプロジェクトを検索します。Projects のリンクから、関連するプロジェクトに移動できます。必要であれば、データをCSVファイルにエクスポートすることもできます。
Snyk API にアクセスできるお客様 (Business および Enterprise プラン) は、API を使用してこのデータを抽出することもできます。たとえば、Snyk Labs チームが提供する snyk-deps-to-csv というユーティリティを使用すると、依存先パッケージを CSV に抽出することができます。また、dependencies API にアクセスすることもできます。
無料アカウントのユーザーを含む Snyk ユーザーなら誰でも、Snyk ダッシュボードにアクセスしてプロジェクトを選択し、Dependencies タブをクリックして "openssl" を検索すれば、OpenSSL の脆弱なバージョンをスキャンすることが可能です。ここでも、OpenSSL 3.0.x バージョンが影響を受けることになります。
まだ Snyk でプロジェクトをテストしていない場合は、 Snyk CLIでテストすることができます。
-
OpenSSLのようなオープンソースパッケージや、OpenSSL を推移的に使用するパッケージを含むコードプロジェクトをテストするには、
snyk test
を実行して CLI で直接結果を確認するか、snyk monitor
を実行して Snyk Web UI で結果を確認します。- C/C++ を使用していて、OpenSSL がパッケージマネージャーを使わないプロジェクトに含まれているかどうかを確認したい場合 (アンマネージド)、
snyk test
を実行するときに--unmanaged
オプションを追加してください。
- C/C++ を使用していて、OpenSSL がパッケージマネージャーを使わないプロジェクトに含まれているかどうかを確認したい場合 (アンマネージド)、
-
コンテナイメージをテストする際、CLI で直接結果を見るには
snyk container test
を、Snyk の Web UI に結果を送るにはsnyk container monitor
を実行します。- Docker Desktopのユーザは、
docker scan
を実行してコンテナイメージをテストすることもできます。コンテナ内のパッケージの簡潔な出力を見たい場合は、--dependency-tree
スイッチを使用してください。
- Docker Desktopのユーザは、
-
上記のいずれのタイプの
test
でも、CLI で依存関係のリストを表示したい場合は、--print-deps
オプションを追加してください。monitor
コマンドを使用している場合は、Snyk の Web UI で依存関係が自動的に報告されます。 -
もしあなたがLinuxユーザーなら、ターミナルで
openssl version
コマンドを実行するだけで、あなたが使っているOpenSSLのバージョンを確認することができます。
OpenSSL の新しい脆弱性への対処法
-
脆弱性についての発表と 2022 年 11 月 1 日 (火) のセキュリティリリースについて、チームメンバーに周知してください。本件について、また計画中のリリースを認識することが、準備のための最善の方法です。
-
アプリケーションとインフラについて、OpenSSL 3.0 以上を使用しているかどうかを確認してください。
-
脆弱性のある OpenSSL がインストールされている場合は、2022 年 11 月 1 日 (火) のアップデートの準備をしましょう。
Snyk を使用して脆弱性の検出と修正をされている場合、Snyk 脆弱性データベースに脆弱性が登録され、詳細が公開される 2022 年 11 月 1 日にプロジェクトをスキャンすると、脆弱性が検出されます。また、修正プログラムが利用可能になった時点で、Snyk が把握している脆弱性のあるバージョンを更新するよう促されます。
落ち着いて対処しましょう!
重大な脆弱性の発見はストレスですが、落ち着いて対処しましょう。OpenSSL プロジェクトは、セキュリティインシデントに責任を持って対処し、タイムリーな修正を提供してきた長い実績があります。
Snyk のような脆弱性対策ツールをまだ使用していないのであれば、今が試す良い機会かもしれません。このようなインシデントが発生したときに通知してくれますし、セキュリティ修正プログラムが利用可能になったときに、それを展開することもできるかもしれません。
すべての問題を解決することは不可能ですが、重要な問題を把握し、迅速に更新することは、リスクを軽減しセキュリティインシデントを回避するための堅実な戦略です。
より詳しい情報
今後の脆弱性対策に役立ていただける情報です。
- Snyk Advisory (Snyk アドバイザリー)
- Docker DSA 2022-0001: これは公開された CVE を見越した一時的な勧告ですが、影響を受けるパッケージと公開コンテナイメージの一覧を提供しています。
- SANS Internet Storm Center: 影響を受ける Linux ディストリビューションの一覧
- DistroWatch: 影響を受ける Linux ディストリビューションの一覧
- Node.js notice: Node.js によるセキュリティ関連発表、Node v18.x と v19.x OpenSsl v3 を使っています。