bashのshellshock

shellshockと呼ばれるbashの脆弱性が盛り上がっているようなので、少し調べてみました。

 

Table of Contents

1 CVE-2014-6271

bashの環境変数で関数を定義した際に、不正な実行コードを埋め込むことが できてしまう脆弱性です。

2 CVE-2014-7169

CVE-2014-6271の修正が不完全な為、CVE-2014-6271と同様の問題となる脆弱 性です。

3 確認方法

Red Hatの記事によると以下のコマンドでvulnerableと表示されるかされな いかで脆弱性の有無を確認できます。

$ env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"
bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
bash: error importing function definition for `BASH_FUNC_x'
vulnerable
test

上記はosxでの出力です。

$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.

4 脆弱性の仕組み

環境変数に関数定義と不正な実行コードを埋め込むことで、bash起動時に不 正な実行コードが評価されてしまいます。

以下のようなHello, Worldと表示するシェルスクリプトを用意します。

$ ls -l hello.sh
-rwxr-xr-x 1 <user> <group> 31 Sep 27 11:29 hello.sh
$ cat hello.sh
#!/bin/sh

echo "Hello, World"

このシェルスクリプトを実行する前にexport関数でexplicitという不正な実 行コードを環境変数xに設定します。

$ export 'x=() { ignore;}; explicit'

シェルスクリプトを実行しようとするとexplicitというコマンドをbashが実 行しようとします(コマンドが見つからずに不正終了)。

$ ./hello.sh
/bin/sh: explicit: command not found
Segmentation fault: 11

.で実行する場合はこの限りではないようです(.経由の場合は同じプロセス で実行する為、環境変数は評価されない)。

$ . ./hello.sh 
Hello, World

5 脆弱性の対応状況

 

5.1 Linux

Red Hat系、Debian系はすでにアップデートが公開されております。

5.2 OSX

Appleのコメントでは、OSXでCGIを動かしてるようなユーザのみに影響があ り、多くのOSXユーザには無関係という見解のようです。 AppleはOSXで採用しているオープンソースを定期的に脆弱性対応のアップデー トをしていますが、Linuxや他のUnixに比べるとフットワークはそこまで軽 くないようです。

アップデートが公開されました。

6 DHCPクライアントの問題

DHCPクライアントによってはシェルスクリプトで実装され、bashを使用する ものがあり、悪意のあるDHCPサーバからbashの環境変数に影響を及ぼすパケッ トを送信されると本脆弱性の被害を受ける可能性があるようです。 この記事によると、DHCPサーバ側で設定したAdditional Optionの値がDHCP クライアント側でbashに渡され、DHCPクライアント上で実行されたechoの結 果がDHCPサーバ側に送信されているようです。 これは相当に影響範囲が広いと思います。