パスワードを忘れた? アカウント作成
11692202 story
セキュリティ

stringsコマンドに脆弱性 16

ストーリー by hylom
libbfdを使っているほかのプログラムでも問題が生じる可能性 部門より

binutilsに含まれるstringsコマンドに脆弱性が発見された(CVE-2014-8485lcamtuf's blog)。

stringsは引数で指定したファイル内にある文字列を標準出力に出力するというコマンド。発見された脆弱性は細工されたファイルに対しstringsコマンドを実行してしまうと、任意のコードが実行される可能性があるというもの。stringsコマンドが内部で利用しているlibbfd(Binary File Descriptor library)での処理に問題があり、細工されたファイル内のコードが実行される可能性もあるようだ。

とりあえず、stringsコマンドを「-a」オプション付きで実行することでこの問題は回避できるとのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2014年10月31日 6時29分 (#2703549)

    stringsは使わない人は一生使わないコマンドなんで、その脆弱性を狙って悪用するのは難しいでしょうね。
    しかし他の似たようなプログラムは大丈夫なんでしょうかね?自分はxxdを多用してますが。

    • by T.Sawamoto (4142) on 2014年10月31日 9時37分 (#2703602)

      wget と tnftp が来てます。

      Vulnerabilities found in more command-line tools, wget and tnftp get patches [itworld.com](ITworld)

      親コメント
      • by Anonymous Coward on 2014年10月31日 10時00分 (#2703611)

        stringsはともかく、wgetはクローリング等に利用しているところがありそうですね。

        "The symlink attack allows file contents to be overwritten, including binary files, and access to the entire filesystem with the permissions of the user running wget."

        Ultimately, the vulnerability can lead to remote code execution.

        wgetを通常のユーザアカウントで実行しているようなケースでは、かなり危険な感じです。
        お気軽にwgetでクローラを定期実行している人とか、結構いるんじゃないですかね。

        親コメント
    • by Anonymous Coward

      ふと思ったのだが、printfの処理に使われている内部のインタプリタに脆弱性があって悪用されるなんて可能性はないのだろうか?
      杞憂かもしれないが、何であれ動的な処理をしている部分は攻撃のターゲットになると思われるので.......

      • Re:printf (スコア:5, 参考になる)

        by annoymouse coward (11178) on 2014年10月31日 7時07分 (#2703555) 日記

        Format string exploits ですね.
        10年くらい前ですが,printfにもセキュリティーホールがある,ということで問題になりました

        今ではGCC等のコンパイラレベルで対策がとられていて
        コンパイル時にコンパイラが printf の書式を解析し,問題があれば警告やエラーを出すようになっています

        Wikipediaにエントリがあったので,リンクを貼っておきます
        http://en.wikipedia.org/wiki/Uncontrolled_format_string [wikipedia.org]

        親コメント
        • Re:printf (スコア:3, 参考になる)

          by Anonymous Coward on 2014年10月31日 14時47分 (#2703773)

          いろいろ間違ってる。

          まず、「printfにセキュリティーホール」というと、
          「printfを正しく使っているのに(printfが仕様通りには動かず)問題が起こる」という意味になってしまうので違う。
          「不適切にprintfを使うと(printfは仕様通りに動いていても)、セキュリティーホールとなってしまう」というのが問題。

          よくよく言われる話だけど、printfは、ユーザが何かの方法で入力した値を格納しているuser_nameがあったとして、

          printf(user_name);

          というように、1つめの文字列が動的であるような用途は、設計上の想定外だから、やってはいけない。
          この場合、ユーザ名を"%x%x%x%n"などとすると、

          printf("%x%x%x%n");

          とやったことになって、スタックの中身が見れた上で、%nによって値が値が書き換えられたりと、
          (おそらく)プログラマが想定していない動作になる。つまり、セキュリティホール。
          SQLインジェクションとかXSS脆弱性とかと同根。

          printf("%s", user_name);

          とすればこの問題は起こらないので、これが清く正しいprintfの使い方。第1引数はあくまで固定の文字列を渡す。
          効率が気になるというなら、fputsを使うなど、他の出力方法を検討する。

          GCC等のコンパイラレベルの対策というのは、printfの第1引数が上記のように変数などではなく、
          "%d\n"のように固定の文字列の場合には、引数の数や型が、2個目以降の引数と整合性が取れているかどうか等をチェックしてくれるのみ。
          コンパイル時に値が確定していない文字列は、コンパイラがチェックしようがない。危ないぞ、と警告を出すぐらいは出来るけど。
          (もしくは、いろいろと解析した結果、固定の文字列を指す固定のポインタらしいと分かったときなどはチェックしてくれるかも知れない)

          どうしても「ユーザが指定したフォーマットでデータを表示をする機能を付けたい」と言うような場合に、横着してprintfを使い、

          printf(user_defined_format, x, y, z, a, b, c);

          というようなコードにすると、これだけでは安全を保つことは出来ない。

          リンク先にも、「the application must validate the format string before using it.」とあるように、
          何らかの方法でuser_defined_formatの内容を確認しても、問題が無いことをチェックする必要がある。
          (そのツールは悪意を持った入力が入り得ない場所でのみ使う、悪意を持たれても問題の無い用途にだけ使う、などでも可)

          親コメント
        • by Anonymous Coward

          おお、参考になります(日本語の情報が少なくて俺が知らなかっただけなのか...)

        • by Anonymous Coward

          If the format string may come from the user or from a source external to the application, the application must validate the format string before using it.

          動的にどーやってチェックするだろうね。

      • by Anonymous Coward

        可能性の話をしたら、「なんでもあり」ですよ。

        • by Anonymous Coward on 2014年10月31日 8時51分 (#2703582)

          つまり、平凡で何のとりえのない俺にも
          たくさんの美少女から理由もなくもてる可能性があるってことですね。

          元気が出てきました。

          親コメント
          • by Anonymous Coward

            100万年に1度の確率かな。

            というのは、冗談かもしれませんが、
            出会いなんて、出会ってみればそんなもんですよ。

      • by Anonymous Coward

        可能性の話をしだしたらそりゃありますよ。
        printfには脆弱性がまだ見つかってないだけです。

        • by Anonymous Coward

          printfに脆弱性があるということはハローワールドに脆弱性があると言ってるのと同じ意味なんだけど
          全世界のC言語を敵に回す危険な行為だとわかって言ってる?

      • by Anonymous Coward

        多分、目を皿のようにして探したクラッカーが居たけど見つからなかった、ぐらいの実装にはなってるんじゃないかと。
        インタプリタと言うほどややこしい処理はしてないし。

        その内部の動作の指示も、第1引数のフォーマット指定子でしか出来ないから、
        一般的な、「第2引数以降に細工が出来る立場」からでは、ちょっかいを出しようがない。

    • by Anonymous Coward

      stringsにオプションがあるなんて初めて知った。

      • by Anonymous Coward

        俺も。ライブラリの場合インテリジェントな処理してるとか知らなかった。

typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...