- Ứng dụng chính thức của Nhà Trắng dựa trên React Native sử dụng backend WordPress cùng Expo SDK 54 và engine Hermes, hoạt động như một cổng nội dung cung cấp tin tức, ảnh, chính sách và hơn thế nữa
- Mọi WebView đều chứa mã chèn JavaScript để tự động loại bỏ banner cookie, hộp thoại đồng ý GDPR, thành phần paywall và tương tự
- Chức năng theo dõi vị trí và lập hồ sơ người dùng thông qua OneSignal SDK được tích hợp đầy đủ, có thể thu thập dữ liệu GPS theo chu kỳ 4,5 phút đến 9,5 phút
- Ứng dụng tải các dịch vụ thương mại bên ngoài như GitHub Pages, Elfsight, Mailchimp, Uploadcare, Truth Social nên tiềm ẩn rủi ro chuỗi cung ứng và khả năng theo dõi
- Do không áp dụng SSL pinning, còn sót tài nguyên dành cho phát triển, khả năng thực thi mã bên ngoài, ứng dụng chính thức của chính phủ này dấy lên lo ngại về bảo mật và quyền riêng tư
Tổng quan ứng dụng
- Ứng dụng chính thức White House là ứng dụng dựa trên React Native được phát hành trên App Store và Google Play
- Sử dụng Expo SDK 54 và Hermes JavaScript engine
- Backend là cấu trúc REST API tùy biến dựa trên WordPress
- Theo cấu hình Expo, đơn vị tạo ứng dụng được ghi là “forty-five-press”
- Logic ứng dụng được biên dịch thành gói bytecode Hermes dung lượng 5,5MB, còn mã native chỉ là lớp wrapper đơn giản
- Phiên bản là 47.0.1, build 20, với Hermes và New Architecture đang được bật
Cấu hình Expo
- Có hai plugin
withNoLocation và withStripPermissions
- Được cho là liên quan đến việc loại bỏ dữ liệu vị trí và tước quyền
- OTA update bị vô hiệu hóa, hạ tầng cập nhật Expo vẫn được bao gồm nhưng không hoạt động
Chức năng thực tế của ứng dụng
- Kết quả phân tích chuỗi trong bundle Hermes cho thấy ứng dụng tải nội dung thông qua WordPress REST API của whitehouse.gov
- Các endpoint chính gồm
/wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x và hơn thế nữa
- Trong chuỗi nội bộ của ứng dụng có các nội dung như
"THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov"
- Ngoài ra còn có liên kết
https://www.ice.gov/webform/ice-tip-form được nhúng trực tiếp
- Tổng thể, đây là một cổng nội dung cung cấp tin tức, phát trực tiếp, ảnh, chính sách, feed mạng xã hội và nội dung quảng bá của chính quyền
Script chặn cookie và paywall
- Trong WebView dùng để mở liên kết ngoài, mã chèn JavaScript được thực thi mỗi khi trang tải xong
- Script này ẩn banner cookie, hộp thoại đồng ý GDPR, tường đăng nhập/đăng ký, thành phần upsell·paywall, hộp CMP và tương tự
- Ép áp dụng
body { overflow: auto !important } để mở khóa cuộn trang
- Tiếp tục loại bỏ cả các hộp đồng ý mới được thêm vào bằng MutationObserver
- Kết quả là ứng dụng chính thức của chính phủ Mỹ chèn mã để loại bỏ các thành phần cookie, GDPR và paywall của website bên thứ ba
Hạ tầng theo dõi vị trí
- Dù có plugin
withNoLocation, mã theo dõi vị trí của OneSignal SDK vẫn được tích hợp đầy đủ
- Có ba điều kiện để kích hoạt theo dõi
- Cờ
_isShared được đặt thành true (khi gọi setLocationShared(true))
- Người dùng cho phép quyền vị trí trong lúc chạy
- Thiết bị có nhà cung cấp vị trí (GMS/HMS)
- Khi đủ điều kiện, GPS được yêu cầu theo chu kỳ 4,5 phút (foreground), 9,5 phút (background)
- Dữ liệu thu thập gồm: vĩ độ, kinh độ, độ chính xác, dấu thời gian, trạng thái foreground/background, mức độ chính xác vị trí
- Dữ liệu được đồng bộ lên máy chủ thông qua PropertiesModel của OneSignal
- Có cả dịch vụ nền nên vẫn có thể ghi nhận vị trí khi ứng dụng không hoạt động
- Không thể xác nhận có lời gọi
setLocationShared trong JS bundle hay không, nhưng toàn bộ pipeline đã được biên dịch ở trạng thái có thể kích hoạt
Lập hồ sơ người dùng bằng OneSignal
- Ngoài thông báo đẩy đơn thuần, OneSignal SDK còn thực hiện theo dõi hành vi người dùng và phân khúc hóa
- Các chức năng chính:
addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven v.v.
- Cơ sở dữ liệu cục bộ ghi lại trạng thái nhận, mở và bỏ qua thông báo
- Kết quả là vị trí, tương tác với thông báo, nhấp vào tin nhắn trong ứng dụng, số điện thoại, tag và các thay đổi trạng thái đều được gửi tới máy chủ OneSignal
Rủi ro chuỗi cung ứng: tải mã bên ngoài
-
GitHub Pages
- Thư viện
react-native-youtube-iframe tải HTML từ lonelycpp.github.io
- Nếu tài khoản GitHub này bị xâm nhập, JavaScript tùy ý có thể được thực thi trong WebView của ứng dụng
-
Widget Elfsight
- Nhúng feed mạng xã hội thông qua
platform.js của Elfsight
- Mã SaaS thương mại được thực thi không có sandbox, tồn tại khả năng theo dõi
- Widget ID
4a00611b-befa-466e-bab2-6e824a0a98a9 được hardcode
-
Các dịch vụ bên ngoài khác
- Mailchimp: xử lý đăng ký email (
whitehouse.us10.list-manage.com)
- Uploadcare: lưu trữ ảnh (
ucarecdn.com)
- Truth Social: bao gồm hồ sơ Trump và nút “Follow”
- Facebook: tải iframe plugin trang
- Tất cả đều là dịch vụ thương mại bên ngoài, không phải hạ tầng của chính phủ
Cấu hình bảo mật
- Không có SSL certificate pinning, sử dụng Android TrustManager tiêu chuẩn
- Trong môi trường Wi‑Fi công cộng hoặc proxy, lưu lượng có thể bị lộ khi xảy ra tấn công MITM
Dấu vết còn sót từ môi trường phát triển
- Bản build production vẫn chứa URL và tài nguyên dành cho phát triển
- Có chuỗi
localhost và IP của nhà phát triển (10.4.4.109)
- Bao gồm Expo development client (
expo-dev-client, expo-devlauncher, expo-devmenu)
- Có tài nguyên
dev_menu_fab_icon.png
- Compose
PreviewActivity được export trong manifest
Cấu trúc quyền
- AndroidManifest ngoài các quyền thông thường liên quan đến thông báo còn bao gồm nhiều quyền badge launcher (Samsung, HTC, Sony v.v.)
- Trong chuỗi yêu cầu runtime có các quyền vị trí chính xác, vị trí gần đúng, vị trí nền
- Mô tả trên Google Play cũng nêu các quyền sau
- “sửa/xóa bộ nhớ dùng chung”, “chạy foreground service”, “hiển thị đè lên ứng dụng khác”, “chạy khi khởi động”, “sử dụng phần cứng vân tay/sinh trắc học”
- Cấu hình FileProvider mở lộ toàn bộ gốc bộ nhớ ngoài, được dùng cho truy cập tệp từ WebView
Danh sách SDK được tích hợp
- Bao gồm hơn 68 thư viện
- Framework: React Native, Expo SDK 54, Hermes
- Push/tương tác: OneSignal, Firebase Cloud Messaging, Firebase Installations
- Phân tích/telemetry: Firebase Analytics, Google Data Transport, OpenTelemetry
- Mạng: OkHttp3, Apollo GraphQL, Okio
- Hình ảnh: Fresco, Glide, Coil 3, Uploadcare CDN
- Video: ExoPlayer(Media3), Expo Video
- ML: Google ML Kit Vision (quét mã vạch), mô hình Barhopper
- Mật mã: Bouncy Castle
- Lưu trữ: Expo Secure Store, React Native Async Storage
- WebView: React Native WebView (bao gồm script chèn)
- DI: Koin
- Tuần tự hóa: GSON, Wire (Protocol Buffers)
- Xác minh giấy phép: PairIP (dùng để xác nhận Google Play)
- Bản build arm64 bao gồm 25 thư viện native
.so
1 bình luận
Ý kiến trên Hacker News
Nội dung bài báo trông giống như do AI viết, nên tôi hơi nghi ngờ
Vì tò mò, tôi đã tự cài ứng dụng để kiểm tra, nhưng trái với những gì bài báo khẳng định, hoàn toàn không có yêu cầu quyền vị trí
Tôi đã dùng Claude Code để decompile APK, nhưng công cụ này khá yếu trong phân tích khả năng truy vết hoặc hiểu các luồng điều khiển phức tạp
Nó cũng coi cả dead code không được gọi tới như thể là các hàm đang được sử dụng thực sự, dễ gây hiểu lầm
Muốn yêu cầu vị trí lúc chạy thì bắt buộc phải khai báo trước, nhưng ở đây không có phần đó
Trên điện thoại của tôi (có thể là do Graphene), Play chặn cài đặt nên tôi không trực tiếp kiểm tra APK được
Nếu xem mục “Thông tin → Quyền” trên Play Store thì bản 47.0.1 chỉ có các quyền thông thường như truy cập mạng, điều khiển rung, hiển thị thông báo
Có lẽ đây là trường hợp rollout theo phiên bản hoặc nhắm mục tiêu theo từng thiết bị
Cá nhân tôi thì không thấy vậy
Trên iPhone App Store, bản 47.0.1 được đăng lên cách đây 34 phút và ghi là “sửa lỗi nhỏ”
Có thể phần sửa đó đã bao gồm mã liên quan đến vị trí
Trông giống một ứng dụng marketing của công ty tư vấn điển hình
Có vẻ như bên phát triển thuê ngoài dùng kiến trúc chuẩn, nên những thứ như mã theo dõi vị trí được đưa vào mặc định
Đây chỉ là nền tảng cho push notification, nên nếu ứng dụng không tự yêu cầu quyền thì sẽ không có gì xảy ra
Có vẻ họ đã giành được hợp đồng hỗ trợ liên quan đến Nhà Trắng (khoảng 1,5 triệu USD) và làm ra ứng dụng này
Giờ thì gần như đã bị giải thể và đổi thành tổ chức DOGE, lại còn đang vướng vào nhiều vụ kiện
Bài viết Wikipedia về United States Digital Service
Vì thế có vẻ vẫn còn sót lại dấu vết được tái sử dụng từ các ứng dụng khác
Tôi nghi ngờ liệu có được phép dùng tên miền .gov cho mục đích quảng bá thương mại hay không
Nếu nội dung bài báo là thật, thì đây sẽ là một sự việc mang ý nghĩa như cái chết mang tính biểu tượng của tự do
Cảm giác như những giá trị mà nước Mỹ từng tự hào đang biến mất
Việc một ứng dụng chính thức của chính phủ chèn CSS và JavaScript vào các website bên thứ ba để gỡ banner cookie hoặc paywall thật đáng ngạc nhiên
Tôi sẽ không cài một ứng dụng chính phủ không minh bạch như vậy, nhưng bản thân tính năng này thì tôi lại thấy tích cực theo kiểu uBlock
Trang web chậm đến mức gần như không dùng được
Trên MacBook Pro 2019 của tôi với Chrome, cuộn bị giật rất nặng
Trớ trêu là một bài báo chỉ trích phát triển web lại gặp đúng vấn đề hiệu năng web như thế này
Chỉ trích rằng không có certificate pinning có vẻ hơi cường điệu
Dù ở trong một mạng có thể bị MITM, nếu thiết bị của tôi không tin CA đó thì cùng lắm chỉ phát sinh lỗi TLS
Ví dụ, có thể tưởng tượng tình huống chặn lưu lượng ở một quán cà phê gần đại sứ quán của một quốc gia nơi giám sát là chuyện thường ngày
Những việc như vậy hiếm thật, nhưng không phải là hoàn toàn bất khả thi
Trang này nặng đến mức trình duyệt gần như treo máy
Tôi chỉ đọc nổi nhờ chế độ reader mode
Ban đầu tôi tưởng là do máy tính bảng của mình, nhưng thấy người khác cũng vậy thì khá thú vị
Khi cuộn trang, tải lên GPU rất nặng nên mức sử dụng tài nguyên đồ họa cao
Dạo này Nhà Trắng có vẻ xem vi phạm pháp luật là chuyện thường ngày
Ngay từ đầu tôi đã mặc định đây là malware, và đúng là dự đoán đó đã chính xác