GnuTLS的bug與Apple goto fail的bug都導致了驗證TLS和SSL證書問題,但是他們兩個實際上并非是同一個,雖然都是把假的證書也當成有效的證書。
霍普金斯大學的一位密碼學教授說:“GnuTLS是一個編碼錯誤,返回了錯誤的變量,而蘋果可能是一個剪切和粘貼的失誤。”
goto命令在這兩個bug當中都出現了,goto fail語句是C語言遇到錯誤的時候一個標準執行流程。判斷證書是否有效的代碼應該返回一個true或者false的布爾值。但是這個GnuTLS的bug,返回的是一個負數的特殊錯誤代碼。
這個bug就是當其中的一個函數返回一個負數的錯誤代碼,這個錯誤代碼當做一個布爾型,而不是真正的一個數字,但是布爾型的判斷當中,只要是非0就是true,因此,這個錯誤在布爾判斷中當成了真,形成了這個bug。
這個GnuTLS的bug是被Red Hat審計出來的,GnuTLS 是一個安全通訊庫,實現了 SSL、TLS 和 DTLS 協議和相關技術。提供了簡單的 C 語言編程接口用來訪問這些安全通訊協議,提供解析和讀寫 X.509、PKCS #12、OpenPGP 和其他相關結構。特點是可移植性和高效。使用并沒有OpenSSL廣泛,也沒有部署在iOS設備上,但是在Linux和很多開源程序當中有使用。
原文:http://threatpost.com/goto-aside-gnutls-and-apple-bugs-are-not-the-same/104626