先程から騒ぎになっている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

文字列なんだからワーニング出すのどうなんだと思いますが、とりあえずはアップデートを。(あのディストリビューションがまだなんですけど・・・なんとかなりませんかね???みんな寝てるんですかね???地球の裏側は昼ですよね???)

↓あのディストリビューション

以下余談

あとちょっと分かりませんが、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

取り急ぎ。眠い。

ノート   このエントリーをはてなブックマークに追加 
 

prev:SoftwareDesign2014年10月号の一行感想文 next:個人的現在の状況(ところでshellshockってshに失礼ではないか?)

やり散らかし一覧

記事いろいろ