谷歌修復了導致用戶無法呼叫緊急服務的噩夢般的 Android 錯誤

谷歌修復了導致用戶無法呼叫緊急服務的噩夢般的 Android 錯誤

一月份的 Android 安全補丁現已發布,它修復了一段時間內可能出現的最煩人的 Android 錯誤之一:某些應用程序可能會阻止您聯繫 911 或世界各地的其他緊急電話號碼。

12 月初,GooglePixel Reddit 子版塊上出現了一個令人痛心的故事,講述的是一名用戶在最需要幫助時,他的 Pixel 3 崩潰了:在為他的祖母撥打緊急電話 911 時,她“看起來像是中風了”。整個電話子系統崩潰了。在撥打緊急服務電話後,用戶KitchenPicture5849表示他無法接通電話,也無法掛斷電話以重複撥打。幸運的是,在他們的 Android 手機出現故障後,附近的固定電話可以接通,並聯繫了緊急服務部門。

危機結束後,用戶再次通過智能手機撥打緊急電話,Android 再次崩潰,表明這不是一次性錯誤。檢查他們的電話賬單還發現 KitchenPicture5849 從未真正連接到 911 服務。他們表示,他們還收到了其他幾條來自用戶的私人消息,他們表示遇到了同樣的錯誤。

谷歌於 12 月 8 日聯繫了該用戶並公開回復了該消息:

根據我們的研究,我們能夠在有限的情況下重現該問題。我們認為,當用戶未登錄時,此問題僅出現在少數安裝了 Microsoft Teams 應用程序的設備上,並且我們目前只知道一名用戶報告發生了此錯誤。我們確定該問題是由 Microsoft Teams 應用程序與底層 Android 操作系統之間的意外交互引起的。Microsoft 正在與 Google 密切合作來解決這種意外交互問題。

谷歌表示,微軟將盡快發布該應用程序的更新,用戶應檢查 Play 商店是否有更新。該公司還提到,操作系統級補丁將在一個月後,即一月初(即今天)發布。當時,谷歌沒有對此事發表進一步評論。

為什麼應用程序會破壞 911 服務

延遲。Microsoft Teams 破壞了 911 服務?隨機的 Android 應用程序會擾亂緊急服務嗎?如何?為什麼第三方應用程序與如此重要的功能相距數千英尺?是否有任何其他應用程序(或者只是 Microsoft Teams)擾亂了 911 服務?雖然 Teams 已得到修復,但讓 Android 用戶在這個操作系統級別的錯誤中徘徊一個月是否可以,特別是當我們不知道其他應用程序是否也在這樣做時?安卓就是安卓,所以很多手機無論如何都無法修復。用戶如何知道緊急服務將運行?但谷歌除了等待一個月修復之外沒有給出任何答案。

值得慶幸的是,Android 社​​區中一些非常聰明的人能夠提供 Google 未分享的答案。Esper 的高級技術編輯 Mishaal Rahman在 Medium 上發表了一篇令人難以置信的文章,詳細介紹了該錯誤的工作原理以及發生的原因。具有通話功能的Android應用程序可以向系統註冊一個“PhoneAccount”,表明它們具有撥打電話的能力。有多個應用程序可以通過 PhoneAccount 安裝,其中一個名為“CAPABILITY_PLACE_EMERGENCY_CALLS”。當需要撥打 911 時,Android 會對註冊的電話帳戶列表進行排序並選擇一個。到目前為止,一切都很好。

Rahman 的帖子中發現的幾個錯誤之一是,如果您未登錄,每次 Teams 啟動時,Microsoft Teams 都會在系統上註冊一個額外的 PhoneAccount。請注意,安裝 Microsoft Teams 然後從不使用它的情況並不少見-關於 Android Teams 應用程序的常見抱怨是它經常自動註銷用戶。

如果您已退出,運行 Microsoft Teams 10 次將會在您的手機上留下來自 Teams 的 10 個重複的電話帳戶。Teams 不應該這樣做,Microsoft 更新也阻止了 Teams 這樣做,但大量重複的 PhoneAccounts 也不應該足以讓 Android 手機系統崩潰。

下一個錯誤:當為緊急呼叫選擇 PhoneAccount 時,Android 會通過複雜的排序過程來確定要使用哪個帳戶。此排序過程的最後一步(衝突解決程序)是哈希碼排序。哈希碼比較只是將一個哈希碼減去另一個哈希碼。

但就像前幾天發生的那個愚蠢的 Microsoft Exchange 2000 錯誤一樣,這可能會導致整數溢出或下溢,現在電話子系統將崩潰。Google 的代碼存在缺陷,但由於這是在嘗試了包名稱等更明顯的內容後解決排序問題的最後一種方法,因此只應在生成重複 PhoneAccounts 的應用程序的非常特定的實例上調用它。所以謝謝微軟!

谷歌對此錯誤的修復在這裡標題為“修復緊急號碼呼叫期間因對重複電話帳戶進行排序而導致的整數溢出/下溢”。Google現在通過 Java“Integer.compare”函數處理這兩個數字,而不是用一個哈希碼減去另一個哈希碼並可能使用一個非常大或非常小的數字來導致系統崩潰。這僅返回 -1、0 或 1,表示比較結果較小、相同或較大。

如果您一開始像我一樣想知道為什麼 Android 會對電話帳戶進行排序,而不僅僅是使用 SIM 卡上的默認帳戶,那麼我會做出一個瘋狂的猜測,並說這是為了讓 911 服務正常工作。哪個。為了防止主帳戶無法工作,Android 需要一個它可以嘗試的所有可能的電話帳戶的列表,並希望自動執行此操作,以便通過任何必要的方式連接到 911。該分類系統僅用於聯繫緊急服務,因此受影響的用戶仍然可以撥打常規電話。

這個混亂中的第三個錯誤是 Microsoft Teams 甚至沒有將自己註冊為緊急呼叫處理程序。團隊創建了一百萬個電話帳戶,並且沒有使用 CAPABILITY_PLACE_EMERGENCY_CALLS 標誌,但仍然中斷了 911。Google 的排序過程首先詢問所有電話帳戶,而最好的第一步是從所有支持緊急情況的電話帳戶開始來電。

在此最新漏洞發生之前,谷歌正在採取更加嚴厲的決定,從 911 緊急服務程序中刪除所有“自我管理”的電話帳戶。Microsoft Teams 等“自我管理”Android 電話帳戶可以更直接地訪問 Android 電話堆棧,並可以使用自己的功能。Android 緊急呼叫系統現在僅考慮連接到默認電話應用程序的更簡單的電話提供商,例如您的運營商帳戶。

所有這些其他 VoIP 應用程序可能仍可用於自行呼叫 911(在許多國家/地區法律要求使用911功能)。但如果您打開默認撥號器並按 911,Android 將僅從標準的系統管理電話帳戶中進行選擇。

誰得到修復以及如何檢查 911 服務錯誤

拉赫曼表示,谷歌的這個錯誤是 CVE-2021-39659,每月安全公告將其歸類為高嚴重性拒絕服務漏洞,並為運行 Android 10、11 和 12 的設備提供了補丁。在 Android 代碼庫中,谷歌事實上,此修復完全向後移植到 Android 8.0,技術上不再支持該版本。這主要純粹是理論上的,因為零供應商實際上不會向此類舊設備推送安全更新。但如果有人需要的話,代碼就在那裡。

Android 電話堆棧(還不是?)不是一個易於升級的 Project Mainline 模塊,因此獲得修復的唯一方法是使用 2022 年 1 月的 Android 安全月度更新。 三星應該從本週開始更新此列表中的所有手機,而谷歌則發布了針對 Pixel 3a、4、4a、5 和 5a 的修復程序。更新:預計停止服務的 Pixel 3也會有緊急呼叫更新。

Pixel 6 尚未發布此更新。谷歌最新旗艦目前正面臨更新危機。由於非移動連接問題(電話無法通話),2021 年 12 月的更新被取消。由於谷歌正在努力解決問題,下一次包含 911 修復的 Pixel 6 更新應該是“一月底”。與此同時,可以使用 11 月的補丁。由於存在可能導致用戶死亡的錯誤,“一月初”和“一月底”這兩個谷歌圖表似乎都非常慢。

我會做出另一個瘋狂的猜測,並說 Pixel 6 是一款奇怪的手機,因為它是完全不同的 SoC 和調製解調器(均來自三星的 Exynos 部門,所有其他 Pixel 都使用高通)。創造假日購物季讓谷歌在發布延遲的情況下沒有迴旋餘地。對於一款具有很多首次優勢的手機來說,這並沒有讓它變得不那麼令人失望,但希望這只是一個暫時的問題。

我很驚訝這只是一個“高”(而不是“嚴重”)錯誤,而且部署需要一到兩個月的時間。延誤救護車可能是致命的,所以如果救護車能更快到達就好了,而不是谷歌決定解決這個問題的方式。

到目前為止,我們只聽說 Microsoft Teams 觸發了此重複電話帳戶錯誤,但尚不清楚是否有其他應用程序出現類似錯誤。如果您看到此列表中的某個應用程序生成了大量重複帳戶,則它很可能會阻止您連接到緊急服務。我建議卸載該應用程序,聯繫開發人員,並在 Twitter 或其他任何地方讓其他人知道。

發佈留言

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