iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた

2014年2月24日 18:15

minet 曰く、 Appleが先日公開したiOS 7.0.6では、「過去最悪のセキュリティバグ」が修正されているという(アプリオ)。

 SSL/TLSの不適切な扱いにより、データが暗号化されない場合があり、これにより通信内容が盗聴されるおそれがあるようだ。

 現在利用中の環境にこのバグがあるかどうかは、gotofail.comというサイトで確認できる模様。

 興味深いのが、このバグの要因とされているコードだ。SSLで使われる暗号鍵の検証を行うコードにバグがあったとのことなのだが、その途中で以下のように「goto」文が続いているミスがあったという(ImperialViolet - Apple's SSL/TLS bug)。

  static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                 uint8_t *signature, UInt16 signatureLen)
{
    OSStatus        err;
    ...

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
        goto fail;
    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
        goto fail;
        goto fail;
    if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
        goto fail;
    ...

fail:
    SSLFreeBuffer(&signedHashes);
    SSLFreeBuffer(&hashCtx);
    return err;
}

 コード全文は修正後のコードを見てほしいが、このように「goto fail;」が2行続いたことで途中の検証作業が飛ばされてしまい、その結果本来エラーとなるケースでエラーにならない、という問題が発生している模様。

 スラッシュドットのコメントを読む | アップルセクション | プログラミング | アップル | iOS

 関連ストーリー:
不正なSSL証明書のチェックをしないモバイルアプリにご注意を 2014年02月14日
新たなtypoスタイル「Mis-paste」 2011年11月12日
いいコーディング規約、悪いコーディング規約? 2008年07月22日

 

関連記事

最新記事