1 poin oleh GN⁺ 24 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • Aplikasi resmi Gedung Putih berbasis React Native menggunakan backend WordPress, Expo SDK 54, dan mesin Hermes, serta berfungsi sebagai portal yang menyediakan konten seperti berita, foto, dan kebijakan
  • Semua WebView menyertakan kode injeksi JavaScript yang secara otomatis menghapus banner cookie, jendela persetujuan GDPR, elemen paywall, dan sejenisnya
  • Fitur pelacakan lokasi dan profiling pengguna melalui OneSignal SDK disertakan secara lengkap, dan dapat mengumpulkan data GPS dengan interval 4,5 hingga 9,5 menit
  • Aplikasi memuat layanan komersial eksternal seperti GitHub Pages, Elfsight, Mailchimp, Uploadcare, Truth Social sehingga memunculkan risiko supply chain dan kemungkinan pelacakan
  • Tidak ada SSL pinning, ada resource pengembangan yang ikut dibundel, serta ada kemungkinan eksekusi kode eksternal, sehingga muncul kekhawatiran dari sisi keamanan dan privasi untuk aplikasi resmi pemerintah

Gambaran aplikasi

  • Aplikasi resmi White House adalah aplikasi berbasis React Native yang dirilis di App Store dan Google Play
    • Menggunakan Expo SDK 54 dan mesin JavaScript Hermes
    • Backend menggunakan struktur custom REST API berbasis WordPress
    • Menurut konfigurasi Expo, pembuatnya ditandai sebagai “forty-five-press”
  • Logika aplikasi dikompilasi menjadi bundel bytecode Hermes berukuran 5,5MB, sementara kode native hanya berupa wrapper sederhana
  • Versinya 47.0.1, build 20, dengan Hermes dan New Architecture dalam keadaan aktif

Konfigurasi Expo

  • Terdapat dua plugin, withNoLocation dan withStripPermissions
    • Diduga terkait penghapusan informasi lokasi dan stripping permission
  • Pembaruan OTA dinonaktifkan, meski infrastruktur pembaruan Expo disertakan namun tidak berjalan

Fungsi nyata aplikasi

  • Berdasarkan analisis string pada bundel Hermes, aplikasi memuat konten melalui WordPress REST API milik whitehouse.gov
    • Endpoint utamanya mencakup /wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x, dan lainnya
  • String di dalam aplikasi mencakup "THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov", dan lainnya
  • Tautan https://www.ice.gov/webform/ice-tip-form juga disertakan secara langsung
  • Secara keseluruhan, aplikasi berbentuk portal yang menyediakan berita, siaran langsung, foto, kebijakan, feed sosial, dan konten promosi pemerintahan

Skrip pemblokir cookie dan paywall

  • Pada WebView yang membuka tautan eksternal, kode injeksi JavaScript dijalankan setiap kali halaman dimuat
    • Skrip ini menyembunyikan banner cookie, jendela persetujuan GDPR, dinding login/registrasi, elemen upsell dan paywall, serta kotak CMP
    • Juga memaksa body { overflow: auto !important } untuk membuka kunci scroll
    • Dengan MutationObserver, jendela persetujuan yang baru ditambahkan juga terus dihapus
  • Hasilnya, aplikasi resmi pemerintah AS memiliki struktur yang menyuntikkan kode untuk menghapus elemen cookie, GDPR, dan paywall dari situs web pihak ketiga

Infrastruktur pelacakan lokasi

  • Meski plugin withNoLocation ada, kode pelacakan lokasi OneSignal SDK tetap disertakan sepenuhnya
    • Ada tiga syarat untuk mengaktifkan pelacakan
      1. Flag _isShared disetel ke true (saat setLocationShared(true) dipanggil)
      2. Pengguna mengizinkan permission lokasi saat runtime
      3. Perangkat memiliki penyedia lokasi (GMS/HMS)
    • Jika syarat terpenuhi, permintaan GPS dilakukan tiap 4,5 menit (foreground) dan 9,5 menit (background)
    • Data yang dikumpulkan: lintang, bujur, akurasi, timestamp, status foreground/background, dan presisi lokasi
    • Data disinkronkan ke server melalui PropertiesModel milik OneSignal
    • Layanan background juga disertakan, sehingga lokasi bisa ditangkap saat aplikasi tidak aktif
  • Tidak dapat dipastikan apakah setLocationShared dipanggil dalam bundel JS, tetapi seluruh pipeline dikompilasi dalam keadaan siap diaktifkan

Profiling pengguna OneSignal

  • OneSignal SDK bukan hanya untuk push notification, tetapi juga menjalankan pelacakan perilaku pengguna dan segmentasi
    • Fungsi utama meliputi addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven, dan lainnya
    • DB lokal mencatat apakah notifikasi diterima, dibuka, atau diabaikan
  • Akibatnya, lokasi, interaksi notifikasi, klik pesan in-app, nomor telepon, tag, dan perubahan status dapat dikirim ke server OneSignal

Risiko supply chain: pemuatan kode eksternal

  • GitHub Pages

    • Library react-native-youtube-iframe memuat HTML dari lonelycpp.github.io
    • Jika akun GitHub tersebut disusupi, JavaScript arbitrer dapat dijalankan di dalam WebView aplikasi
  • Widget Elfsight

    • Feed sosial di-embed melalui platform.js milik Elfsight
    • Kode SaaS komersial berjalan tanpa sandboxing, sehingga ada kemungkinan pelacakan
    • ID widget 4a00611b-befa-466e-bab2-6e824a0a98a9 di-hardcode
  • Layanan eksternal lain

    • Mailchimp: pemrosesan langganan email (whitehouse.us10.list-manage.com)
    • Uploadcare: hosting gambar (ucarecdn.com)
    • Truth Social: menyertakan profil Trump dan tombol “Follow”
    • Facebook: memuat iframe plugin halaman
    • Semua ini adalah layanan komersial eksternal, bukan infrastruktur pemerintah

Pengaturan keamanan

  • Tidak ada SSL certificate pinning, menggunakan Android TrustManager standar
    • Di Wi‑Fi publik atau lingkungan proxy, trafik bisa terekspos saat terjadi serangan MITM

Sisa artefak pengembangan

  • Build produksi menyertakan URL dan resource untuk pengembangan
    • Terdapat string localhost dan IP developer (10.4.4.109)
    • Expo development client (expo-dev-client, expo-devlauncher, expo-devmenu) ikut disertakan
    • Ada resource dev_menu_fab_icon.png
    • Compose PreviewActivity disertakan dalam manifest dengan status export

Struktur permission

  • AndroidManifest, selain permission umum terkait notifikasi, juga menyertakan banyak permission badge launcher untuk Samsung, HTC, Sony, dan lainnya
  • Dalam string permintaan runtime, ada permission lokasi presisi, lokasi perkiraan, dan lokasi background
  • Deskripsi di Google Play juga mencantumkan permission berikut
    • “memodifikasi/menghapus penyimpanan bersama”, “menjalankan foreground service”, “tampil di atas aplikasi lain”, “berjalan saat boot”, “menggunakan hardware sidik jari/biometrik”
  • Konfigurasi FileProvider mengekspos seluruh root penyimpanan eksternal, dan digunakan untuk akses file WebView

Daftar SDK yang disertakan

  • Total ada lebih dari 68 library
    • Framework: React Native, Expo SDK 54, Hermes
    • Push/engagement: OneSignal, Firebase Cloud Messaging, Firebase Installations
    • Analitik/telemetri: Firebase Analytics, Google Data Transport, OpenTelemetry
    • Networking: OkHttp3, Apollo GraphQL, Okio
    • Gambar: Fresco, Glide, Coil 3, Uploadcare CDN
    • Video: ExoPlayer(Media3), Expo Video
    • ML: Google ML Kit Vision (pemindaian barcode), model Barhopper
    • Kriptografi: Bouncy Castle
    • Penyimpanan: Expo Secure Store, React Native Async Storage
    • WebView: React Native WebView (termasuk skrip injeksi)
    • DI: Koin
    • Serialisasi: GSON, Wire (Protocol Buffers)
    • Verifikasi lisensi: PairIP (untuk verifikasi Google Play)
  • Build arm64 menyertakan 25 library native .so

1 komentar

 
GN⁺ 24 hari lalu
Komentar Hacker News
  • Isi artikelnya terlihat seperti ditulis AI, jadi agak terasa mencurigakan
    Karena penasaran, aku langsung memasang aplikasinya sendiri, tetapi berbeda dengan klaim artikel, sama sekali tidak ada permintaan izin lokasi
    Aku mencoba mendekompilasi APK dengan Claude Code, tetapi alat ini lemah dalam analisis keterjangkauan maupun memahami alur kontrol yang kompleks
    Kode mati yang tidak pernah dipanggil pun diperlakukan seolah fungsi yang benar-benar digunakan, sehingga menimbulkan salah paham

    • Bahkan di daftar izin yang ada di artikel pun tidak ada izin lokasi
      Untuk meminta lokasi saat runtime, deklarasinya wajib ada, dan bagian itu tidak ditemukan
      Di ponselku (mungkin karena Graphene), Play memblokir pemasangan, jadi aku tidak bisa memeriksa APK secara langsung
      Jika melihat bagian “Info → Izin” di Play Store, versi 47.0.1 hanya memiliki izin umum seperti akses jaringan, kontrol getaran, dan menampilkan notifikasi
      Mungkin ini kasus rollout versi atau penargetan per perangkat
    • Aku penasaran apakah ada dasar yang spesifik untuk mengatakan “terasa seperti ditulis AI”
      Aku sendiri tidak merasa begitu
    • Artikelnya tidak mengatakan aplikasi itu meminta izin lokasi, melainkan menjelaskan bahwa lokasi bisa diambil hanya dengan satu baris JS
    • Mungkin versi aplikasinya berbeda?
      Di iPhone App Store, versi 47.0.1 diunggah 34 menit lalu dan tertulis “perbaikan bug minor”
      Bisa jadi perbaikan itu menyertakan kode terkait lokasi
    • Aku penasaran apakah selama proses dekompilasi, aplikasi itu mungkin menampilkan informasi palsu
  • Ini terlihat seperti aplikasi pemasaran khas perusahaan konsultan
    Sepertinya pengembang vendor memakai arsitektur standar, dan kode seperti pelacakan lokasi ikut terbawa secara default

    • Kode pelacakan lokasi itu ada di dalam OneSignal SDK
      Ini cuma platform untuk push notification, jadi kalau aplikasinya sendiri tidak meminta izin, tidak akan terjadi apa-apa
    • 45Press memang perusahaan seperti itu
      Mereka tampaknya mendapatkan kontrak dukungan terkait Gedung Putih (sekitar 1,5 juta dolar) dan lalu membuat aplikasi semacam ini
    • Sayang sekali kalau US Digital Service yang dulu masih ada, mereka mungkin bisa membuat hal seperti ini dengan benar
      Sekarang lembaga itu nyaris dibubarkan, berubah menjadi organisasi bernama DOGE, dan sedang terseret berbagai gugatan
      Artikel wiki United States Digital Service
    • r8 tidak benar-benar memahami kode React Native, sehingga penghapusan kode mati (tree shaking) tidak berjalan dengan baik
      Karena itu, jejak kode yang dipakai ulang dari aplikasi lain tampaknya masih tertinggal
    • Aku kaget melihat tulisan “Visit TrumpRx.gov”
      Aku ragu domain .gov boleh dipakai untuk promosi komersial
  • Jika isi artikel itu benar, ini akan menjadi peristiwa yang menandai akhir simbolis kebebasan
    Rasanya nilai-nilai yang selama ini dibanggakan Amerika sedang menghilang

  • Cukup mengejutkan bahwa aplikasi resmi pemerintah menyisipkan CSS dan JavaScript ke situs pihak ketiga untuk menghapus banner cookie atau paywall
    Aku sendiri tidak akan memasang aplikasi pemerintah tertutup, tetapi fungsinya tampak positif seperti uBlock

  • Situsnya terlalu lambat sampai nyaris tidak bisa dipakai
    Di lingkungan MacBook Pro 2019 + Chrome milikku, scrolling patah-patah parah

    • Di Firefox 149 (Windows 10) scrolling-nya juga berantakan
      Ironisnya, artikel yang mengkritik pengembangan web justru menunjukkan masalah performa web seperti ini
    • Di Firefox mobile (151.0a1) juga scrolling sangat tersendat, sampai sulit dibaca
    • Di ThinkPad + Chrome juga terjadi hal yang sama
    • Aku setuju bahwa kualitas web situs sumbernya sangat buruk
    • Di Android 14 + Firefox 148.0.2 justru berjalan normal
  • Kritik soal tidak adanya certificate pinning terasa agak berlebihan
    Sekalipun berada di jaringan yang memungkinkan serangan MITM, kalau perangkatku tidak memercayai CA itu, yang muncul hanya error TLS

    • Tetapi ceritanya berbeda jika seseorang bisa memperoleh sertifikat yang ditandatangani CA yang dipercaya ponselku
      Misalnya, bisa dibayangkan trafik dicegat di kafe dekat kedutaan di negara tertentu yang pengawasannya sudah menjadi hal biasa
      Kasus seperti ini jarang, tetapi bukan berarti mustahil sama sekali
    • Organisasi yang memakai MDM bisa mendorong CA mereka sendiri ke perangkat, jadi itu menjadi pengecualian
    • Perdebatan ini sendiri sudah didasarkan pada praktik keamanan usang, jadi saat ini tidak terlalu bermakna
  • Situs ini sangat berat sampai browser nyaris membeku
    Aku hanya bisa membacanya lewat mode pembaca

    • Aku juga mengalami hal yang sama
      Tadinya kukira masalahnya ada di tabletku, tetapi menarik juga ternyata orang lain mengalami hal serupa
  • Saat scrolling, beban GPU sangat tinggi sehingga penggunaan resource grafis juga besar

  • Belakangan ini Gedung Putih terasa seperti menjadikan pelanggaran hukum sebagai hal sehari-hari

  • Sejak awal aku menganggap ini pasti malware, dan ternyata dugaanku benar