概要
- ホワイトハウス公式アプリの技術解析レポート
- React Native・Expo・Hermes・WordPress REST APIを利用
- JavaScript注入によるWeb表示の改変と位置情報追跡機能
- 多数のサードパーティサービス・外部コードの組み込み
- セキュリティ・プライバシー・運用上の懸念点を指摘
ホワイトハウス公式アプリの技術構成と挙動
- React Native ・ Expo (SDK 54) ・ Hermes JavaScriptエンジン による実装
- バックエンドは WordPress、独自のREST API(whitehouse/v1名前空間)でコンテンツ配信
- Expo設定ファイルによると開発元は forty-five-press
- アプリロジックは 5.5MBのHermesバイトコードバンドル にコンパイル
- ネイティブ(Java)側はラッパーのみ、バージョン47.0.1、Hermes/新アーキテクチャ有効化
- withNoLocation ・ withStripPermissions プラグインが組み込まれているが、後述の挙動に関連
REST APIエンドポイント一覧
- /wp-json/whitehouse/v1/home:ホーム画面
- /wp-json/whitehouse/v1/news/articles:ニュース記事
- /wp-json/whitehouse/v1/wire:"The Wire"ニュースフィード
- /wp-json/whitehouse/v1/live:ライブ配信
- /wp-json/whitehouse/v1/galleries:フォトギャラリー
- /wp-json/whitehouse/v1/issues:政策課題
- /wp-json/whitehouse/v1/priorities:優先事項
- /wp-json/whitehouse/v1/achievements:実績
- /wp-json/whitehouse/v1/affordability:薬価情報
- /wp-json/whitehouse/v1/media-bias:"Media Bias"セクション
- /wp-json/whitehouse/v1/social/xX/: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"
- https://www.ice.gov/webform/ice-tip-form への直接リンク
アプリの主な機能
- ニュース配信、ライブ配信、ギャラリー、政策ページ、SNS埋め込み、政権プロモーションなどのコンテンツポータル
- WebView で外部リンクを開く際、毎回JavaScriptスニペットを注入
- Cookieバナー、GDPR同意、ログイン壁、会員登録壁、ペイウォール等を非表示化
- bodyのoverflow強制解除、MutationObserverでダイアログ再生成も自動除去
位置情報追跡・プライバシー挙動
- OneSignal SDK のネイティブ位置情報追跡コードがAPK内に完全実装
- トラッキング開始には3つの条件
- _isSharedフラグ(SharedPreferencesで管理、JSレイヤーからsetLocationShared(true)で有効化可)
- Androidランタイムでの位置情報許可(マニフェスト未記載だが実行時リクエスト)
- 端末にロケーションプロバイダー(GMS/HMS)が存在
- 条件成立時、 4.5分間隔(前景)/9.5分間隔(背景)でGPS取得、OneSignalサーバーへ送信
- 位置情報の記録内容:緯度・経度・精度・タイムスタンプ・アプリ状態・取得方法(GPS/ネットワーク)
- バックグラウンドサービスによる継続取得も可能
- withNoLocation プラグインはコード除去に失敗、JSから有効化可能な状態
OneSignalによる詳細なユーザープロファイリング
- addTag(ユーザーセグメント化)、addSms(電話番号紐付け)、addAliases(クロスデバイス識別)、addOutcomeWithValue / addUniqueOutcome(行動・成果計測)
- 通知クリック・インアプリメッセージの全ライフサイクルイベント追跡
- setLocationShared / isLocationShared(位置情報トグル)、setPrivacyConsentRequired / setPrivacyConsentGiven(同意管理)
- 受信通知・開封/非開封のローカルDB記録
- 位置情報・通知操作・インアプリクリック・電話番号・タグ・状態変化等がOneSignalサーバーへ送信
サードパーティコード・外部サービスの組み込み
- YouTube埋め込み :react-native-youtube-iframe経由で lonelycpp.github.io (個人GitHub Pages)からプレイヤーHTMLを読み込み
- アカウント乗っ取り時、任意のコード実行リスク
- Elfsight (商用SaaSウィジェット)のJavaScriptをWebViewで直接実行、トラッキング・コード変更のリスク
- Mailchimp (whitehouse.us10.list-manage.com/subscribe/post-json)でメール登録
- Uploadcare (ucarecdn.com)から画像配信(UUIDハードコード)
- Truth Social 埋め込み(静的CDN URL使用)
- Facebookページプラグイン (iframeでfacebook.com/plugins/page.php経由)
- いずれも 政府管理インフラではない
セキュリティ・運用上の懸念点
- 証明書ピンニング未実装、標準Android TrustManagerのみ
- 悪意あるCA・MITM攻撃時に通信傍受のリスク
- 開発用アーティファクト混入
- localhost URL、開発者IP(10.4.4.109)、expo-dev-client/devlauncher/devmenu、Compose PreviewActivity(本来は開発専用)がリリースビルドに含まれる
- AndroidManifest は通知用途のパーミッション多数(バッジ表示等)、興味深いのはマニフェスト未記載だが実行時リクエストされる位置情報・ストレージ等
- Google Playストア記載の権限:"共有ストレージの内容変更/削除"、"フォアグラウンドサービス実行"、"他アプリ上への表示"、"起動時自動実行"、"指紋・生体認証利用"等
- FileProvider 設定で外部ストレージ全体をWebView経由で公開
利用ライブラリ・バイナリ一覧
- React Native, Expo SDK 54, Hermes, OneSignal, Firebase Cloud Messaging/Analytics, OkHttp, Apollo, Fresco, Glide, Coil, Uploadcare, ExoPlayer, ML Kit, Bouncy Castle, Secure Store, Async Storage, WebView, GSON, Wire, Koin, OpenTelemetry など計68以上
- ネイティブ.soライブラリ25種(Hermes, React Native core, Reanimated, gesture handler, SVG renderer, image pipeline, barcode scanner等)
総括:公式アプリとしての是非
- WebViewで外部サイトにJavaScriptを注入し、GDPRバナーやペイウォール等を強制非表示
- GPSトラッキングパイプラインが完全実装、OneSignalサーバーへ定期送信
- 個人GitHub PagesやElfsight等、無関係な外部ソースからコードをロード
- ユーザープロファイリング・トラッキングの徹底
- 証明書ピンニングや運用上の基本的なセキュリティ対策が不十分
- 開発用の残留物が本番ビルドに混入
法的には違法ではない可能性が高いが、公式政府アプリとしては極めて不適切な設計・運用体制