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日