shellshockの脆弱性のときのメモ

2014/09/24発覚のshellschockで知ったbashの仕様

以下は、検証コード。

#!/bin/bash

myfunc() { echo Hello; }

myfunc
# 以下の表示
# => Hello

echo $myfunc
# なにもひょうじされない

export -f myfunc

env | grep -A1 myfunc
# shellshockの脆弱性があると
# myfunc=() {  echo Hello
# }
#
# shellshockの脆弱性が対策済みだと
# BASH_FUNC_myfunc()=() {  echo Hello
# }
# 
# 変数名の前に BASH_FUNC_ が、後ろに () が付くようになった

export myfunc2='() { echo Hello2; }'

myfunc2
# 以下のエラー
# myfunc2: command not found

bash -c "myfunc"
# shellshockの脆弱性対策の前後とも以下の表示
# Hello

bash -c "myfunc2"
# shellshockの脆弱性があると以下の表示
# Hello2
# 
# shellshockの脆弱性が対策済みだと以下のエラー
# myfunc2: command not found

bash -c "BASH_FUNC_myfunc"
# shellshockの脆弱性対策の前後とも以下のエラー
# BASH_FUNC_myfunc: command not found

# shellshockの脆弱性があると
env x='() { echo hey;}' bash -c 'x'
# 以下の表示
# hey
env x='() { echo hey;}; echo vulnerable' bash -c 'x'
# 以下の表示
# vulnerable
# hey

# shellshockの脆弱性が対策済みだと
env "BASH_FUNC_x()"='() { echo hey; }' bash -c 'x'
# 以下の表示
# hey
env "BASH_FUNC_x()"='() { echo hey; }; echo vulnerable' bash -c 'x'
# 以下のエラー
# bash: warning: x: ignoring function definition attempt
# bash: error importing function definition for `BASH_FUNC_x'
# bash: x: command not found
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。