生活随笔
收集整理的這篇文章主要介紹了
苹果SSL_goto漏洞简介
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Apple于最近放出了iOS 7.0.6固件升級(jí),修復(fù)了SSL連接驗(yàn)證時(shí)的BUG。用升級(jí)后的ios系統(tǒng)打開漏洞測(cè)試頁面https://www.imperialviolet.org:1266已經(jīng)無法打開。頁面提示無法建立安全鏈接。自此,據(jù)說被蘋果遺忘了18個(gè)月的重大BUG被成功修復(fù)。但目前MACOS的這個(gè)BUG仍未修復(fù),使用Safari瀏覽器打開上文的BUG的測(cè)試頁面會(huì)出現(xiàn)下面的提示,但使用firefox或Chrome打開頁面卻不會(huì)成功。
Safari打開頁面的情況
Chrome打開頁面的情況
Firefox打開頁面的情況
該漏洞出現(xiàn)的原因是因?yàn)槲挥趆ttp://opensource.apple.com/source/Security/Security-55471/libsecurity_ssl/lib/sslKeyExchange.c中的一處SSLHashSHA1判斷下方多出了一個(gè)goto語句導(dǎo)致了執(zhí)行SSLVerifySignedServerKeyExchange函數(shù)時(shí)必定跳轉(zhuǎn)到fail標(biāo)號(hào)處,會(huì)return err并觸發(fā)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消失。
總結(jié)
以上是生活随笔為你收集整理的苹果SSL_goto漏洞简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。