Bash
ShellShock

shellshockのテストスクリプトがUnix的でないので改善してみた。

More than 3 years have passed since last update.

bashのshellshockの件で、脆弱性の有無をテストするスクリプトが出回っていましたが、これは非常にわかりにくいと思いました。

https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/

端的にいうとUnix的でないこと、ユーザビリティ的にわかりにくいことが問題だと思いました。


オリジナルコードの問題点

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

出力



vulnerable

this is a test


  • 出力の1行目と2行目の関係がよくわからない。

  • 脆弱性がない場合にも出力が行われる。

  • 出力結果を見たときに、「自分が今使っているbashが脆弱である」と一瞬ではわからない。

  • これを見たユーザが、次に何をすればよいのか(もしくは、何か行動しなければいけないこと)が伝わらない。

  • "this is a test"というメッセージが無意味かつ無駄である。


よりよいテストコード

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

出力



this bash is vulnerable

ポイント


  • 脆弱性がある場合のみ出力が行われ、脆弱性がない場合は何も出力されない。(沈黙は金)

  • メッセージが"this bash is vulnerable" なので意味が明快である。

  • いま脆弱性があることと、bashが問題であることが伝わる。

たった1行のコードだとしても、広く使われるサンプルを提供する場合は、より良いユーザビリティを心がけたいものですね。