安全研究人员警告说, Signal的桌面应用程序for Mac 中的消息不会从机器中删除,而是被复制到通知栏中,并保存在通知栏中。
这个由Alec Muffett发现的问题影响了甚至消失的信息,这些信息仍然存在于操作系统的通知中心。
Notification Center在OSX 10.10(Yosemite)中推出,旨在帮助用户轻松访问有关当天的详细信息并赶上他们可能错过的通知,并且Signal会使用它来提醒新来的邮件。如果Signal应用程序不在前台,则通知默认显示在屏幕的右上角。
可以使用NSUserNotification 类以各种方式创建并向macOS上的通知中心发布通知。但是,几秒钟后,如果用户不与它们交互,操作系统会自动关闭屏幕上的通知。
默认的通知类型是一个'横幅',几秒钟后会被解散,但开发人员也可以指定'alert'类型(通过将' NSUserNotificationAlertStyle '键设置为'alert'),这是一个交互式通知。
但是,Signal应用程序并未指定' NSUserNotificationAlertStyle '风格,这意味着它使用默认类型的通知,这是操作系统自动解除的非交互式“横幅”。
正如Objective-See的Patrick Wardle所指出的那样,即使应用程序处于焦点位置并且通知未显示给用户,如果应用程序调用[NSUserNotificationCenter defaultUserNotificationCenter],通知将转至通知中心。
此外,通知不会从通知中心移除,除非类型为'提醒'且用户与其交互,应用程序明确解除该通知,或者用户打开通知中心并单击'x'。
但是,即使应用程序从UI中删除它们,Signal的消失消息也可能不会在macOS上消失。
他们可能会坚持在通知中心,因为当应用程序不在前台并且由于操作系统自动关闭通知“标题”,而是在通知中心留下实际通知(其中包含消息内容)时发布消息通知。
更重要的是,“Signal从应用UI中删除消息时并未明确地删除此通知,”安全研究员解释说。
但是,如果Signal应用程序位于前台,则不会发布此类通知,这意味着这些消息不会通过通知中心。此外,由于通知限制了正在显示的文本数量,所以邮件将显示在通知中心中。
Wardle还解释说,通知中心内的信号消息甚至可以在删除后恢复,因为通知存储在磁盘上的SQLite数据库中,并且具有用户(非root)权限。
数据库不仅包含已发布通知的应用程序的信息,还包含通知本身及其内容。因此,即使某些消息被设置为消失,也可以从那里恢复作为通知而到达的信号消息的全文。
“如果应用程序想要将该项目从通知中心删除,则必须确保该警报被用户解除或以编程方式解除!但是,这还不清楚,这也会从通知数据库中“删除”通知(及其内容)......我猜不是!如果是这种情况,Signal可能必须避免为消失的消息生成通知(包含消息正文)