BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Bashを通じたリモートコードエクスプロイト

Bashを通じたリモートコードエクスプロイト

原文(投稿日:2014/09/24)へのリンク

先日のセキュリティファイリングCVE-2014-6271で,子プロセスに渡される環境変数に設定された任意のコードを実行可能な,リモートエクスプロイトが発見された。環境変数を通じてWebサーバから子プロセスにCGIスクリプトが転送されて,それが脆弱性を持つバージョンのBashによって実行されるようなケースが考えられる。

DebianとRedHatはすでにアップデートバイナリを提供している。他のオペレーティングシステムベンダについても,間もなくこれらに追随するものと思われる。Appleは攻撃に対して脆弱性のある,非常に古いバージョンのBashを使用しているが,現段階では同社からアップデートの発表は行われていない。

この脆弱性は,環境変数に渡される値によって引き起こされる。

 env x='() { :;}; echo vulnerable'

新たに/bin/bashプロセスが起動されるとこのコードが実行されて,コンソールに文字が表示される。この問題は,Bashシェルがこの環境変数を正しく解析できていないことにある。その結果,セミコロン以後のコードが誤って実行されてしまうのだ。Bash(あるいは"/bin/sh"が"/bin/bash"のシンボリックリンクの場合は"/bin/sh")で実行されるCGIスクリプトは,ごく普通にそのコードを実行することになる。

リモートアタックの攻撃者はこれを,CGIスクリプトに引数としてエクスポートされる(USER変数などの)不正なコンテントを渡すために利用する。これがBashスクリプトであれば,マシンで実行中のプロセスをすべてコントロールすることも可能になるだろう。

Bashの開発者が提供している詳細情報は,要約すると次のようなものだ。

脆弱性の技術的な詳細は以下のとおりです。

Bashはシェル変数だけではなく,シェル関数も,プロセス変数を経由して(間接的に)子プロセスにエクスポートする機能をサポートしています。現在のバージョンでは,関数名を変数の名前,"() {"で始まる関数定義を変数の値とする環境変数を使用することで,環境を通じて関数定義を伝搬しています。脆弱性が発生するのは,bashが,関数定義の処理を終了した後も処理を止めないためです。関数定義に続くシェルコマンドも解析されて,実行されてしまうのです。例えば,次のような内容を設定した環境変数

  VAR=() { ignored; }; /bin/id

がbashプロセスにインポートされると, /bin/idが実行されます。(Bashプロセスは,この時点ではまだ部分的に未定義な状態にあります。
PATH変数がまだ設定されていない可能性があるので,/bin/idを実行後にクラッシュするかも知れません。ですが,その時点ですでにダメージは発生しているのです。)

コマンドを後ろに付けた悪意のある関数定義のキャリアとして,任意の名称の環境変数が使用可能であるという事実が,この脆弱性を極めて深刻なものにしています。ネットワークをベースとした悪用が可能だからです。

REMOTE_HOSTやTERMなどの環境変数を使用することで,HTTPとSSHのいずれでも脆弱性の存在する可能性がある。

インターネットに接続されたシステムを担当する開発者や運用関係者は,すでにその実施が報じられているとおり,速やかにBashをアップグレードするか,あるいは考え得る攻撃を軽減する措置を取ることが必要だ。以下のバージョンのBashに対しては,パッチが提供されている。

http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-017
http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-018
http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052
http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-039
http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-012
http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-048
http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-025

 

この記事に星をつける

おすすめ度
スタイル

BT