Apple 的 SSL/TLS Bug…

前幾天,Apple 送出了一個 security update,內容是有關於 SSL/TLS 的嚴重的 Bug,Apple 沒有特別對內容多描述什麼,不過有人去翻了出來問題所在,下面是 Apple 的 bug,在他們 SSL 相關的某 function 中,出現了:

我想只要你看得懂 C,應該會知道問題在哪裡。在 source code 當中我們可以看到有連續兩個 goto fail,儘管他們是在同樣的 indentation level,但是在 C 當中這一點意義都沒有,所以無論如何當程式跑到這邊的時候,都一定會跑到 fail 的地方,而下面的 code 不會被執行到。這導致了 signature verification 將永遠不會出現失敗。

我相信在 Apple 當中一定會有 code review,但是依然出現了這種低級錯誤。我想當初應該就是某個工程師在這邊不小心手滑多貼了一個 goto,而 code review 的人剛好當下也沒注意到,這段 code 可能也因為太細了而沒有寫測試,才會導致這種事情的發生。這個 bug 告訴了我們什麼教訓呢?

  1. 用 goto 要小心: 剛開始學習 C 語言的時候我們都會被告知「儘量不要用 goto」,我想這或許也是個很好的例子。當你的程式碼出現了 goto 的時候,請務必要更加小心的注意你的程式邏輯。
  2. 記得要用大括號(braces): 在慣 C 語言(Java, JavaScript 等)當中的 if、while 等等的 statement 有時候是可以省略 braces 的,到底要不要使用也常常是 coding style 當中會有爭議的一部份。或許為了避免這一類的事情發生,或許總是要用大括號會是個很好的 practice。
  3. 不要太依賴 indent 來判斷程式邏輯:剛開始寫程式的時候我們就被告知了 indent 的重要性,良好的 indent 可以讓程式可讀性更高。不過除非你是用像是 PythonCoffeeScript 等等 indent 是有意義的語言,否則在看 source code 的時候還是要多加注意,以免因為錯誤的 indent 導致失敗。

最後,用 iOS 的人請快點更新這個 patch 吧!跟安全性相關的 patch 不能忽略啊!

Tags:, , ,


Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *