パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

GNU Bashに重大な脆弱性、環境変数を渡して呼ぶことで任意コード実行が可能に」記事へのコメント

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

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

    • Re: (スコア:3, 興味深い)

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

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

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

      • by Anonymous Coward

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

        • by Anonymous Coward

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

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

          • by Anonymous Coward

            user agentみたいなどうでもいい変数をいじるだけでアタックできてしまうのがこの問題の怖さだろう。

            個人で借りてるvpsサーバ(centos 5)のログを

            grep '()' /var/log/httpd/access_log /var/log/httpd/ssl_access_log (←しょぼすぎるので、もっとましなの誰か作ってください、、、)

            とかして、ざっと調べてみたけど、すでにアタックの形跡があった。

            ひとつはrefererだか何かが"() { :; }; ping -c 11 209.126.230.74"となってるアクセスで、pingが帰れば脆弱性ありと判定できる仕組みであるらしい。ただこれは、http://blog.erratasec.com/2014/09/bash-shel

            • by Anonymous Coward on 2014年09月26日 7時34分 (#2682818)

              ここでの話って、UserAgent等による危険性は重大だけど、そもそも関数定義を渡せること自体も問題にならないかという話では?

              "echo"等を再定義されちゃったりするとマズイよね?でも、そういう変数はhttp経由だといじれないか...
              という話になっていると理解しているんだけど。

              親コメント

ソースを見ろ -- ある4桁UID

処理中...