ゼファーネットのロゴ

OpenSSLは、以前のバグ修正に対してバグ修正を発行します

日付:

OpenSSLユーザーの場合は、おそらく最新のものを知っているでしょう。 注目を集めるバグ修正 2022年XNUMX月にリリースされました。

その修正により、OpenSSSがもたらされました 3.0.2 & 1.1.1n、製品の現在完全にサポートされているXNUMXつのフレーバーの更新。

(レガシーバージョンの1.0.2がありますが、そのバージョンへのアップデートは、プレミアムサポートを購入しているお客様のみが利用できます。また、1.0.2の時代からの製品の変更と改善を考慮して、次のバージョンにジャンプすることをお勧めします。主流のバージョンでさえ-おそらく特に-あなたがサポートのために支払いを続けることを計画しているなら。)

2022年XNUMX月の更新は、特にそのコードが複雑で特殊な低レベルの関数の一部である場合、異常なバグを伴う深く埋もれたコードが何年も見落とされる可能性があることを思い出させる重要なものでした。

当時修正されたバグは、として知られているものを計算するための特別な目的のアルゴリズムに関連していました モジュラー平方根、通常の平方根よりも計算が複雑です。

残念ながら、1890年代に最初に発見されたアルゴリズムを使用してこの計算を実行するコードは、不器用にコード化され、曲がりくねって書かれ、コメントが不十分で、従うのが困難でした。

ただし、OpenSSLの明らかな「外部向け」の部分ではなく、書き直しが困難な作業であったことを考えると、提示されたときに回答の正しさについて慎重にテストされたと想定しています。整形式の数値ですが、入力の可能性が低い場合の堅牢性については調査されていません。

なぜなら、不正な形式の番号を生成するためにブービートラップされたデジタル証明書に直面した場合、OpenSSLは BN_mod_sqrt() 関数がだまされて永遠にループし、存在しなかった答えに近づこうとする可能性があります。

整数のみを操作し、あらゆる種類の分数を許可しない場合、多くの整数が通常の平方根を持たないのと同じように、多くの数値がモジュラー平方根を持たないことがわかります。 したがって、7×7 = 49であるため、49の平方根は整数、つまり7になります。ただし、次の「完全な正方形」は50×51であるため、それ自体で乗算して8または8を得ることができる整数はありません。 = 64.好きなだけ試すことができますが、√51の整数の答えは見つかりません。

実際に間違っていることはなく、不完全なだけです

言い換えると、OpenSSLのBigNumberコード(多くの暗号化アルゴリズムは、数百桁または数千桁の長さの数値の処理に依存しています)は、 間違った 答え、それは時々見つけるべき答えがないことに気づかず、無限ループで立ち往生するでしょう。

この無限ループは、悪用されて、 サービス拒否 攻撃(DoS)は、悪意のあるWebサイトがブービートラップされたデジタル証明書を介して送信された場合にトリガーされる可能性があります。

これは、皮肉なことに、デジタル証明書の検証に細心の注意を払っていたソフトウェアが、吹き替えられたこのバグを介してひざまずく可能性があることを意味しました CVE-2022-0778、証明書の検証をまったく気にしないプログラムは、証明書の検証の影響を受けませんでした。

このバグによって明らかにされた重要な「教えられる瞬間」を考慮して、Naked Securityだけでなく、それについて詳しく説明しました。 より良いスタイルのコードを書く方法、また、SophosLabsがブービートラップされた証明書がどのように欠陥を引き起こす可能性があるかについての残酷な詳細を示したSophosNewsでも バグを理解するためにコードをデバッグする方法.

その間にさらにXNUMXつのセキュリティホール

次のOpenSSLアップデートは 3.0.3または 1.1.1o 大きな欠陥とは見なされなかったバグにパッチを適用した以前のリリースのユーザーの場合(少なくとも、Naked Securityではカバーしませんでした)、主にバグがOpenSSL暗号化ライブラリコード自体になかったためです。

暗号化プロバイダーとしてOpenSSLに依存していたすべてのソフトウェアに影響を与える代わりに、 CVE-2022-1292 OpenSSLツールキットに付属しているPerlで記述されたユーティリティスクリプトに影響を与えました。

このスクリプトは、 c_rehash (の略 証明書ディレクトリの再ハッシュ)は、Mozillaによって信頼できる認証局(CA)として維持されているものなど、暗号化証明書ファイルのディレクトリを取得し、ソフトウェアが特定の証明書を検索するよりも迅速に見つけるのに役立つファイルハッシュのリストを作成するあまり知られていないツールです。名前のアルファベット順のリスト。

たとえば、MozillaのCA証明書ディレクトリは次のようになります…

$ ls -l / usr / share / ca-certificates / mozilla-rw-r--r--1アヒルのアヒル2772-2022-06:23 ACCVRAIZ05.crt-rw-r--r--32つのアヒルのアヒル1 1-1972-2022 06:23 AC_RAIZ_FNMT-RCM.crt-rw-r--r--05アヒルのアヒル32-1-904:2022AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt[。 。 。]-rw-r--r--06アヒルのアヒル23-05-32:1 emSign_Root_CA _-_ G1302.crt-rw-r--r--2022つのアヒルのアヒル06-23-05:32 vTrus_ECC_Root_CA .crt-rw-r--r--1アヒルアヒル1-774-2022:06 vTrus_Root_CA.crt

…OpenSSLの c_rehash スクリプトは、ファイル名ではなく、証明書自体の発行者の名前に基づいてハッシュを介して個々の証明書を見つけることができるシンボリックリンクのリストを生成します。

lrwxrwxrwx 1 duck duck 23 2022-06-24 13:41 002c0b4f.0-> GlobalSign_Root_R46.crt lrwxrwxrwx 1 duck duck 45 2022-06-24 13:41 02265526.0-> Entrust_Root_Certification_Authority _-_ G2.crt lrwxr -1 36:2022 06a24->Staat_der_Nederlanden_EV_Root_CA.crt[。 。 。]lrwxrwxrwx13 duck duck 41 03179-64.0-1 19:2022 fe06a24cd13-> SZAFIR_ROOT_CA41.crt lrwxrwxrwx 8 duck duck 2 8.0-2-1 23:2022 feffd06-> GlobalSign_Root_E24.crt lrwxrwxrwx 13 -41-413.0 46:1 ff49af2022f.06-> TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi _-_ Surum_24.crt

一部のソフトウェアは、これらの「ハッシュリンク」に依存して、特定の証明書のインデックス作成と検索を行うための一種の基本的なデータベースシステムとして機能します。

さらに、一部のオペレーティングシステムディストリビューションは自動的に c_rehash これらの特別な目的のリンクを最新の状態に保つためのバックグラウンドでのスクリプト。

有害と見なされるシェルのメタ文字

残念ながら、スクリプトはPerlに依存していました system() ファイルハッシュを計算する関数(または同等のコマンド)、および system() システムは、必要なサブプログラムを起動するために、Bashなどのコマンドシェルを自動的に起動します。

また、ご存知かもしれませんが、コマンドシェルは、コマンドライン引数を文字通りに処理するとは限らないため、これらの引数に特殊文字を含めると、シェルは潜在的に危険な方法でそれらを処理します。

たとえば、コマンド echo runthis 文字通りテキストを印刷します runthis、しかしコマンド echo $(runthis) 文字を直接印刷しません $(runthis).

代わりに、いわゆる メタコマンド $(runthis) 手段 コマンド置換、つまり、「コマンドを実行します runthis そして、 $(...) それが終了したときにそのコマンドの出力を手放す」:

   #引数は文字通り処理され、メタ文字は見つかりません$ echo runthis runthis#'runthis'を実行しようとしますが、そのようなコマンドは存在しません$ echo $(runthis)-bash:runthis:コマンドが見つかりません#5.18.6つのコマンドを実行し、両方の出力を収集します$ echo $(whoami; uname -s -r)duck Linux XNUMX

によってもたらされるリスクの場合 $(...) 最近悪用されたのはメタコマンドの脆弱​​性だったためです。 Windowsの「フォッリーナ」バグ。 詳細を確認し、バグが実際に動作していることを確認するには、録画されたウェビナーをご覧ください。 下の画像をクリックしてください。 [登録が必要です。その後はすぐにアクセスできます。]

何が修正されましたか?

Webフォームに入力された文字列であれ、外部から提供されたファイル名であれ、他の誰かからの信頼できない入力を受け入れるスクリプトは、コマンドに依存するときにこれらの特別なメタコマンドがシェル引数として漏れないように十分に注意する必要があります。外部ユーティリティを実行するためのシェル。

以下から変更されたコードを見ることができます 1.1.1n 〜へ 1.1.1o:

次の形式のPerlコマンド `...` (バックティック間のコマンド、 `runthis`、は単に昔ながらの書き方です $(runthis) コマンド置換)は、と呼ばれる専用の内部関数に置き換えられました compute_hash これは、構築されたコマンド文字列内の奇妙なメタ文字にさらに注意を払います。

さて、メンテナは、外部コマンドが十分な注意と注意なしに実行されたこのユーティリティスクリプトのすべての場所を完全に把握していなかったことがわかりました。

したがって、今週は リリースを見た OpenSSLの 3.0.4 & 1.1.1p、別の危険なシステムコマンドを修正するには c_rehash ユーティリティ:

今回は、 cp (ファイルのコピー)シェルベースのコマンド system() より安全な専用の内部関数に置き換えられた関数 copy_file.

このバグ修正には公式の識別子があります CVE-2022-2068.

OpenSSL変更ログが警告するように:

[ c_rehash]スクリプトは、自動的に実行される方法で一部のオペレーティングシステムによって配布されます。 このようなオペレーティングシステムでは、攻撃者はスクリプトの権限で任意のコマンドを実行する可能性があります。

何をするか?

  • できるだけ早くOpenSSLを更新してください。 一元的にインストールされたコピーの管理をLinuxディストリビューションに依存している場合は、詳細についてディストリビューションメーカーに確認してください。 システム全体のビルドではなく(またはシステム全体の)OpenSSLの独自のビルドに依存している場合は、そのコピーも更新することを忘れないでください。 あなたが探しています 3.0.4 or 1.1.1p。 走る openssl version 使用しているバージョンを確認します。
  • 引退を検討してください c_rehash 使用している場合はユーティリティ。 オールインワンユーティリティ opensslそもそも証明書の生成と署名に一般的に使用される、には、次のような組み込みのサブコマンドが含まれるようになりました。 rehash 同じ仕事をする。 試す openssl rehash -help 詳細については。
  • 入力と出力をサニタイズします。 受け取った入力をそのまま使用しても安全だと思い込まないでください。また、コードの他の部分に出力として渡すデータには注意してください。
  • 特定の種類のバグのコードを確認するときは、複数のエラーに注意してください。 不注意だったプログラマー system() コード内のある場所でのコマンドは、他の場所でも同様の間違いを犯した可能性があります。

プログラマーは、通常、完全に無実で理解しやすい理由で、同じ種類のバグを何度も生成(または再現)することがよくあります。

コードの作業時にそのクラスのバグに気付いていなかったか、プロトタイプ作業を高速化するために「一時的なショートカット」を使用したが、後で戻って整理したことがないか、誰かをコピーして貼り付けました。他の欠陥のあるコードとそれを独自のものにした…


スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?