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

auのW42CAとW42Hが%nと%Sの文字列で強制再起動」記事へのコメント

  • こういうのかな。
    int xxx_func(...){
       char *str;
     
       str = (char *)malloc(sizeof(char) * x);
     
       (strに文字が入る処理)
     
       printf(str);
     
       return ret;
    }
    まあ、ここまで来ていれば次のようにするだけでOKなんですが...
      printf("%s",str);
    どっかしらに入りそうではありますねぇ

    # printf Injectionとでも言うのだろうか
    --
    M-FalconSky (暑いか寒い)
    • by Anonymous Coward on 2006年08月04日 18時42分 (#991156)
      このバグが話題になった時(最初は2chのW42CAスレか?)
      さっそく%nで自分の携帯が再起動することを確認しつつ
      すぐに%dとか%sとかのprintfな識別子を試したんですが
      こっちはまったく問題ありませんでした。

      うーん、謎。どういうサニタイジングしてるんだろ?
      親コメント
      • サニタイズ?? (スコア:1, 参考になる)

        by Anonymous Coward on 2006年08月05日 1時05分 (#991317)
        いやだから、サニタイズなんてしてないんだってば。
        format string脆弱性はどんな文字列でも発動するわけじゃないんだって。
        「%n」はスタックに書き込む機能だから攻撃に使われる。

        ちなみに、対策が「%をサニタイズすること」とか
        「%をエスケープすること」ってのは大間違いなので
        勘違いしないように。
        正しくは sprintf(var) を sprintf("%s", var) にすること。

        参考:JPCERT/CCの判断力も蝕む サニタイズ脳の恐怖 [takagi-hiromitsu.jp]
        親コメント
        • 惜しい。

          s/sprintf/printf/g

          だね。

          書式化文字列出力が要らんのなら、遅いprintfなんかではなくputs()あたりでstdoutに吐けば良いじゃんとか思いもするけど。
          # 今一歩セキュアでないというのはご愛嬌。
          親コメント
        • by greentea (17971) on 2006年08月05日 13時18分 (#991553) 日記
          サニタイズ漏れを考えると、確かにその方がリスクが少ないことは理解できますが、
          きっちりサニタイズできているとしても、その方がいい理由ってあるのでしょうか。
          (全部の%を%%にするだけじゃだめなの?)

          # まあ、高木浩光氏の言う通り
          # > さらに言えば、フォーマット文字列引数(printfなどの第一引数)には常に定数文字列しか与えないようにするのが正しい。
          # のようにしてたら、こんなことが起こりようがないとは思いますが、
          # とにかく納期優先で、そんなこと気にしてる暇もなかったのかなぁ……
          --
          1を聞いて0を知れ!
          親コメント
          • by Anonymous Coward
            サニタイズ方式を採る理由がないのに、なんでわざわざサニタイズなんかするわけ?

            サニタイズ言いたいだけちゃうんかと。
      • なんで他の指定子は大丈夫でこれがだめかといえば、他の指定子はちゃんと対策したんだろう。%Sと%nはマイナーだから忘れたんジャマイカ。

        あと、このふたつは直接ポインタを参照するからふっとぶんじゃなかろか。ポインタでミスると即リセットとは、DOS時代のようだ。
        • >なんで他の指定子は大丈夫でこれがだめかといえば、他の指定子はちゃんと対策したんだろう。%Sと%nはマイナーだから忘れたんジャマイカ。
          いや、だから「どういうサニタイジングしてるんだろう?」と。
          個別にサニタイジングするより「%」をエスケープしたほうが手っ取り早い上に確実だと思うのだけど…。

          >あと、このふたつは直接ポインタを参照するからふっとぶんじゃなかろか。
          「%S」と同意味のはずの「%ls」は影響ナシです。ふしぎふしぎ。

開いた括弧は必ず閉じる -- あるプログラマー

処理中...