パスワードを忘れた? アカウント作成
11597542 story
UNIX

GNU Bashに重大な脆弱性、環境変数を渡して呼ぶことで任意コード実行が可能に 48

ストーリー by hylom
これは影響が大きそうだ 部門より
90 曰く、

GNU Bashに新たな脆弱性が発見された(CVE-2014-6271)。環境変数を経由して関数定義を渡す場合に、細工をしてコマンドを実行させることができる。攻撃に使う環境変数の名前に制限はなく、たとえば内部的にshを実行するようなCGIに対してHTTP ユーザーエージェントを送る際や、ssh接続時に環境変数を渡す時など、環境変数を改変した状態でbashが呼ばれるようになっていれば攻撃ができる(ThreatPostCSO Online)。

この脆弱性はすべてのバージョンの bashにあるとされ、Mac OS Xにも当該のバージョンが含まれるとされている。一部の Linux ディストリビューションではすでにアップデートを配布している。

Red Hat Security Blogによると、脆弱性のあるバージョンでは以下の"echo vulnerable"の部分が予期せず実行される。

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

  • by baldmage (45440) on 2014年09月25日 21時54分 (#2682634) 日記

    OSSなら安全(爆笑)

  • by Anonymous Coward on 2014年09月25日 16時16分 (#2682387)

    Microsoftはbashという邪悪な危険ソフトウェアを利用しない唯一のソフトウェアです!

  • by Anonymous Coward on 2014年09月25日 18時19分 (#2682466)

    Windows以外のOSは致命的な不具合ばかりだなあ

    • by Anonymous Coward

      心配なのは、この脆弱性の影響をモロに受けるLinuxサーバは非常にたくさんあって、かつ、かなりの割合のサーバがアップデートされないまま放置されるであろうということです。

      アップデートは難しくないでしょうけれど、それでもアップデートしないサーバ管理者は少なくないでしょう。

      Appleのサーバは多くは無いですが、修正パッチすら提供されていませんし。

      • by Anonymous Coward

        アップデートしたから安心(笑)

        ではないよ今回は

    • by Anonymous Coward

      あなたの知っているWindows以外のOSと致命的な不具合ばかりのOSを列挙してもらえませんか?
      「みんな持っているから買って」と同じレベルじゃない事を期待しています。

      • by Anonymous Coward
        >致命的な不具合ばかりのOS

        といえば真っ先にiOSが思い浮かびますね。あと、Mac OSXも。
    • by Anonymous Coward

      この程度の脆弱性ごときで
      問答無用でカレントディレクトリにパスが掛かっていることになっている、
      Windowsにかなうものか。

  • by Anonymous Coward on 2014年09月25日 12時32分 (#2682274)

    Linuxのだと

    $ bash --version
    GNU bash, version 4.2.48(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
     
    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
     
    $ env 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

    こんな感じ。

    Cygwinのだと

    $ bash --version
    GNU bash, version 4.1.11(5)-release (x86_64-unknown-cygwin)
    Copyright (C) 2009 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
     
    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
     
    $ env 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

    こんな感じ。
    違いが全くわからない。
    Cygwinの4.1系でも脆弱性無さげだけど。

    • うちのCygwin だと、こんな感じでふ。

      $ bash --version
      GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
      Copyright (C) 2009 Free Software Foundation, Inc.
      License GPLv3+: GNU GPL version 3 or later

      This is free software; you are free to change and redistribute it.
      There is NO WARRANTY, to the extent permitted by law.

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

      --
      svn-init() {
        svnadmin create .svnrepo
        svn checkout file://$PWD/.svnrepo .
      }
    • $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
      vulnerable
      this is a test
      $

      ありだと上のようになるそうです。すべてのバージョンってのが間違ってて、つい最近のものだったりするのか…
      あと修正が不十分だという発言を見かけたのですが、認識された [redhat.com]ようです。

      • by Anonymous Coward

        bash: warning: x: ignoring function definition attempt

        ってのが多分今回のパッチで追加された warning メッセージなので、元コメの人のは既に patch 適用済なのではと思います。

        ディストリビューションに付属のものはバージョン番号を上げずに脆弱性対策のパッチだけを当てることがあるので、バージョン番号のみで判断できないというのはまぁいつものことですね。

    • by Anonymous Coward

      どっちも対策済みじゃん

    • by Anonymous Coward

      これってSELinuxとかを有効にしてても緩和できなかったりするんですかね

  • by Anonymous Coward on 2014年09月25日 15時31分 (#2682373)

    CVE-2014-6271 [redhat.com]のComment 23, 24辺り。

  • by Anonymous Coward on 2014年09月25日 16時53分 (#2682405)

    誰だか知りませんが、このバグ作り込んだキチガイは、
    1. 「環境変数に関数埋め込めたら超Coolじゃね?俺って天才!」と思いついて
    2. 関数の解釈を横着するために何が入ってるかもわからないstringをevalする実装を考えついて
    3. それを実装するときにバグを埋め込んで
    4. 世界中のUnix系システムを危険に晒した
    わけですね!

    二度とソフトウェアの世界に関わらないでもらいたい

    • 子プロセスに関数定義を引き継ぐためのなんだかんだと聞いたような。まあwebからアクセスできるとこで一切bashなんかinvokeしなけりゃいいんですよ。
      そんなことをしているつもりの人はごくごくごくごく一部だったんでしょうけど、まあ。

    • by Anonymous Coward

      そろそろevalじゃなくてevilに名前を変えよう(無理)

    • by Anonymous Coward

      > 二度とソフトウェアの世界に関わらないでもらいたい

      作者結構強そうだけど、面と向かってそのセリフ言えんの?
      http://en.wikipedia.org/wiki/Brian_Fox_(computer_programmer) [wikipedia.org]

      君がbash書いてればbashされることはなかっただろうに残念ですね。

      • by Anonymous Coward

        ぜひハードゲ…ウェアに専念してほしい

    • by Anonymous Coward

      こういう無謬主義こそソフトウェアの世界で最も忌み嫌われるべきものだと思うんだけど。

      • バグを出したことがないやつだけだ。

        • by Anonymous Coward

          それ言っちゃうと使うだけのタダノリユーザーが嬉しそうに投石しまっせ

      • by Anonymous Coward

        なんというか無産・搾取に徹したフリーライダー特有の傲慢さが滲み出てますよね。

      • by Anonymous Coward

        間違えるのは仕方ないけど、間違いを重ねることは擁護できません
        1.~3.はそれぞれが超ド級の大間違いで、それが3つも重なったからこんな大騒ぎになってるわけでしょ?

        • by Anonymous Coward

          そんな話じゃない。もっと歴史を勉強すべし。

    • by Anonymous Coward

      ローカル環境で完結するプログラムだと思ってると、無茶な曲芸やっちゃう事もあるかな。

  • by Anonymous Coward on 2014年09月25日 17時36分 (#2682436)

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

    ここに echo vulnerable 書き足せるシチュエーションだと
    関数 () { :;} の中も好き放題出来そうな気がするんだけどそれは気のせいなの?

    • 「(){~}」の部分は関数の定義の部分で、その関数定義を環境変数にセットされるところまでは良くて、環境変数にセットされただけだと、誰かがその環境変数に入っている関数を叩かないと実際の処理は発生しない。

      ところが、その直後の「;」の後ろ、関数定義の外側のにある部分を bash が勝手に実行してしまう、というのが今回の脆弱性。

      ...と理解しているけど合ってるかな?

      • by Anonymous Coward

        env echo='() { ls; }' bash -c 'echo hoge'
        とかできる時点で、
        環境変数で関数定義を渡せるという機能自体が、
        今回の問題と大差ない脆弱性のような気がする

        • env echo='() { ls; }' bash -c 'echo hoge'

          他の方のコメントでも書かれていますが、これだと「bash -c」に渡している「echo hoge」の部分を攻撃者が挿入できるか、もしくは、事前に bash 経由で echo を実行する事が分かっている場合になります。前者だと、この問題が無くても外部から任意の実行できることになるので、この脆弱性以前の話だし、後者だと狙った動きをするためには、事前に bash が実行する内容を知っている事が必要、という事になると思います。

          少なくとも、今回の脆弱性があれば、bash が本来実行しようとしている内容にかかわらず、環境変数さえ設定できれば任意のコマンドが実行できます。「-c 'echo hoge'」の部分すら必要ありません。

          ただ、確かに、bash が本来、実行しようとしているコマンドを置き換える事が可能、という点は、条件がそろうと現実的な問題になりうると思います。通常、関数の方が PATH で見つかるコマンドや内部コマンドよりも優先順位が高いですが、環境変数経由で渡ってくる関数も、同様の優先順位で良いのか、という気がします。環境変数経由の関数が通常のコマンドよりも低い優先順位であれば、コマンドの置き換えは避けられるのでは、と思いました。

        • by Anonymous Coward

          その方法で攻撃するためには、攻撃対象が任意の環境変数を渡せるサービスでないとならない。

          攻撃対象が HTTP なら渡せる環境変数は HTTP_USER_AGENT 等に限られるし (多分) 、
          他のサービスでもさすがに任意の環境変数を渡せるようなものは無いのでは。
          (断言はできないけど。)

          • by Anonymous Coward

            curl とか rsync とかで 他サーバにデータ渡せないの?

    • by Anonymous Coward

      "echo vulnerable" は bash が起動された時点で実行されるけど、
      関数 () { :; } の中は起動した bash の中でさらに x を実行しないと実行されない。

      渡された環境変数名を関数として実行しているとか、任意の環境変数を渡せる
      (=本来実行すべきコマンドが環境変数で上書きされる)とかいうことが無ければ
      関数の中が実行されることは無いと思う。

  • by Anonymous Coward on 2014年09月25日 18時30分 (#2682482)

    ・関数を定義できるようにしよう←分かる

    ・定義した関数をエクスポートできるようにしよう←分かる

    ・関数のエクスポートは環境変数でやろう←分かる

    ・環境変数に関数定義っぽいものがあったら全部評価することにしよう←うん……うん?

    ・評価は全部 eval するようにしよう←おいバカやめろ

  • by Anonymous Coward on 2014年09月25日 20時00分 (#2682559)

    http://www.amazon.co.jp/gp/product/toc/4048660683/ref=dp_toc?ie=UTF8&a... [amazon.co.jp]

    目次より。

      Apacheを設定してCGIシェルスクリプトを動かす

  • by Anonymous Coward on 2014年09月25日 20時04分 (#2682563)

    最強はzshなのかな

  • by Anonymous Coward on 2014年09月25日 22時19分 (#2682657)

    bashがweb serverのユーザーでアクセスできるのだとすれば、
    apacheをroot で動かしていない限りは、問題は限定的では?
    rm -rf / しても全部消えないから始末が悪いとも言えますが。

  • by Anonymous Coward on 2014年09月26日 0時06分 (#2682725)

    https://twitter.com/pascal_gujer/status/515088698892115968 [twitter.com]
    Android 4.4 のbusyboxで出たと言ってる人が居ますね

  • by Anonymous Coward on 2014年09月26日 0時07分 (#2682726)

    アンドロイドやクロームにもシェルは必要なんでしょうか?
    デスクトップや組み込み、CPUボード搭載のリナックスにはシェルは不要

    Systemdにシェルコードが入っていたり、CoreOSのサービス起動にもシェルを使っていたりする
    シェル使わずに別の言語で書けば速度も上がっていいのにと某掲示板で書いたらキレラレマシタ

typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...