coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

Shellshock の検証用シェルスクリプトの動作について

2014-10-02 20:11:02 | Raspberry Pi
この記事を書く前に、bash 4.3 patch 28 が出ましたので、先にそちらを示します。

# wget get http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-028
# wget get http://ftp.jaist.ac.jp/pub/GNU/bash/bash-4.3-patches/bash43-028.sig
# gpg2 --verify bash43-028.sig
gpg: Signature made Thu Oct 2 02:23:01 2014 JST using DSA key ID 64EA74AB
gpg: Good signature from "Chet Ramey <chet@cwru.edu>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7C01 35FB 088A AF6C 66C6 50B9 BB58 69F0 64EA 74AB
#

前回コンパイルしたbash-4.3 ディレクトリに対してこのパッチをあてます。事前に /usr/local/bin/bash は、bash43-27 として待避しておきます。修正ファイルは少ないので、Raspberry Pi でもすぐに再コンパイルできます。

# bash --version | head -1
GNU bash, version 4.3.27(1)-release (armv6l-unknown-linux-gnueabihf)
# cd bash-4.3
# patch -p0 <../bash43-028
patching file parse.y
patching file y.tab.c
Ignoring potentially dangerous file name ../bash-4.3/patchlevel.h
patching file patchlevel.h
# make
....................
# make install 2>&1 | tee Install.log
....................
#
# bash --version | head -1
GNU bash, version 4.3.28(2)-release (armv6l-unknown-linux-gnueabihf)

4.3.28(2)で、(2)となっているのは、一度コンパイルした後で、ソースファイルを修正してコンパイルした回数を表します。patch 27 まであてて一度コンパイルしてから、patch 28 をあてて再コンパイルしたので (2) です。

さて、前回、Shellshock 対策で、bash 4.3 patch 27 をインストールしましたが、ついでに Pidora 2014 のオリジナル /bin/bash と、patch 25 (bash 4.3.25) と patch 26 (bash 4.3.26) も作成して、公開されている 5種類の Shellshock のテストシェルスクリプトの動作をまとめてみました。


1) (CVE-2014-6271)
env 'x=() { :;}; echo vulnerable' bash -c "echo test"

version 4.3.27(1) patch 27 まで bash43-27
test


version 4.2.47(1) Pidora2014 オリジナル版 /bin/bash
vulnerable
test


version 4.3.25(1) patch 25 まで bash43-25
bash43-25: warning: x: ignoring function definition attempt
bash43-25: error importing function definition for `x'
test


version 4.3.26(1) patch 26 まで bash43-26
bash43-25: warning: x: ignoring function definition attempt
bash43-25: error importing function definition for `x'
test



2)
env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test"

version 4.3.27(1)
test


version 4.2.47(1)
vulnerable
/bin/bash: BASH_FUNC_x(): line 0: syntax error near unexpected token `)'
/bin/bash: BASH_FUNC_x(): line 0: `BASH_FUNC_x() () { :;}; echo vulnerable'
/bin/bash: error importing function definition for `BASH_FUNC_x'
test


version 4.3.25(1)
bash43-25: warning: x: ignoring function definition attempt
bash43-25: error importing function definition for `x'
bash43-25: error importing function definition for `BASH_FUNC_x()'
test


version 4.3.26(1)
bash43-26: warning: x: ignoring function definition attempt
bash43-26: error importing function definition for `x'
bash43-26: error importing function definition for `BASH_FUNC_x()'
test



3) (CVE-2014-7186, ./test001-bad等はシェルスクリプトファイル名)
env 'f=() { :<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<m<<n
a
b
c
d
e
f
g
h
i
j
k
l
m
n
}' bash -c 'echo test'


version 4.3.27(1)
test


version 4.2.47(1)
./test001-bad: line 18: 26253 Segmentation fault env 'f=() { :<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<m<<n
a
b
c
d
e
f
g
h
i
j
k
l
m
n
}' /bin/bash -c 'echo test'


version 4.3.25(1)
./test001-bad25: line 18: 26270 Segmentation fault env 'f=() { :<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<m<<n
a
b
c
d
e
f
g
h
i
j
k
l
m
n
}' bash43-25 -c 'echo test'


version 4.3.26(1)
./test001-bad26: line 18: 26307 Segmentation fault env 'f=() { :<<a<<b<<c<<d<<e<<f<<g<<h<<i<<j<<k<<l<<m<<n
a
b
c
d
e
f
g
h
i
j
k
l
m
n
}' bash43-26 -c 'echo test'



4)
bash -c "export f=1 g='() {'; f() { echo 2;}; export -f f; bash -c 'echo \$f \$g; f; env | grep ^f='"

version 4.3.27(1)
1 () {
2
f=1


version 4.2.47(1)
/bin/bash: g: line 1: syntax error: unexpected end of file
/bin/bash: error importing function definition for `g'
1
2
f=1
f=() { echo 2


version 4.3.25(1)
bash43-25: g: line 1: syntax error: unexpected end of file
bash43-25: error importing function definition for `g'
1
2
f=1
f=() { echo 2


version 4.3.26(1)
bash43-26: g: line 1: syntax error: unexpected end of file
bash43-26: error importing function definition for `g'
1
2
f=1
f=() { echo 2



5) (CVE-2014-7169)
cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo


version 4.3.27(1)
date
cat: /tmp/echo: No such file or directory


version 4.2.47(1)
/bin/bash: x: line 1: syntax error near unexpected token `='
/bin/bash: x: line 1: `'
/bin/bash: error importing function definition for `x'
Thu Oct 2 12:37:38 JST 2014


version 4.3.25(1)
bash43-25: x: line 1: syntax error near unexpected token `='
bash43-25: x: line 1: `'
bash43-25: error importing function definition for `x'
Thu Oct 2 12:38:09 JST 2014


version 4.3.26(1)
bash43-26: x: line 1: syntax error near unexpected token `='
bash43-26: x: line 1: `'
bash43-26: error importing function definition for `x'
date
cat: /tmp/echo: No such file or directory



今回調べきれなかったので、4.3.27 と 4.3.28 の違いを示すシェルスクリプトは見つかりませんでした。もちろん 4.3.28 は、上述の5つのテストすべて 4.3.27と同じ結果です。

Pidora 2014 と Raspberry Pi でも十分テストや検証ができることが分かります。やはり動作する Linux ディストリビューションの種類も豊富で、SDカード一枚で気軽にOSすら変更できる Raspberry Pi は、1台は手元に置いておきたいマシンですね。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Pidora2014における Shellsho... | トップ | Shellshockの検証用シェルス... »
最新の画像もっと見る

コメントを投稿

Raspberry Pi」カテゴリの最新記事