複数のパッケージに影響するスタックガードページの回避

Public Date: June 20, 2017, 08:06
更新 June 20, 2017, 08:06 - Chinese, Simplified 英語
Resolved 状態
Important Impact

Red Hat 製品セキュリティーは、 Linux システムに影響する、権限昇格を可能にする脆弱性を認識しています。この脆弱性には、CVE-2017-1000364 (Linux カーネル向け) と CVE-2017-1000366 (glibc 向け) の 2 つの CVE 名が割り当てられています。この問題は 2017 年 6 月 19 日に公表され、重要であると評価されています。

背景情報

Qualys は、「スタックガードページ」と呼ばれる悪用防止メカニズムを回避する実践的な方法を示すセキュリティーアドバイザリーを発表しました。問題は、ユーザー空間バイナリー用のスタックにメモリーが割り当てられる方法にあります。ヒープ (または別のメモリー領域) とスタックのメモリー領域がお互いに隣接する場合、攻撃者はこの問題を利用してスタックガードページをジャンプできます。この結果、プロセススタックまたは隣接メモリー領域で制御されたメモリーの破損が発生し、システム上の攻撃者の権限が昇格します。

スタックガードページとは何か?
スタックガードページは、スタックオーバーフロー攻撃を阻止し、主にCVE-2010-2240 を修正するために Linux カーネルに追加されました。スタックガードページにアクセスすると、トラップがトリガーされ、プロセスのアドレス空間のスタックメモリー領域と他のメモリー領域が分割されます。このため、シーケンシャルスタックアクセスにより、スタックに隣接する他のメモリー領域にアクセスすることができなくなります (同様に、他のメモリー領域へのアクセスによりスタックにアクセスすることもできません)。
これはどのような問題か?

スタックガードページは元々シーケンシャルメモリーアクセスから保護するためのものでした。報告者 (Qualys) は、シーケンシャルスタックオーバーフローを起こさずに (つまり、スタックガードページを使用せずに)、スタックメモリー割り当ての特定のコンストラクトを利用して共通バイナリーで実行されるようにスタックガードページを「ジャンプ」し、無効なアクセスを行わずに隣接メモリー領域のメモリーに再びアクセスすることによって一般的なバイナリーで CVE-2010-2240 の問題を再現する方法を見つけました。この結果、スタックと別のメモリー領域 (通常はヒープ) が重複し、スタックメモリーアクセスがヒープに反映されることになります (同様に、ヒープメモリーアクセスもスタックに反映されます)。

どのような修正が行われたか? 
スタックガードページのジャンプを阻止するには、各スタック割り当てプリミティブが、新しく割り当てられたメモリーのプローブにスタックガードギャップサイズの粒度を実装する必要があります。既存の gcc -fstack-check 実装は、そのことを目的としていますが、現時点では正しく動作しません。gcc -fstack-check 実装が修正され、すべての公開バイナリーが再ビルドされるまで、カーネルと glibc を使用した軽減策によって、報告者が提供したすべての既知の脆弱性を解決できます。

  • CVE-2017-1000364 向けのカーネルの修正により、スタックガードギャップサイズが 1 ページから 1 MiB に増加し、この問題の悪用が困難になります。
  • CVE-2017-1000366 向けの glibc の修正により、AT_SECURE=1 プログラムでの LD_LIBRARY_PATH の使用が拒否されます。これは、DSO 検索パスの構築での入力サニタイズという形で行われます (それ以外の場合は、部分的に使用されたバッファーで非常に大きな alloca() が実行されます)。安全を強化するために、LD_AUDIT、LD_PRELOAD、および LD_HWCAP_MASK の処理で実行されるヒープとスタックの割り当てのサイズが削減されました。以前は、これらを、ヒープとスタックの割り当てを行うために使用できましたが、変更後は、そのような使用が困難になっています。

これらの軽減パッチにはどんな副作用があるか?

この文章の作成時点では、カーネルパッチによって /proc/meminfo で重複する値が作成される既知の問題があります。これにより、システムの機能とカーネルにより提供される保護機能は影響を受けません。この問題を解決するパッチは将来提供される可能性があります。

謝辞

Red Hat は、この問題の報告について Qualys Research Labs に謝意を表します。

この脆弱性を悪用することにより、攻撃者は権限を昇格 し、悪意のあるコードを実行することができます。

Red Hat 製品セキュリティーは、この更新のセキュリティー影響度を重要と評価しています。    

影響を受ける製品

以下の Red Hat 製品バージョンが影響を受けます。

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise MRG 2.5
  • Red Hat Virtualization
  • RHEL Atomic Host

脆弱性の診断


システムの脆弱性を判断する

以下の診断スクリプトを使用して、現在ご使用のシステムにこの不具合による脆弱性があるかどうかを判断します。スクリプトを検証するには 、分離されている GPG 署名 をダウンロードすることもできます。スクリプトの現在のバージョンは 1.0 です。

対処方法

影響を受ける製品をご使用のお客様は、パッチのリリース直後に更新することが強く推奨されます。影響を受けるパッケージの詳細は以下に記載されています。カーネルの更新を適用するには、システムを再起動する必要があります。

Red Hat Enterprise Linux 7.2 以降を実行しているお客様は、kpatch を利用できます。kpatch を利用する場合は、サポートケースを作成してください。

kpatch の詳細については、 RHEL 7 はライブカーネルパッチ (kpatch) をサポートしていますか? を参照してください。


製品パッケージアドバイザリー/更新
Red Hat Enterprise Linux 7kernelRHSA-2017:1484
Red Hat Enterprise Linux 7kernel-rt保留
Red Hat Enterprise Linux 7glibcRHSA-2017:1481
Red Hat Enterprise Linux 7.2 延長アップデートサポート**kernelRHSA-2017:1485
Red Hat Enterprise Linux 7.2 延長アップデートサポート**glibcRHSA-2017:1479
Red Hat Enterprise Linux 6kernelRHSA-2017:1486
Red Hat Enterprise Linux 6glibcRHSA-2017:1480
Red Hat Enterprise Linux 6.7 延長アップデートサポート**kernelRHSA-2017:1487
Red Hat Enterprise Linux 6.7 延長アップデートサポート**glibcRHSA-2017:1479
Red Hat Enterprise Linux 6.6 アドバンスアップデートサポート***kernelRHSA-2017:1488
Red Hat Enterprise Linux 6.6 アドバンスアップデートサポート***glibcRHSA-2017:1479
Red Hat Enterprise Linux 6.5 アドバンスアップデートサポート***kernelRHSA-2017:1489
Red Hat Enterprise Linux 6.5 アドバンスアップデートサポート***glibcRHSA-2017:1479
Red Hat Enterprise Linux 6.4 アドバンスアップデートサポート***kernelRHSA-2017:1490
Red Hat Enterprise Linux 6.4 アドバンスアップデートサポート***glibcRHSA-2017:1479
Red Hat Enterprise Linux 6.2 アドバンスアップデートサポート***kernelRHSA-2017:1491
Red Hat Enterprise Linux 5 ELS*kernelRHSA-2017:1482
Red Hat Enterprise Linux 5 ELS*glibcRHSA-2017:1479
Red Hat Enterprise Linux 5.9 アドバンスアップデートサポート***kernelRHSA-2017:1483
Red Hat Enterprise Linux 5.9 アドバンスアップデートサポート***glibcRHSA-2017:1479
RHEL Atomic Hostkernel保留
Red Hat Enterprise MRG 2kernel-rt保留
Red Hat Virtualization (RHEV-H/RHV-H)kernel保留


*このパッチを取得するには、有効な ELS サブスクリプションが必要です

使用しているアカウントに有効な ELS サブスクリプションがない場合は、Red Hat または他社の営業担当者にお問い合わせください。

**このパッチを取得するには、有効な EUS サブスクリプションが必要です

お持ちのアカウントに有効な EUS サブスクリプションがない場合は、詳細について Red Hat または他社の営業担当者にお問い合わせください。

Red Hat Enterprise Linux Extended Update Support サブスクリプションとは何ですか?

***RHEL AUS のパッチを取得するには、有効な AUS サブスクリプションが必要です

Ansible Playbook

Ansible  Playbook が利用可能です。

この Playbook は、HOSTS という名前の変数に対して実行され、次のように起動できます (「hostname」がインベントリーファイルに定義されていることが前提です)。 

# ansible-playbook -e HOSTS=hostname cve-2017-1000366.yml

この Playbook には root 権限が必要なため、インベントリーファイルで「hostname」が定義されていない場合は、--become を指定する必要がある場合があります。

Comments