OpenSSL は重大度の高いデータ盗用バグを修正します - 今すぐパッチを適用してください!

OpenSSL は重大度の高いデータ盗用バグを修正します - 今すぐパッチを適用してください!

ソースノード: 1945167

世界で最も広く使用されている暗号化ライブラリではないにしても、おそらく最もよく知られている OpenSSL が、 トリプテクタ セキュリティ更新プログラムの。

これらのパッチは、組織がすべての人にサポートしている現在の 1.0.2 つのオープンソース バージョンと、プレミアム サポートの料金を支払った顧客のみが更新プログラムを利用できる「古い」XNUMX バージョン シリーズを対象としています。

(コストを気にしなくても、サポートに料金を支払う必要がなくなった方がおそらくあなたにとっては良いでしょう。それは、OpenSSL 自体が廃止しようとしたバージョンから最終的に離れることになるからです。数年前。)

更新後に確認したいバージョンは次のとおりです。

  • OpenSSL 3.0 シリーズ: 新しいバージョンになります 3.0.8.
  • OpenSSL 1.1.1 シリーズ: 新しいバージョンになります 1.1.1t (それは最後にT-for-Tangoです)。
  • OpenSSL 1.0.2 シリーズ: 新しいバージョンになります 1.0.2zg (ズールーゴルフ)。

以前のバージョンの末尾に 26 つの数字と文字が付いている理由が気になる場合は、OpenSSL プロジェクトが XNUMX つの部分からなるバージョン ID を使用しており、末尾の文字が XNUMX のサブバージョンをサポートできるカウンターとして機能していたためです。

バージョン 1.0.2 に何が起こったかからわかるように、26 のサブバージョンでは不十分であることが判明し、バージョン Z-for-Zulu の後に何をすべきかという困惑が残されました。注文するか、Z-for-Zulu に固執して、A-to-Z のサブサブバージョン サイクルを開始します。

また、覚えているかもしれませんが、数字と小文字のミスマッシュは、バージョン 1.1.1l (L-for-Lima) が登場したときに特に混乱を招きました。

Naked Security は、多くの国で現在も使用されているバウハウス時代の道路標識のレタリングに基づいた書体を喜んで使用しています。小文字の L 文字は、大文字の Is および数字の 1 とは完全に意図的に異なりますが、多くの書体は小文字の L をレンダリングします。およびアッパーIも同様です。

バージョン 3 が登場したとき、OpenSSL チームは現在人気のある XYZ XNUMX 番号のバージョン管理システムを採用することを決定したため、現在のバージョン シリーズは 3.0 サブバージョンは現在 8. (現在開発中の次のバージョンは 3.1 になります。)

ご参考までに、通常の OpenSSL 2.x シリーズはありませんでした。そのバージョン番号は、IPv4 の後に IPv6 が続いたのと同じように、すでに別の何かに使用されていたためです。しばらくの間、混乱を引き起こした可能性があります。

何が間違っていた?

CVE 番号が付けられたバグ修正は全部で XNUMX つあり、そのうち XNUMX つがメモリの管理ミスが原因であると聞いても驚かないでしょう。

いいね OpenSSHのについて先週末に書いた、OpenSSL は C で書かれており、C プログラムでメモリの割り当てと割り当て解除を処理するには、通常、多くの「自分でやる」必要があります。

残念なことに、経験豊富なプログラマーでさえ、 malloc() 呼び出しとその free() または、どのメモリ バッファがプログラムのどの部分に属しているかを追跡できなくなる可能性があります。

XNUMX つのメモリ関連のバグは次のとおりです。

  • CVE-2023-0286: X.400 GeneralName での X.509 アドレス タイプの混乱。 重大度が高い。 このバグはすべてのバージョン (3.0、1.0.1、および 1.0.2) に影響します。
  • CVE-2023-0215: BIO_new_NDEF に続く use-after-free。 中程度の重症度; バグはすべてのバージョン (3.0、1.1.1、1.0.2) に影響します。
  • CVE-2022-4450: PEM_read_bio_ex を呼び出した後、XNUMX 倍解放します。 中程度の重症度; このバグは、バージョン 3.0 および 1.1.1 のみに影響します。
  • CVE-2022-4203: X.509 Name Constraints 読み取りバッファ オーバーフロー。 中程度の重症度; バグはバージョン 3.0 のみに影響します。
  • CVE-2023-0216: d2i_PKCS7 関数で無効なポインター逆参照。 中程度の重症度; バグはバージョン 3.0 に影響します。 それだけ。
  • CVE-2023-021: DSA 公開鍵を検証する NULL 逆参照。 中程度の重症度; バグはバージョン 3.0 のみに影響します。
  • CVE-2023-0401: PKCS7 データ検証中の NULL 逆参照。 中程度の重症度; バグはバージョン 3.0 のみに影響します。

メモリのバグの説明

説明する。

A NULL 逆参照 数値 0 をメモリ アドレスとして処理しようとすると発生します。

これは、多くの場合、ストレージ変数が正しく初期化されていないことを示しています。これは、ゼロがデータを保存する有効な場所とは見なされないためです。

実際、最近のすべてのオペレーティング システムは、メモリの最初の数千バイト以上を意図的に使用不可としてラベル付けしているため、いわゆる「ゼロ ページ」を読み書きしようとすると、ハードウェア レベルのエラーが発生し、オペレーティング システムが問題のあるページをシャットダウンできるようになっています。プログラムダウン。

この種の間違いから回復する賢明な方法はありません。なぜなら、本当に意図されたものを推測することは不可能だからです。

その結果、このタイプのリモートでトリガー可能なバグを含むプログラムはサービス拒否 (DoS) 攻撃を受けやすく、サイバー犯罪者は意図的に脆弱性を引き起こし、プログラムを強制的にクラッシュさせます。

An 無効なポインター逆参照 似ていますが、メモリアドレスを表していない数値を使用しようとしていることを意味します。

偽のメモリ アドレスは実際には存在しないため、この種のバグは通常、何も破損しません。存在しないプロパティに偽の召喚状または偽の請求書を郵送して、誰かを騙そうとするようなものです。

しかし、NULL 逆参照のように、副作用 (プログラムのクラッシュ) が DoS 攻撃に変わる可能性があります。

読み取りバッファ オーバーフロー 彼らが言うことを意味します。つまり、本来あるべき場所を超えてデータにアクセスするため、通常、直接悪用して破損したり、実行中のプログラムを乗っ取ったりすることはできません。

しかし、攻撃者が覗き見する余分なデータには、攻撃者が見るはずのない復号化された情報や、パスワードや秘密鍵などの暗号化資料が含まれている可能性があるため、暗号化アプリケーションでは常に心配しています。

歴史上最も有名な読み取りオーバーフローの XNUMX つは、として知られる OpenSSL のバグでした。 ハートブリード、クライアントはサーバーに短いメッセージを「バウンスバック」して、それがまだ生きていることを証明するように要求できます-ハートビートとして知られているように-しかし、受信者をだまして、着信メッセージに最初に含まれていたよりも最大64Kバイト多くのデータを送り返すことができました. 攻撃者は、サーバーからデータを何度も「抜き取る」ことで、決して公開されてはならないあらゆる種類のデータ フラグメントを徐々につなぎ合わせることができ、時には暗号化キーも含まれます。

A 使用-後フリー つまり、メモリをシステムに戻すことを意味します。これは、プログラムの別の部分に渡す可能性がありますが、知らないうちに足元で変更された可能性がある場合でも、そのメモリ ブロックの内容に依存し続けます。

理論的には、これにより、攻撃者はプログラムの別の部分で一見無害に見える動作をトリガーすることができます。これは、コードを誤った方向に誘導したり制御したりするメモリの変更を意図的に引き起こすことを目的としています。より長いコントロール。

A ダブルフリー は似ていますが、これは、以前に返されたメモリのブロックをシステムに返すことを意味し、したがって、プログラムの他の場所に既に割り当てられている可能性があります。

解放後の使用と同様に、これにより、プログラムの XNUMX つの部分が同じメモリ ブロックを信頼し、各部分が存在すると予想されるデータ (および、既に検証済みであり、したがって進んでいる可能性があること) に気付かない可能性があります。すぐに頼ることができません) 他の部分によって悪意を持って切り替えられた可能性があります。

最後に、 タイプの混乱 バグはここで最も深刻なものです。

型の混同とは、簡単に言えば、ある型のデータを含むように装ってプログラムにパラメーターを提供し、後でプログラムをだまして別の種類のパラメーターとして受け入れるようにすることを意味します。

非常に簡単な例として、「スマート」な家庭用オーブンに時間を設定する必要があることを伝えることができると想像してください。 13:37 整数値 1337 を送信します。

受信コードは、時計が無効な時刻に設定されるのを防ぐために、数値が 0 から 2359 までの範囲にあり、100 で割った余りが 0 から 59 までの範囲にあることを慎重にテストするでしょう。

しかし、後でオーブンを説得して、代わりに時間を温度として使用できると想像してみてください。

温度を提供していることを前もって認めていた場合に発生するチェックをこっそりと回避したことになります (1337 は、現在使用されている一般的なスケールの調理用オーブンには高すぎます。K、°C に関係なく)または°F)。

メモリ比較の誤用

C プログラムでは、単純な古い数値をメモリ ポインタと交換できる可能性があるため、型の混乱はしばしば特に危険です。これにより、機密であるはずのメモリ アドレスがこっそりと発見されたり、さらに悪いことに、機密であるメモリ ブロックの読み取りまたは書き込みが行われる可能性があります。立入禁止のはずです。

OpenSSL チームが認めているように、上記の重大度の高いタイプの混乱バグに関しては、 「証明書失効リストのチェックが有効になっている場合、この脆弱性により、攻撃者は任意のポインタを memcmp() [メモリ比較] を呼び出し、メモリの内容を読み取ることができるようにします。

XNUMX つのメモリ ブロックの XNUMX つを間違った方向に向けることができる場合 memcmp()、秘密のメモリ バッファを選択したメモリ ブロックと繰り返し比較することで、秘密のバッファに何が入っているかを徐々に把握できます。 たとえば、「この文字列は A?」 そうでない場合はどうですか B? はい? 次は何ですか? どうですか BA? BB? 等々。

タイミング バグが XNUMX つを締めくくる

XNUMX 番目のバグは次のとおりです。

  • CVE-2022-4303: RSA 復号化における Oracle のタイミング。 中程度の重症度; このバグはすべてのバージョン (3.0、1.0.1、および 1.0.2) に影響します。

暗号化コードは、さまざまな計算にかかる時間に特に注意を払う必要があります。これにより、攻撃者は、応答速度がある種の「簡単な」ケースが当てはまることを示しているかどうかを調べて、どのテキスト文字列または数字が関係しているかを推測できなくなります。

簡単な例として、頭の中で特定の数に 13 を掛けるように求められたと想像してください。

これを行うには、数値に 0 (即答: ゼロ!) または 1 (即答: 同じ数値、変更なし) を掛けるよりもはるかに時間がかかり、10 を掛けるよりもかなり長くかかります (最後にゼロを付けて、新しい番号を読み上げます)。

暗号化では、メモリ内のデータの検索、テキスト文字列の比較、算術の実行など、関連するすべてのタスクにかかる時間が同じであることを確認する必要があります。すべてをできるだけ迅速に行うことで時間を節約しようとします。

何をするか?

簡単です。

今すぐパッチを適用: 以下のいずれかまたはすべてが必要です 1.0.2zg (ズールーゴルフ)、 1.1.1t (T-for-Tango) および 3.0.8.

多くの Linux ディストリビューションでは、多くの異なるアプリケーションで使用される共有ライブラリに適用されるオペレーティング システムの更新をインストールする必要があることを忘れないでください。ただし、独自のバージョンの OpenSSL を持ち込んで更新が必要なアプリケーションもある場合があります。 .

一部のアプリには、XNUMX つの異なるバージョンの OpenSSL が含まれている場合があり、どちらにもパッチが必要です。

遅らせるな、今日やれ!


タイムスタンプ:

より多くの 裸のセキュリティ