生活随笔
收集整理的這篇文章主要介紹了
苹果SSL_goto漏洞简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Apple于最近放出了iOS 7.0.6固件升級,修復了SSL連接驗證時的BUG。用升級后的ios系統打開漏洞測試頁面https://www.imperialviolet.org:1266已經無法打開。頁面提示無法建立安全鏈接。自此,據說被蘋果遺忘了18個月的重大BUG被成功修復。但目前MACOS的這個BUG仍未修復,使用Safari瀏覽器打開上文的BUG的測試頁面會出現下面的提示,但使用firefox或Chrome打開頁面卻不會成功。
Safari打開頁面的情況
Chrome打開頁面的情況
Firefox打開頁面的情況
該漏洞出現的原因是因為位于http://opensource.apple.com/source/Security/Security-55471/libsecurity_ssl/lib/sslKeyExchange.c中的一處SSLHashSHA1判斷下方多出了一個goto語句導致了執行SSLVerifySignedServerKeyExchange函數時必定跳轉到fail標號處,會return err并觸發BUG。
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,uint8_t *signature, UInt16 signatureLen)
{OSStatus err;SSLBuffer hashOut, hashCtx, clientRandom, serverRandom;uint8_t hashes[SSL_SHA1_DIGEST_LEN + SSL_MD5_DIGEST_LEN];SSLBuffer signedHashes;uint8_t *dataToSign;size_t dataToSignLen;signedHashes.data = 0;hashCtx.data = 0;clientRandom.data = ctx->clientRandom;clientRandom.length = SSL_CLIENT_SRVR_RAND_SIZE;serverRandom.data = ctx->serverRandom;serverRandom.length = SSL_CLIENT_SRVR_RAND_SIZE;if(isRsa) {/* skip this if signing with DSA */dataToSign = hashes;dataToSignLen = SSL_SHA1_DIGEST_LEN + SSL_MD5_DIGEST_LEN;hashOut.data = hashes;hashOut.length = SSL_MD5_DIGEST_LEN;if ((err = ReadyHash(&SSLHashMD5, &hashCtx)) != 0)goto fail;if ((err = SSLHashMD5.update(&hashCtx, &clientRandom)) != 0)goto fail;if ((err = SSLHashMD5.update(&hashCtx, &serverRandom)) != 0)goto fail;if ((err = SSLHashMD5.update(&hashCtx, &signedParams)) != 0)goto fail;if ((err = SSLHashMD5.final(&hashCtx, &hashOut)) != 0)goto fail;}else {/* DSA, ECDSA - just use the SHA1 hash */dataToSign = &hashes[SSL_MD5_DIGEST_LEN];dataToSignLen = SSL_SHA1_DIGEST_LEN;}hashOut.data = hashes + SSL_MD5_DIGEST_LEN;hashOut.length = SSL_SHA1_DIGEST_LEN;if ((err = SSLFreeBuffer(&hashCtx)) != 0)goto fail;if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)goto fail;goto fail; // 多出來的goto failif ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)goto fail;err = sslRawVerify(ctx,ctx->peerPubKey,dataToSign, /* plaintext */dataToSignLen, /* plaintext length */signature,signatureLen);if(err) {sslErrorLog("SSLDecodeSignedServerKeyExchange: sslRawVerify ""returned %d\n", (int)err);goto fail;}fail:SSLFreeBuffer(&signedHashes);SSLFreeBuffer(&hashCtx);return err;}
嘗試自己重新編譯此程序,不想缺少部分頭文件,Google無果,遂作罷。
-update-
OSX10.9.2更新后此BUG消失。
總結
以上是生活随笔為你收集整理的苹果SSL_goto漏洞简介的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。