白宫官方 App 逆向拆解:付费墙绕过、休眠定位追踪与供应链风险

cover

3 月 28 日,安全研究人员 Thereallo 发布了一篇对白宫官方 Android 应用的逆向分析。这篇 14 分钟的长文揭示的问题不少:付费墙绕过、休眠的 GPS 定位追踪管线、从个人 GitHub Pages 加载代码、零证书固定,以及正式版中残留的开发环境痕迹。

付费墙与隐私协议绕过

应用内置了一个 WebView 浏览器,用于打开外部链接。每次页面加载时,它会自动注入一段 JavaScript,目标是:

  • 隐藏 Cookie 弹窗
  • 隐藏 GDPR 同意对话框和 OneTrust 弹出层
  • 隐藏登录墙和注册墙
  • 隐藏付费墙元素
  • 隐藏 CMP(Consent Management Platform)组件

脚本还会强制设置 body { overflow: auto !important } 来解除被同意对话框锁定的页面滚动,并使用 MutationObserver 持续移除动态添加的同意组件。

一个政府官方应用,在系统性地绕过第三方网站的隐私合规和订阅机制。这不是 bug,是编译进正式版的功能。

休眠的定位追踪

这一点更值得注意。

应用集成了 OneSignal SDK,其原生定位追踪代码已完整编译进 APK。前台采集间隔 4.5 分钟,后台 9.5 分钟,采集数据包括经纬度、精度、时间戳、前后台状态以及定位方式(GPS 或网络),全部写入 OneSignal 的 PropertiesModel 并同步到其服务器。

目前有三个"门控"条件:

  1. _isShared 标志默认为 false,需要 JS 层调用 setLocationShared(true) 手动开启
  2. 用户需要授予 Android 运行时位置权限
  3. 设备需要有定位服务(GMS 或 HMS)

三个条件都满足后,完整的追踪管线才会启动。应用在 Google Play 的页面确实提到会请求"精确位置"和"近似位置"的权限。

关键在于:整个基础设施——权限字符串、间隔常量、融合定位请求、采集逻辑、后台调度、同步到 OneSignal 的完整管线——全部编译在正式版里。代码层面可以确认 setLocationSharedisLocationShared 在 JS bundle 中被引用,但具体是否在当前版本中调用了 setLocationShared(true),由于 Hermes 字节码编译后无法直接确认调用点。

Expo 配置中有一个叫 withNoLocation 的插件,看起来是设计用来剥离位置相关代码的。但实际效果:位置追踪的原生代码一页都没被删。

供应链风险

应用使用 react-native-youtube-iframe 库嵌入 YouTube 视频,该库从一个个人 GitHub Pages 站点加载播放器 HTML:

https://lonelycpp.github.io/react-native-youtube-iframe/iframe.html

如果 lonelycpp 这个 GitHub 账户被入侵,攻击者可以在该页面投放任意 HTML 和 JavaScript,在白宫应用的 WebView 上下文中执行。

此外,应用还通过 Elfsight 加载第三方 JavaScript 用于社交媒体嵌入,没有沙箱隔离。Elfsight 的代码随时可能变更。

其他第三方依赖包括 Mailchimp(邮箱收集)、Uploadcare(图片 CDN)、Truth Social 嵌入和 Facebook 页面插件。没有一个运行在美国政府的基础设施上。

开发痕迹残留

正式版中残留了以下开发环境内容:

  • Metro bundler 开发服务器 localhost URL
  • 开发者内网 IP 10.4.4.109,写在字符串资源文件中
  • Expo 开发客户端(expo-dev-client、expo-devlauncher、expo-devmenu)全部编译进正式版
  • Compose PreviewActivity 在 Manifest 中被导出——这是仅用于开发预览的组件
  • dev_menu_fab_icon.png 存在于 drawable 资源中

应用也没有证书固定(certificate pinning),使用标准 Android TrustManager 处理 SSL,在存在中间人攻击风险的网络环境下(企业代理、公共 Wi-Fi),应用与服务端之间的流量可以被截获。

68 个依赖库

该应用编译了超过 68 个第三方库,包括 React Native、Expo SDK 54、Hermes 引擎、OneSignal、Firebase 全家桶(Analytics、Cloud Messaging、Installations)、OkHttp、Apollo GraphQL、Fresco、Glide、Coil、ExoPlayer、Google ML Kit、Bouncy Castle 等。

一个政府官方应用,用了 68 个第三方库,其中不少涉及用户数据采集和远程代码加载。

技术架构

应用基于 React Native + Expo SDK 54 构建,运行在 Hermes JavaScript 引擎上,后端是带自定义 REST API 的 WordPress。开发实体是一个叫做 "forty-five-press" 的组织。

应用功能本质是一个内容门户:白宫新闻、直播、图片库、政策页面、社交媒体嵌入,以及本届政府的宣传材料。

这是否违法?大概不算。但这是你对一个政府官方应用的期待吗?大概也不是。

来源: https://thereallo.dev/blog/decompiling-the-white-house-app

相关推荐