2026 年 3 月 27 日,美国白宫正式发布官方通稿,宣布上线全新的白宫官方移动应用。白宫在通稿中将该应用定位为美国民众对接特朗普政府的核心信息链路,宣称其能实现 “前所未有的特朗普政府信息触达能力”,可绕过媒体杂音,为用户提供来自官方信源的无过滤、实时更新内容。
根据白宫官方披露的信息,这款应用核心覆盖多项核心功能场景:包括针对重大公告、行政举措、核心施政优先级的突发新闻预警推送;白宫发布会、总统演讲、重大历史性事件的实时直播服务;汇集官方音视频、图片内容的动态媒体资源库;最新政策突破进展的同步更新通道;同时还开放了民众向政府直接传递声音与反馈的专属入口。白宫方面强调,这款集实时资讯、直播视频、高清图片、智能推送于一体的官方应用,是美国民众实时了解、深度参与特朗普政府相关事务最快捷、最权威的移动端载体。
该应用同步登陆苹果 App Store 与谷歌 Play 商店,上线后随即引发网络安全领域的关注。2026 年 3 月 28 日,即应用上线次日,国外安全研究者发布了针对该应用安卓版本的反编译审计报告,披露了其在数据合规、用户隐私保护、供应链安全等多个维度存在的一系列争议性问题,与白宫官方的宣传定位形成了显著反差。

下文为安全研究者针对 2026 年白宫官方安卓 APP 发布的反编译审计报告,核心揭露了这款政府官方 APP 在合规、隐私、供应链安全、基础安全四大维度的安全问题,核心结论如下:
- 合规违规风险
APP 内置 JS 注入器,对所有通过内置浏览器打开的第三方网站强行注入代码,移除 Cookie 合规提示、GDPR 授权弹窗、登录墙与付费墙,涉嫌违反欧盟 GDPR 等数据合规法规,同时侵犯第三方网站的正常运营权益。
- 严重隐私风险
APP 号称禁用定位的插件完全失效,内置完整的 GPS 定位追踪链路,前台每 4.5 分钟、后台每 9.5 分钟可采集一次定位数据;同时通过 OneSignal SDK 实现了全维度用户画像与行为追踪,用户个人数据全量同步至第三方服务商服务器,而非政府可控基础设施。
- 供应链风险
APP 从个人开发者的 GitHub Pages 站点加载可执行代码,存在账号被入侵后导致全量用户被植入恶意代码的极端风险;同时依赖多个第三方商业 SaaS 服务商的无沙箱 JS 代码,数据安全与代码安全完全不可控。
- 基础安全能力严重缺失
未配置 SSL 证书固定,存在流量中间人攻击风险;生产版本残留大量开发调试产物,暴露开发环境信息,进一步扩大攻击面;权限配置存在缺陷,外置存储根目录被完全暴露,存在本地数据泄露风险。
- 开发与管控失范
作为美国政府官方 APP,其核心代码、基础设施、数据处理均大量依赖第三方商业服务商与个人开发者,无有效的安全隔离与管控机制,开发流程存在明显的不规范问题,完全不符合政府级应用的安全标准。
国外安全研究者反编译白宫新版官方 APP情况原文链接:
https://blog.thereallo.dev/blog/decompiling-the-white-house-app
核心内容如下:
白宫官方安卓 APP 内置了 Cookie / 付费墙绕过注入器,每 4.5 分钟追踪一次用户 GPS 定位,还会从个人 GitHub Pages 站点加载 JavaScript 可执行代码。
白宫在苹果 App Store 和谷歌 Play 商店上线了这款官方 APP,同时发布相关博客,称其能让用户 “前所未有地接触特朗普政府的相关信息”。
一名安全研究者使用 ADB 工具耗时数分钟提取了这款 APP 的 APK 安装包,并通过 JADX 反编译工具完成拆解,以下为其完整的审计发现。
APP 基础信息
这是一款基于 Expo(SDK 54)构建的 React Native 应用,运行在 Hermes JavaScript 引擎上,后端采用搭载自定义 REST API 的 WordPress 搭建。
// sources/gov/whitehouse/app/BuildConfig.javapublicfinalclassBuildConfig {publicstaticfinalStringAPPLICATION_ID="gov.whitehouse.app";publicstaticfinalStringBUILD_TYPE="release";publicstaticfinalbooleanDEBUG=false;publicstaticfinalbooleanIS_HERMES_ENABLED=true;publicstaticfinalbooleanIS_NEW_ARCHITECTURE_ENABLED=true;publicstaticfinalintVERSION_CODE=20;publicstaticfinalStringVERSION_NAME="47.0.1";}
根据 Expo 配置文件,该 APP 由名为forty-five-press的主体开发。APP 的核心业务逻辑被编译进一个 5.5MB 的 Hermes 字节码包中,原生 Java 层仅作为轻量化封装容器。
// resources/assets/app.config{"name": "White House","slug": "white-house","owner": "forty-five-press","version": "47.0.1","scheme": "whitehouse","sdkVersion": "54.0.0","newArchEnabled": true,"plugins": [["expo-router", {"sitemap": false}],["onesignal-expo-plugin", {"mode": "production"}],"./plugins/withOkHttpFix","./plugins/withResizeableActivity","./plugins/withNoBackgroundAudio","./plugins/withEdgeToEdge","./plugins/withStripPermissions","./plugins/withNoLocation"],"updates": {"enabled": false,"url": "https://u.expo.dev/1590bd5c-74a2-4dd4-8fe6-ff5552ca15b6","checkAutomatically": "NEVER"},"extra": {"eas": {"projectId": "1590bd5c-74a2-4dd4-8fe6-ff5552ca15b6"}}}
Expo 配置中有两个关键插件格外醒目:withNoLocation(号称禁用定位)、withStripPermissions(号称权限剥离),这两个插件在后续审计中被发现存在核心功能矛盾;OTA 在线更新功能处于禁用状态,Expo 更新框架虽被编译进安装包,但并未启用。
APP 核心业务功能
该研究者从 Hermes 字节码包中提取了全量字符串,筛选出对应的 URL 与 API 接口。APP 的内容全部来自whitehouse.gov域名下、带自定义whitehouse/v1命名空间的 WordPress REST API,核心接口覆盖首页、新闻文章、直播流、图片库、政策议题、施政成果、媒体偏见板块、X/Twitter 信息流代理等。

字节码包中还包含大量硬编码字符串,例如"THE TRUMP EFFECT""Greatest President Ever!""Text President Trump""Send a text message to President Trump at 45470""Visit TrumpRx.gov""Visit TrumpAccounts[.]gov"
翻译过来: “特朗普效应”“史上最伟大的总统!”“给特朗普总统发短信至 45470”“访问 TrumpRx[.]gov” 等。
甚至在这款资讯类 APP 中,直接嵌入了美国移民与海关执法局(ICE)的举报表单链接(ice[.]gov/webform/ice-tip-form)。
本质上,这是一个内容门户,整合了新闻、直播、图片库、政策页面、社交媒体嵌入内容与政府施政宣传内容,全部由 WordPress 驱动。
Cookie / 付费墙绕过注入器
APP 内置了用于打开外部链接的 WebView 网页组件,每次有页面在该 WebView 中加载时,APP 都会自动注入一段 JavaScript 代码。
(function() {var css = document.createElement("style");css.textContent = ["[class*="cookie"], [id*="cookie"], [class*="Cookie"], [id*="Cookie"]","[class*="consent"], [id*="consent"], [class*="Consent"], [id*="Consent"]","[class*="gdpr"], [id*="gdpr"], [class*="GDPR"]","[class*="privacy-banner"], [id*="privacy-banner"]","[class*="onetrust"], [id*="onetrust"]","[class*="cc-banner"], [class*="cc-window"]","[aria-label*="cookie" i], [aria-label*="consent" i]","[class*="login-wall"], [class*="loginWall"], [class*="LoginWall"]","[class*="signup-wall"], [class*="signupWall"]","[class*="upsell"], [class*="Upsell"]",".cmpboxBtnYes, .cmpbox, #cmpbox, .cmpboxBG","[class*="banner-cookie"], [class*="CookieBanner"]",].join(",") + "{ display: none !important; visibility: hidden !important; }";css.textContent += "body { overflow: auto !important; }";document.head.appendChild(css);var observer = new MutationObserver(function() {var els = document.querySelectorAll("[class*="cookie" i], [class*="consent" i], [class*="gdpr" i], "+ "[id*="cookie" i], [id*="consent" i]");els.forEach(function(el) { el.style.display = "none"; });});observer.observe(document.body, { childList: true, subtree: true });})();true;
这段代码的核心作用是:
强制隐藏 Cookie 提示横幅、GDPR 同意弹窗、OneTrust 授权弹窗、隐私提示横幅、登录 / 注册拦截墙、增值服务推广弹窗、付费墙元素、同意管理平台(CMP)弹窗;
强制恢复被同意弹窗锁定的页面滚动功能;
设置持续监听的 MutationObserver,实时清除页面动态加载的所有授权相关元素。
简言之,这款美国政府官方 APP,会向所有第三方网站注入 CSS 和 JavaScript 代码,强行移除网站的合规授权提示、登录门槛与付费墙。
// sources/com/reactnativecommunity/webview/RNCWebViewManagerImpl.javapublic final void setInjectedJavaScript(RNCWebViewWrapper viewWrapper, String injectedJavaScript) {viewWrapper.getWebView().injectedJS = injectedJavaScript;}
// sources/com/reactnativecommunity/webview/RNCWebView.javapublic void callInjectedJavaScript() {String str;if (!getSettings().getJavaScriptEnabled()|| (str = this.injectedJS) == null|| TextUtils.isEmpty(str)) {return;}evaluateJavascriptWithFallback("(function() {\\n" + this.injectedJS + ";\\n})();");}
原生层代码也证实,该注入逻辑通过 React Native WebView 的injectedJavaScript属性实现,APP 内浏览器的每一次页面加载,都会通过安卓系统的evaluateJavascript()方法执行这段注入代码。
完整的定位追踪基础设施
Expo 配置中号称要剥离定位功能的withNoLocation插件完全失效,OneSignal SDK 的原生定位追踪代码被完整编译进了 APK 安装包。
// sources/com/onesignal/location/internal/common/LocationConstants.javapublic final class LocationConstants {public static final String ANDROID_BACKGROUND_LOCATION_PERMISSION_STRING ="android.permission.ACCESS_BACKGROUND_LOCATION";public static final String ANDROID_COARSE_LOCATION_PERMISSION_STRING ="android.permission.ACCESS_COARSE_LOCATION";public static final String ANDROID_FINE_LOCATION_PERMISSION_STRING ="android.permission.ACCESS_FINE_LOCATION";public static final long BACKGROUND_UPDATE_TIME_MS = 570000;public static final long FOREGROUND_UPDATE_TIME_MS = 270000;public static final long TIME_BACKGROUND_SEC = 600;public static final long TIME_FOREGROUND_SEC = 300;}
代码中硬编码了定位间隔:前台 270000 毫秒 = 4.5 分钟,后台 570000 毫秒 = 9.5 分钟。
// sources/com/onesignal/location/internal/LocationManager.java// Gate 1: _isShared must be true (defaults to false in SharedPreferences)boolean r7 = r6.get_isShared()if (r7 != 0) goto L42kotlin.Unit r7 = kotlin.Unit.INSTANCEreturn r7 // bail out if location sharing is off
定位追踪并非静默启动,设置了三道启动门槛:
_isShared标志位必须为 true(默认关闭,JavaScript 层可通过
setLocationShared(true)一键开启,字节码包证实 APP 已引用该 API,具备开启能力);用户必须在安卓系统运行时授予定位权限(权限未在清单文件中声明,但可运行时申请,谷歌 Play 商店详情也证实该 APP 会申请定位权限);
设备必须具备 GMS/HMS 定位服务能力。
三道门槛全部满足后,融合定位 API 会按对应间隔采集 GPS 数据,APP 聚焦 / 失焦时会动态切换前台 / 后台定位间隔。
采集的信息包括:纬度、经度、定位精度、时间戳、APP 前后台状态、定位类型(精准 GPS / 网络粗略定位),所有数据会完整写入 OneSignal 的数据模型,并同步至其官方 API(https://api.onesignal[.]com/)。
// sources/com/onesignal/location/internal/controller/impl/GmsLocationController.javaprivate final void refreshRequest() {if (!this.googleApiClient.isConnected()) {return;}if (this.hasExistingRequest) {this._fusedLocationApiWrapper.cancelLocationUpdates(this.googleApiClient, this);}long j = this._applicationService.isInForeground()? LocationConstants.FOREGROUND_UPDATE_TIME_MS // 270000: LocationConstants.BACKGROUND_UPDATE_TIME_MS; // 570000LocationRequest priority = LocationRequest.create().setFastestInterval(j).setInterval(j).setMaxWaitTime((long) (j * 1.5d)).setPriority(102); // PRIORITY_BALANCED_POWER_ACCURACYthis._fusedLocationApiWrapper.requestLocationUpdates(googleApiClient, priority, this);this.hasExistingRequest = true;}
同时 APP 还内置了后台定位服务,即便 APP 未处于活跃状态,也能持续采集定位信息。
// sources/com/onesignal/location/internal/background/LocationBackgroundService.javapublic final class LocationBackgroundService implements IBackgroundService {@Overridepublic Long getScheduleBackgroundRunIn() {if (!this._locationManager.isShared()) {return null;}if (!LocationUtils.INSTANCE.hasLocationPermission(this._applicationService.getAppContext())) {return null;}return Long.valueOf(MediaSessionService.DEFAULT_FOREGROUND_SERVICE_TIMEOUT_MS- (this._time.getCurrentTimeMillis()- this._prefs.getLastLocationTime()));}@Overridepublic Object backgroundRun(Continuation continuation) {this._capturer.captureLastLocation();return Unit.INSTANCE;}}
全维度用户画像与行为追踪
OneSignal 在这款 APP 中远不止承担推送通知功能,而是实现了完整的用户行为追踪与画像体系,核心能力包括:
用户标签打标、手机号绑定、跨设备用户识别;
用户行为与转化全量追踪;
通知、应用内消息的全生命周期追踪(展示、点击、打开 / 关闭等全环节);
权限、订阅、用户状态变更的全量监控;
本地数据库完整留存用户的每一条通知交互记录、应用内消息展示与点击数据。
用户的定位信息、交互行为、手机号、标签数据、状态变更记录,全部会被上传至 OneSignal 的服务器。
// sources/com/onesignal/core/internal/database/impl/OneSignalDbContract.javapublic static final class NotificationTable implements BaseColumns {public static final String TABLE_NAME = "notification";public static final String COLUMN_NAME_NOTIFICATION_ID = "notification_id";public static final String COLUMN_NAME_OPENED = "opened";public static final String COLUMN_NAME_DISMISSED = "dismissed";public static final String COLUMN_NAME_TITLE = "title";public static final String COLUMN_NAME_MESSAGE = "message";public static final String COLUMN_NAME_CREATED_TIME = "created_time";public static final String COLUMN_NAME_FULL_DATA = "full_data";}public static final class InAppMessageTable implements BaseColumns {public static final String TABLE_NAME = "in_app_message";public static final String COLUMN_NAME_MESSAGE_ID = "message_id";public static final String COLUMN_NAME_DISPLAY_QUANTITY = "display_quantity";public static final String COLUMN_NAME_LAST_DISPLAY = "last_display";public static final String COLUMN_CLICK_IDS = "click_ids";public static final String COLUMN_DISPLAYED_IN_SESSION = "displayed_in_session";}
高危供应链安全风险
- 个人 GitHub Pages 代码加载
APP 使用
react-native-youtube-iframe库嵌入 YouTube 视频,该库会从个人 GitHub Pages 站点https://lonelycpp.github[.]io/react-native-youtube-iframe/iframe_v2.html加载播放器代码。一旦该 GitHub 账号被入侵,攻击者可向所有 APP 用户推送并执行任意代码。
- 第三方无沙箱 JS 加载
为嵌入社交媒体信息流,APP 从商业 SaaS 服务商 Elfsight 加载第三方 JavaScript 代码(
https://elfsightcdn.com/platform.js),代码在 WebView 中无沙箱隔离运行,其追踪逻辑会同步执行,且代码内容可随时无感知变更。 - 非政府基础设施依赖
邮件订阅功能由 Mailchimp 承接、图片资源通过 Uploadcare CDN 分发、硬编码 Truth Social 与 Facebook 的嵌入内容,以上服务均不属于美国政府管控的基础设施。
基础安全缺陷
- 无 SSL 证书固定机制
APP 仅使用安卓系统标准的 TrustManager 进行 SSL 证书校验,未配置证书固定(Certificate Pinning)。若用户处于 CA 证书被入侵的网络环境(如企业代理、存在中间人攻击的公共 WiFi),APP 与后端的流量可被完整拦截、读取。
- 生产版本残留开发产物
正式发布的安装包中,残留了本地开发服务器地址、开发者内网 IP(10.4.4.109)、Expo 开发客户端组件、开发专用的 PreviewActivity 导出组件等大量不应出现在生产环境的内容。
- 权限配置风险
清单文件中未声明、但 SDK 硬编码了精准 / 粗略 / 后台定位的运行时申请权限;文件提供器配置暴露了整个外置存储根目录,存在数据泄露风险。

研究者指出,这些行为大概率不违法,但绝非公众对一款政府官方 APP 的合理预期。
声明:本文来自黑鸟,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 [email protected]。