之前Freebuf报道过这个资讯 OSX 10.8和iOS 6系统爆致应用崩溃的漏洞 ,前天在知乎上看到一个相对不错的成因贴,特转载分享。
崩溃的直接原因:
目前基本能确定是 OS X 和 iOS 的 CoreText 和 WebCore 框架在处理复杂文字编排时出现了 bug,导致应用甚至 iOS SpringBoard(就是 iOS 的桌面)崩溃。
这两个框架非常基础,绝大部分显示文字的地方都会用到,也就导致了短信、微信和 QQ 等应用在显示这些信息时会崩溃;而显示推送的消息时,SpringBoard 也会受连累而崩溃(需要重启手机才能继续正常使用)。
接着是这个 bug 出现的原因。
很遗憾 CoreText 并不是开源的,所以无法从源代码中查出原因。
但上文提到的复杂文字编排是套很复杂的机制,考虑到国内用户可能无法访问维基百科,我就简单解释下。
我们熟知的中英文字符的编排是非常简单的,一个文字对应一个字符,只要从左至右显示出来即可。
而阿拉伯字母、婆罗米系文字的天城文和泰语字母则不能简单地进行这样的编排,它们可能会进行如下变化:
方向可能是从右向左显示的。
多个字符可以组合成一个文字。
显示的顺序可能和逻辑顺序不一致。
由于某种原因,OS X 和 iOS 在某些特殊的字符组合下并没能正确地处理这种复杂的编排,而导致了程序崩溃。】
那么我们能做什么呢?
如果喜欢尝鲜的话,可以升级到 iOS 7 beta 和 OS X 10.9 beta,目前我只发现少数几种情况下仍会崩溃(大多数人不会遇到)。
如果 iOS 设备已越狱,可以去安装 @麦子龙 提到的补丁(也可在 Cydia 的 178 源搜索「阿拉伯」),目测对于不需要复杂文字编排的用户不会有问题。
对于 QQ,只要不查看该消息即可。
对于微信,我的处理方式是让对方再发一条正常的信息,然后卸载并重装(会丢失聊天记录)。微信朋友圈比较好办,只要看不到那条信息即可(叫对方删除,等其他人刷朋友圈把那条消息踩下去,自己发张图片把对方的消息踩下去,或拉黑对方都可)。
对于短信,据说让对方再发一条正常的信息即可。(我没收到过,无法确认。)
对于其他应用(例如新浪微博、Twitter、邮件),可以登录网页版删除或屏蔽。
如果 OS X 的 Chrome 或 Safari 打开网页崩溃,可以使用 FireFox 代替。
还有对那些恶意捉弄你的人,该骗顿饭、断绝关系、打官司什么的请自行处理。
那么服务提供商们又该做些什么呢?
知乎的员工今天很头疼,因为绝大多数人用的都是 OS X 10.8 + Chrome / Safari 的组合,遇到这玩意几乎全军覆没,发封邮件报告这个 bug 都会导致接收者的邮件客户端崩溃。
所以知乎很快对这些字符进行了处理,让这些文字使用 Arial 字体显示,就不会崩溃了。(目前已知 Arial 和 Tahoma 字体不会导致崩溃,其他我未测试。)
知乎客户端也用符号代替了这些字符,以避免崩溃。
知乎日报客户端则在用户发表评论时禁止提交这类字符,避免其他人查看评论时崩溃。
至于苹果,就看它什么时候更新了。考虑到 iPhone 5S 马上要出了,可能就不会发布 iOS 6 的更新补丁,而是直接发布 iOS 7 了。而 OS X 10.8.5 是肯定会出的,就看修 bug 的速度了。
而对于越狱开发者来说,则可能又是一个找越狱漏洞的机会。(不过看上去是很难支持 iOS 7 了。)
有些要纠正的:
1. 一个 unicode 字符编码成 UTF-8 后,可能占 1~6 个字节(U+0000 ~ U+ 7FFFFFFF)。但 RFC 3629 又将字符范围减少到 U+0000 ~ U+ 10FFFF,这样其实最多只要占用 4 个字节。其中,一个中文字符会占用 3 个字节。
2. 多个 unicode 字符可以组合成一个文字。简单来说,一个汉语拼音可以看成一个英文字母和一个声调的组合,它虽然是一个文字,却是两个 unicode 字符。
Via 知乎
怎样解释OSX 10.8和iOS 6系统应用崩溃漏洞的原因?
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文