先程から騒ぎになっているbashの脆弱性について
Thu Sep 25 01:15:16 JST 2014 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 3624, keywords:シャレにならん,シェルスクリプト,bash,脆弱性 この記事は最終更新日が7年以上前のものです。
確認しました(苦笑)
(追記: envを抜いてましたが、それだとCシェル系で確認できないので加えました)
ueda@remote:~$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
vulnerable
this is a test
最初のワンライナーでなにがおこってるかというと、xの値であるはずの「() { :;}; echo vulnerable」の、echo vulnerableの部分がなぜか実行されています。
bashの文法ではシングルクォートで囲んだ中のものは何がどう書いてあっても単なる文字列であって、evalとかshとかに突っ込まない限り実行されるわけはないので、これは実装ミスかと。(と、書いたのですが環境変数に関数を仕込めるという仕様があるという話を初めて聞いて愕然と・・・。いま慌てて調べてます。不勉強すんません。)
例えばこういうものをファイルに書いてcatしても、catの他に何かプログラムが立ち上がるということは理屈の上ではありませんが、それと同じようなことが起こっているということです。
あんまりローレベルのところを知っているわけでもないのですが、文法からすれば実装ミスです(いや、そうとも言えないかも。ということで今は疑いのあるものは止めてます。)。文法自体の問題ではないので、パッチがすぐに出ているようです。パッチを当てるとこうなります。
ueda@centos ~]$ x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
[bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
文字列なんだからワーニング出すのどうなんだと思いますが、とりあえずはアップデートを。(あのディストリビューションがまだなんですけど・・・なんとかなりませんかね???みんな寝てるんですかね???地球の裏側は昼ですよね???)
↓あのディストリビューション
Ubuntu users can do this to fix the exploit: sudo apt-get update sudo apt-get --only-upgrade install bash
— kacy fortner (@kacyf) September 24, 2014
以下余談
あとちょっと分かりませんが、shでも環境によっては???ちょっとこれは分かりません。あ、分かった。後ろのbashですね。失礼しました。
freebsd10 /home/ueda$ sh
x='() { :;}; echo vulnerable' bash -c "echo this is a test" #<-bashじゃんかwww(ごめんなさい)
$ vulnerable
this is a test
###大丈夫###
freebsd10 /home/ueda$ sh
x='() { :;}; echo vulnerable' sh -c "echo this"
$ this
dashも???と思ったけどこれもbashを後ろで呼び出しているからでした。アホです。
ueda@ubuntu:~$ dash
x='() { :;}; echo vulnerable' bash -c "echo this is a test"
$ vulnerable
this is a test
###これも大丈夫です###
ueda@ubuntu:~$ dash
x='() { :;}; echo vulnerable' sh -c "echo this"
$ this
取り急ぎ。眠い。