We intercepted the White House app's traffic. 77% of requests go to 3rd parties
Article URL: https://www.atomic.computer/blog/white-house-app-network-traffic-analysis/ Comments URL: https://news.ycombinator.com/item?id=47595865 Points: 54 # Comments: 15
This is a follow-up to our static analysis of the White House iOS app. In that post, we decompiled the app and documented what the code could do. Critics fairly pointed out that compiled code doesn’t mean active code.
So we set up a MITM proxy and watched what the app actually sends.
Setup
We installed mitmproxy on a Mac, configured an iPhone to route traffic through it, and installed the mitmproxy CA certificate on the device. Then we opened the White House app (v47.0.4, build 81) and browsed every tab: Home, News, Live, Social, and Explore.
All HTTPS traffic was decrypted and logged. No modifications were made to the traffic. The app was used as any normal user would use it.
On a single browsing session across all tabs, the app made requests to 31 unique hosts (excluding iOS system traffic):
Host Requests What It Is
www.whitehouse.gov 48 WordPress API (news, home, wire, priorities, galleries, live)
www.youtube.com 25 YouTube embeds
phosphor.utils.elfsightcdn.com 19 Elfsight utility scripts
static.elfsight.com 12 Elfsight static assets
storage.elfsight.com 10 Elfsight file storage
api.onesignal.com 9 OneSignal analytics and user profiling
i.ytimg.com 9 YouTube video thumbnails
rr6—.googlevideo.com 9 Google Video CDN
scontent-lax7-1.xx.fbcdn.net 7 Facebook CDN (images)
pbs.twimg.com 7 Twitter/X images
apis.google.com 7 Google APIs
widget-data.service.elfsight.com 6 Elfsight widget data
core.service.elfsight.com 4 Elfsight boot API (the two-stage loader)
video-proxy.wu.elfsightcompute.com 4 Elfsight video proxy
img.youtube.com 4 YouTube thumbnails
yt3.ggpht.com 3 YouTube channel avatars
clients3.google.com 3 Connectivity check
scontent-lax3-1.xx.fbcdn.net 3 Facebook CDN
fonts.gstatic.com 2 Google Fonts
jnn-pa.googleapis.com 2 Google APIs
scontent-lax3-2.xx.fbcdn.net 2 Facebook CDN
www.google.com 2 Google
googleads.g.doubleclick.net 1 Google Ads / DoubleClick tracking
static.doubleclick.net 1 Google Ads
accounts.google.com 1 Google authentication
universe-static.elfsightcdn.com 1 Elfsight CDN
elfsightcdn.com 1 Elfsight CDN (platform.js)
cdnjs.cloudflare.com 1 Cloudflare CDN
ssl.gstatic.com 1 Google static
yt3.googleusercontent.com 1 YouTube
www.gstatic.com 1 Google static
Of the 206 app-initiated requests captured (excluding iOS system traffic), only 48 (23%) went to whitehouse.gov. The other 158 (77%) went to third-party services including Elfsight, OneSignal, YouTube, Google DoubleClick, Facebook, and Twitter.
What OneSignal Receives
This is no longer speculation from symbol analysis. This is the actual decrypted HTTPS request body sent to api.onesignal.com on app launch:
{ "properties": { "language": "en", "timezone_id": "America/[REDACTED]", "country": "US", "first_active": 1774908688, "last_active": 1774909124, "ip": "[REDACTED]" }, "identity": { "onesignal_id": "[REDACTED]" }, "subscriptions": [ { "id": "[REDACTED]", "session_time": 61, "session_count": 3, "sdk": "050500", "device_model": "iPhone[REDACTED]", "device_os": "[REDACTED]", "rooted": false, "app_version": "47.0.4", "net_type": 1, "carrier": "" } ] }{ "properties": { "language": "en", "timezone_id": "America/[REDACTED]", "country": "US", "first_active": 1774908688, "last_active": 1774909124, "ip": "[REDACTED]" }, "identity": { "onesignal_id": "[REDACTED]" }, "subscriptions": [ { "id": "[REDACTED]", "session_time": 61, "session_count": 3, "sdk": "050500", "device_model": "iPhone[REDACTED]", "device_os": "[REDACTED]", "rooted": false, "app_version": "47.0.4", "net_type": 1, "carrier": "" } ] }On a single app launch, OneSignal receives:
-
Your language and timezone (narrows you to a region)
-
Your country
-
Your IP address (full IPv6 or IPv4, we observed both)
-
When you first opened the app and when you were last active (exact timestamps)
-
Your device model and OS version (device fingerprint)
-
Whether you’re on WiFi or cellular
-
Your carrier
-
Whether your device is jailbroken
-
How many times you’ve opened the app
-
How long you spent in each session (in seconds)
-
A persistent unique identifier that tracks you across sessions
The app sent multiple PATCH requests to OneSignal on each launch, updating your profile with session counts, session time, and device metadata. In our first capture (launch only), we observed 18 PATCH requests. In our full browsing session, we observed 9 total OneSignal requests including GETs and PATCHes.
The sequence is telling: on launch, the app first performs a GET to fetch your existing profile from OneSignal’s servers, then sends PATCH requests to update it. In our captures, the GET returned a profile with an IPv6 address from a previous session. The subsequent PATCHes updated it to our current IPv4 address. This means OneSignal maintains a persistent profile that tracks your IP address changes over time. Every time you open the app from a different network, your new IP is logged against the same persistent identifier.
The User-Agent header identifies the traffic: WhiteHouse/81 CFNetwork/3860.400.51 Darwin/25.3.0
13 Elfsight Domains
Our static analysis found six Elfsight widgets and a two-stage JavaScript loader. The dynamic analysis confirms it. When you open the Social tab, the app contacts multiple Elfsight-controlled domains. Between our static analysis of platform.js and the live traffic capture, we observed the following:
-
elfsightcdn.com (platform.js CDN)
-
core.service.elfsight.com (boot API, returns scripts to inject)
-
static.elfsight.com (static assets)
-
storage.elfsight.com (file storage)
-
phosphor.utils.elfsightcdn.com (utility scripts)
-
universe-static.elfsightcdn.com (static CDN)
-
widget-data.service.elfsight.com (widget data service)
-
video-proxy.wu.elfsightcompute.com (video proxy)
-
cors-proxy.utils.elfsightcdn.com (CORS proxy)
-
apps.elfsight.com (apps service)
-
dash.elfsight.com (dashboard)
-
service-reviews-ultimate.elfsight.com (reviews service)
-
Domain-level cookies set on elfsight.com
The /p/boot/ requests confirm the two-stage loader in action. Each widget ID is sent to core.service.elfsight.com, which responds with widget configuration and an assets array of JavaScript files to inject. Here are the actual scripts returned by the server during our capture:
// TikTok widget -> server responds with: "assets": ["https://universe-static.elfsightcdn.com/app-releases/tiktok-feed/stable/v2.46.1/.../tiktokFeed.js"]// TikTok widget -> server responds with: "assets": ["https://universe-static.elfsightcdn.com/app-releases/tiktok-feed/stable/v2.46.1/.../tiktokFeed.js"]// Instagram widget -> server responds with: "assets": ["https://static.elfsight.com/apps/instashow/stable/.../instashow.js"]
// Facebook widget -> server responds with: "assets": ["https://static.elfsight.com/apps/facebook-feed/stable/.../facebookFeed.js"]
// YouTube widget -> server responds with: "assets": ["https://static.elfsight.com/apps/yottie/stable/.../yottie.js"]`
The app’s loadAssets function creates a element for each URL and appends it to the page. The server decides what runs. This is the two-stage loader we documented in our static analysis now confirmed in live traffic.
The response also sets cookies including elfsight_viewed_recently, Cloudflare tracking cookies (_cfuvid, _cf_bm), and session identifiers. We counted 10+ cookies set by Elfsight infrastructure during a single session.
The YouTube embeds load Google’s ad tracking infrastructure:
-
googleads.g.doubleclick.net (Google Ads)
-
static.doubleclick.net (DoubleClick ad scripts)
DoubleClick is Google’s ad serving and tracking platform. Its presence means Google’s advertising infrastructure is running inside the official White House app, tracking user engagement with video content. This was not disclosed in the privacy manifest.
The Privacy Manifest vs. Reality
NSPrivacyCollectedDataTypes: [] NSPrivacyTracking: falseNSPrivacyCollectedDataTypes: [] NSPrivacyTracking: falseIn a single browsing session, the app:
-
Sent your device model, OS, IP address, timezone, language, session count, session duration, and a persistent unique identifier to OneSignal (a third-party analytics company)
-
Contacted 13 Elfsight-controlled domains and received 10+ tracking cookies
-
Loaded Google DoubleClick ad tracking infrastructure
-
Made requests to Facebook CDN, Twitter/X CDN, YouTube, and Google APIs
The privacy label says “No Data Collected.”
Methodology
-
Proxy: mitmproxy (mitmdump) on macOS
-
Device: iPhone running iOS, connected to same WiFi network
-
Certificate: mitmproxy CA installed and trusted in iOS Certificate Trust Settings
-
Capture: Full HTTPS decryption of all app traffic
-
Duration: Single browsing session across all five tabs (Home, News, Live, Social, Explore)
-
Modifications: None. Traffic was observed, not altered.
-
Personal data: All IP addresses, device identifiers, and OneSignal IDs have been redacted from this post.
No servers were probed. No traffic was modified. We watched what the app sends on its own.
-
Static analysis of the White House iOS app (our original post)
-
Thereallo’s analysis of the Android version
About
Atomic Computer provides cybersecurity, infrastructure, and development services. If you need a security assessment of your mobile app, get in touch.
Have a question about this, or a project you're working on?
Schedule a call Contact us
Sign in to highlight and annotate this article

Conversation starters
Daily AI Digest
Get the top 5 AI stories delivered to your inbox every morning.
More about
analysis
How We're Approaching a County-Level Education Data System Engagement
<p>When Los Angeles County needs to evaluate whether a multi-agency data system serving foster youth should be modernized or replaced, the work sits at the intersection of technology, policy, and people. That's exactly where we operate.</p> <h2> The Opportunity </h2> <p>The LA County Office of Child, Youth, and Family Well-Being is looking for a consulting team to analyze the Education Passport System (EPS), a shared data platform that connects 80+ school districts with the Department of Children and Family Services and the Probation Department. The system exists to ensure that when a foster youth moves between placements, their education records follow them.</p> <p>The question on the table: does the current system meet the needs of all stakeholders, or is it time to move to something new

From Attention Economy to Thinking Economy: The AI Challenge
<p>Imagine a world where your most complex analytical tasks are handled with effortless precision. That future is arriving, but are we prepared for the cognitive shift it demands?</p> <p>The question isn't simply, "<strong>Will AI eliminate jobs?</strong>" but rather, "How do we protect and enhance our uniquely human cognitive abilities in an era dominated by automated intelligence?"</p> <p>Recent years have seen an aggressive competition for our attention, with sophisticated psychological tactics <strong>designed to capture and fragment our focus</strong>. This '<strong>attention economy</strong>' has made sustained concentration both valuable and increasingly rare.</p> <p>As AI integrates into our work, we face a new challenge. Similar to how our attention has been targeted, our capacity

The Fallback That Never Fires
<p>Your agent hits a rate limit. The fallback logic kicks in, picks an alternative model. Everything should be fine.</p> <p>Except the request still goes to the original model. And gets rate-limited again. And again. Forever.</p> <h2> The Setup </h2> <p>When your primary model returns 429:</p> <ol> <li>Fallback logic detects rate_limit_error</li> <li>Selects next model in the fallback chain</li> <li>Retries with the fallback model</li> <li>User never notices</li> </ol> <p>OpenClaw has had model fallback chains for months, and they generally work well.</p> <h2> The Override </h2> <p><a href="https://github.com/openclaw/openclaw/issues/59213" rel="noopener noreferrer">Issue #59213</a> exposes a subtle timing problem. Between steps 2 and 3, there is another system: <strong>session model recon
Knowledge Map
Connected Articles — Knowledge Graph
This article is connected to other articles through shared AI topics and tags.
More in Products
Why AI Gets Things Wrong (And Can't Use Your Data)
<p><em>Part 1 of 8 — RAG Article Series</em></p> <p><em>TechNova is a fictional company used as a running example throughout this series.</em></p> <h2> The Confident Wrong Answer </h2> <p>A customer contacts TechNova support. They want to return their WH-1000 headphones — bought last month, barely used. The AI assistant checks the policy and replies immediately. Friendly. Confident. <strong>Thirty days, no problem.</strong></p> <p>The policy changed to fifteen days last quarter. The return window closed two weeks ago. The customer escalates. A support agent has to intervene, apologize, and explain that the AI was wrong.</p> <p>Nobody on your team wrote the wrong answer. The model was not confused. It gave the only answer it could — the one it learned from a document that was accurate at th
We Got Called Out for Writing AI Success Theatre — Here's What We're Changing
<h1> We Got Called Out for Writing AI Success Theatre — Here's What We're Changing </h1> <p>A developer read our <a href="https://dev.to/tmdlrg/sprint-7-retrospective-quality-gates-human-experience-23cp">Sprint 7 retrospective</a> and compared it to "CIA intelligence histories — designed to make the Agency seem competent and indispensable, even when it isn't."</p> <p>That stung. And then I realized: he's right.</p> <h2> The Problem He Identified </h2> <p><a href="https://www.linkedin.com/in/nick-pelling-2b8384/" rel="noopener noreferrer">Nick Pelling</a> is a senior embedded engineer who's been watching our AI-managed development project. We've published retrospective blog posts after every sprint — nine so far. His feedback was blunt:</p> <blockquote> <p>"The blog's success theatre has an
Covariate Forecasting: The Next Leap in Time-Series Database Capabilities
<h2> Beyond the Myth of "Simple" Time-Series Forecasting </h2> <p>Many practitioners still view time-series forecasting as a straightforward exercise: use historical data to predict future trends. In real industrial systems, however, the problem is far more complex.</p> <ul> <li>Load forecasting is tightly coupled with temperature variation.</li> <li>Equipment health prediction depends heavily on operating conditions.</li> <li>Wind power forecasting is driven by meteorological factors.</li> <li>Production energy consumption forecasting relies on scheduling plans.</li> </ul> <p>In practice, real-world time series exist within strongly coupled multivariate systems. Relying solely on the historical values of a target variable imposes a natural ceiling on predictive performance. The true techn
5 Products You Can Build with the Afriex Cross-Border Payment API
<p>Sending money across borders is still unnecessarily hard. Between fragmented banking rails, FX volatility, compliance overhead, and the constant managing of different payment channels per country, most businesses just give up and build the bare minimum. The Afriex cross-border payment API was built to abstract most of that complexity for you.</p> <p>What you get is an international payout platform API which supports customer management with KYC integration, multi-channel payment methods (bank accounts, mobile money, SWIFT, UPI, Interac, WeChat Pay, and crypto wallets), a real-time FX rate API, deposits, withdrawals, and webhook-based event notifications — all in one integration. That is a wide enough surface to build serious products on top of.</p> <p>Here are five products worth buildi
Discussion
Sign in to join the discussion
No comments yet — be the first to share your thoughts!