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

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 (暑いか寒い)
    • このバグが話題になった時(最初は2chのW42CAスレか?)
      さっそく%nで自分の携帯が再起動することを確認しつつ
      すぐに%dとか%sとかのprintfな識別子を試したんですが
      こっちはまったく問題ありませんでした。

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

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

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

        参考:JPCERT/CCの判断力も蝕む サニタイズ脳の恐怖 [takagi-hiromitsu.jp]
        • by greentea (17971) on 2006年08月05日 13時18分 (#991553) 日記
          サニタイズ漏れを考えると、確かにその方がリスクが少ないことは理解できますが、
          きっちりサニタイズできているとしても、その方がいい理由ってあるのでしょうか。
          (全部の%を%%にするだけじゃだめなの?)

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

            サニタイズ言いたいだけちゃうんかと。

Stableって古いって意味だっけ? -- Debian初級

処理中...