[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

Cとsecurityに関するtsupoのブックマーク (4)

  • PHP5.3.7のcrypt関数のバグはこうして生まれた

    昨日のブログエントリ「PHP5.3.7のcrypt関数に致命的な脆弱性(Bug #55439)」にて、crypt関数の重大な脆弱性について報告しました。脆弱性の出方が近年まれに見るほどのものだったので、twitterやブクマなどを見ても、「どうしてこうなった」という疑問を多数目にしました。 そこで、このエントリでは、この脆弱性がどのように混入したのかを追ってみたいと思います。 PHPのレポジトリのログや公開されているソースの状況から、PHP5.3.7RC4までこのバグはなく、PHP5.3.7RC5でこのバグが混入した模様です。RC5はPHP5.3.7最後のRelease Candidateですから、まさに正式リリースの直前でバグが入ったことになります。 バグの入る直前のソースは、ここの関数php_md5_crypt_rから参照することができます。以下に、おおまかな流れを図示します。まずはバ

    PHP5.3.7のcrypt関数のバグはこうして生まれた
    tsupo
    tsupo 2011/08/24
    strlcat というのは strncat_s の類似品だよなぁ……
  • Cでバッファオーバーフローを起こさせないためのちょっとした工夫 - jj1bdx: life beyond Japan

    2024夏休み旅行 神戸・2日目【前編】 zfinchyan.hatenablog.com ↑1日目はこちら 6:50 わたしと夫だけ先に起床 前日に買っておいたお芋のパンで朝ごはん 昨日の疲れからか、なかなか息子たちが起きてこなかったので、ゆっくり寝かせてから10:00にホテルの下にあるプレイゾーンに行って、パターゴルフやバス…

    Cでバッファオーバーフローを起こさせないためのちょっとした工夫 - jj1bdx: life beyond Japan
    tsupo
    tsupo 2008/06/01
    strlcpy() を紹介しておくべきだ,という意見があった → ISO では strcpy_s() のように _s 付きの関数名になるようです。http://watcher.moe-nifty.com/memo/2008/05/re_c_38b6.html の「追記 2」参照
  • JVNVU#162289: ある種の範囲チェックを破棄するC コンパイラの最適化の問題

    C コンパイラの中には、最適化処理において、ポインタ演算のオーバーフローチェックを行うコードブロックを省略することがあります。従って、こうしたコンパイラを使ってコンパイルしたアプリケーションは、バッファオーバーフローの影響を受ける可能性があります。 gcc 4.2 およびそれ以降のバージョンで問題が確認されていますが、他のベンダが提供するコンパイラにも同様の問題が存在する可能性があります。 C 言語で次のような型が与えられたとき char *buf; int len; C コンパイラの中には buf+len >= buf が成立すると仮定するものが存在します。その結果、次に示すような長さチェックを行うコードがコンパイラの最適化によって省かれてしまうことがあります。 len = 1<<30; [...] if(buf+len < buf) /* 長さチェック */ [...オーバーフローに

    tsupo
    tsupo 2008/04/28
    C コンパイラの中には buf+len >= buf が(常に)成立すると仮定(して、最適化(=コードを削除))するものが存在 → バッファオーバーフローの脆弱性が作りこまれる可能性あり
  • scanf って教える必要ある?(初心者に教えるときでも最初から脆弱性が発生しない方法を教えよう)

    これは、ちょっと これは、かなり 上記で話題になった記事ですけど、他のも覗いてみた。 C/C++のデータ型と書式を知る:入力の書式 #include <STDIO.H> .......... char a[11]; /* 半角10文字分の文字列を保持する変数(配列) */ scanf( "%s", a ); /* 変数aに文字列を入力 */ printf( "%s\n", a ); /* 変数aの値を出力 */ おい! scanf って教える必要がある?教えるなら、fgets でしょう。 char buffer[11]; fgets(buffer, sizeof(buffer), stdin); printf("%s\n", buffer); 慣れている人ならば、sscanf も加えるかもね。 char buffer1[11]; char buffer2[11]; fgets(buffer

    tsupo
    tsupo 2008/04/01
    scanf() は期待してるのと違う入力が来たら、(特に対策してない限り)あっさり落ちるからねぇ。この先も、いろんな脆弱性含みのコードが出てきそうで、楽しみですww
  • 1