iPhone 连不上 WiFi,罪魁祸首竟是一串字符!
技术编辑:小魔丨发自 思否编辑部
每到一个地方先找 WiFi,已经是无数现代人的习惯了。但是,遇到奇奇怪怪的 WiFi 名(SSID)可要谨慎了。最近就有人在使用 iPhone 手机连接 WiFi 时遇到了麻烦。
安全研究员 Carl Schou 在用 iPhone 手机尝试连接名称为 %p%s%s%s%s%n 的 WiFi 后,发现手机 WiFi 功能无法使用,手动打开 WiFi 也会自动关闭,重启手机或更改 WiFi 名都没用。
Carl Schou 首先在运行 iOS 14.4.2 版本的 iPhone XS 上测试发现了这一 bug,后来在 iOS 14.6 版本上的实验表明这一 bug 依然存在。
Carl Schou 在 Twitter 上公布这一 bug 后,很多网友在自己的 iPhone 手机上复现了这一问题,甚至有网友发现该 bug 还会影响 AirDrop 的正常使用。
不过,目前安卓手机用户并未受到该 bug 的影响。
虽然看似无厘头,但这个 bug 是真实存在的。有网友认为该 bug 应该得到更多关注,这有可能是权限提升漏洞,万一被利用,很多 iPhone 用户将受影响。
该 bug 被爆出后,许多安全研究员进行了分析,认为有可能是输入解析问题导致了该 bug。
当 WiFi 名称出现带有 % 的字符串时,iOS 可能会将 WiFi 名误认为字符串格式化说明符。
而在 C 和 C-style 语言中,字符串格式化说明符具备特定含义,常被语言编译器处理为变量名或命令,而不是文本。例如,命令 printf("geeks for %ngeeks", &c); 不会输出 %n,而是将 %n 前面的字符数存储在变量 c 中。%n 只是格式化说明符,不是真正的文本字符串。因此,该命令的输出是 geeks for geeks,不包含 %n。
同理,当 iPhone 试图连接 WiFi %p%s%s%s%s%n 时,iPhone 并未将这串字符理解为文本而是作为特殊字符串来处理,导致系统内存损坏,进而启动保护机制,强制将 WiFi 功能设定为关闭状态。
如何解决?
尽管重启手机没能解决该 bug,但实际上它的解决办法并不麻烦:
设置 > 通用 > 还原 > 还原网络设置(Settings > General > Reset > Reset Network Settings)
之后,你就可以重新配置网络设置了。
当然要想防患于未然,最好的办法是不要连接不安全的网络,尤其是 WiFi 名中包含 % 的无线网络。当然,目前只有 iPhone 用户要格外注意这一点。
参考链接: