1 puntos por GN⁺ 2026-03-29 | 1 comentarios | Compartir por WhatsApp
  • La app oficial de la Casa Blanca, basada en React Native, usa un backend de WordPress junto con Expo SDK 54 y el motor Hermes, y funciona como un portal que ofrece contenido de noticias, fotos y políticas
  • Todas las WebView incluyen código de inyección de JavaScript que elimina automáticamente banners de cookies, ventanas de consentimiento GDPR y elementos de paywall
  • La infraestructura de rastreo de ubicación y perfilado de usuarios mediante el SDK de OneSignal está incluida por completo, con capacidad de recopilar datos GPS en intervalos de 4.5 a 9.5 minutos
  • La app carga servicios comerciales externos como GitHub Pages, Elfsight, Mailchimp, Uploadcare y Truth Social, lo que implica riesgos de cadena de suministro y posibilidades de rastreo
  • Debido a la ausencia de SSL pinning, la inclusión de recursos de desarrollo y la posibilidad de ejecutar código externo, se plantean preocupaciones de seguridad y privacidad impropias de una app oficial del gobierno

Resumen de la app

  • La app oficial de la Casa Blanca es una aplicación basada en React Native publicada en App Store y Google Play
    • Usa Expo SDK 54 y el motor JavaScript Hermes
    • El backend tiene una estructura de API REST personalizada basada en WordPress
    • Según la configuración de Expo, la entidad responsable figura como “forty-five-press”
  • La lógica de la app está compilada en un bundle de bytecode Hermes de 5.5 MB, mientras que el código nativo funciona como un simple wrapper
  • La versión es 47.0.1, build 20, con Hermes y New Architecture activados

Configuración de Expo

  • Incluye dos plugins: withNoLocation y withStripPermissions
    • Se presume que están relacionados con la eliminación de ubicación y el recorte de permisos
  • Las actualizaciones OTA están desactivadas; la infraestructura de actualizaciones de Expo está incluida, pero no funciona

Funcionalidad real de la app

  • Según el análisis de cadenas del bundle Hermes, la app carga contenido a través de la API REST de WordPress de whitehouse.gov
    • Los endpoints principales son /wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x, entre otros
  • Entre las cadenas dentro de la app aparecen "THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov"
  • También incluye directamente el enlace https://www.ice.gov/webform/ice-tip-form
  • En conjunto, funciona como un portal que ofrece noticias, transmisiones en vivo, fotos, políticas, feeds sociales y contenido de promoción de la administración

Script para bloquear cookies y paywalls

  • En la WebView que abre enlaces externos se ejecuta código de inyección de JavaScript en cada carga de página
    • Este script oculta banners de cookies, ventanas de consentimiento GDPR, muros de login/registro, elementos de upsell o paywall y cajas CMP
    • Fuerza body { overflow: auto !important } para desbloquear el scroll
    • Mediante MutationObserver, también elimina de forma continua los cuadros de consentimiento que se agregan después
  • Como resultado, la estructura inyecta código para que una app oficial del gobierno de EE. UU. elimine elementos de cookies, GDPR y paywalls de sitios web de terceros

Infraestructura de rastreo de ubicación

  • A pesar de incluir el plugin withNoLocation, el código de rastreo de ubicación del SDK de OneSignal está completamente incluido
    • Hay tres condiciones para activar el rastreo:
      1. Que el flag _isShared esté en true (al llamar setLocationShared(true))
      2. Que el usuario otorgue permisos de ubicación en tiempo de ejecución
      3. Que el dispositivo cuente con un proveedor de ubicación (GMS/HMS)
    • Si se cumplen las condiciones, solicita GPS cada 4.5 minutos (en primer plano) y 9.5 minutos (en segundo plano)
    • Datos recopilados: latitud, longitud, precisión, marca de tiempo, si estaba en foreground/background y nivel de precisión de ubicación
    • Los datos se sincronizan con el servidor a través del PropertiesModel de OneSignal
    • También se incluye un servicio en segundo plano, por lo que puede capturar ubicación incluso cuando la app está inactiva
  • No se pudo confirmar dentro del bundle JS si se llama a setLocationShared, pero todo el pipeline fue compilado en un estado que permite activarlo

Perfilado de usuarios con OneSignal

  • El SDK de OneSignal, además de las simples notificaciones push, realiza rastreo de comportamiento y segmentación de usuarios
    • Funciones principales: addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven
    • La base de datos local registra si las notificaciones fueron recibidas, abiertas o ignoradas
  • En consecuencia, datos como ubicación, interacciones con notificaciones, clics en mensajes dentro de la app, números telefónicos, tags y cambios de estado se envían a los servidores de OneSignal

Riesgo de cadena de suministro: carga de código externo

  • GitHub Pages

    • La librería react-native-youtube-iframe carga HTML desde lonelycpp.github.io
    • Si esa cuenta de GitHub fuera comprometida, JavaScript arbitrario podría ejecutarse dentro de la WebView de la app
  • Widget de Elfsight

    • Se incrustan feeds sociales mediante platform.js de Elfsight
    • Código SaaS comercial se ejecuta sin sandboxing, con posibilidad de rastreo
    • El ID del widget 4a00611b-befa-466e-bab2-6e824a0a98a9 está hardcodeado
  • Otros servicios externos

    • Mailchimp: gestión de suscripciones por correo (whitehouse.us10.list-manage.com)
    • Uploadcare: hosting de imágenes (ucarecdn.com)
    • Truth Social: incluye el perfil de Trump y el botón “Follow”
    • Facebook: carga un iframe del plugin de página
    • Todos ellos son servicios comerciales externos, no infraestructura gubernamental

Configuración de seguridad

  • No hay SSL certificate pinning; se usa el TrustManager estándar de Android
    • En redes Wi‑Fi públicas o entornos con proxy, el tráfico podría quedar expuesto ante ataques MITM

Restos de desarrollo

  • El build de producción incluye URL y recursos de desarrollo
    • Aparecen cadenas de localhost y de la IP del desarrollador (10.4.4.109)
    • Se incluyen Expo development clients (expo-dev-client, expo-devlauncher, expo-devmenu)
    • Existe el recurso dev_menu_fab_icon.png
    • Compose PreviewActivity está incluido en el manifiesto con estado exportado

Estructura de permisos

  • El AndroidManifest incluye, además de permisos normales centrados en notificaciones, múltiples permisos de badges del launcher (Samsung, HTC, Sony, etc.)
  • En las cadenas de solicitud en tiempo de ejecución aparecen permisos de ubicación precisa, ubicación aproximada y ubicación en segundo plano
  • La descripción en Google Play también indica los siguientes permisos:
    • “modificar/eliminar almacenamiento compartido”, “ejecutar servicios en primer plano”, “mostrar sobre otras apps”, “ejecutarse al iniciar” y “usar hardware de huella digital/biometría”
  • La configuración de FileProvider expone toda la raíz del almacenamiento externo, y se usa para acceso a archivos desde WebView

Lista de SDK incluidos

  • Se incluyen más de 68 librerías en total
    • Frameworks: React Native, Expo SDK 54, Hermes
    • Push/engagement: OneSignal, Firebase Cloud Messaging, Firebase Installations
    • Analítica/telemetría: Firebase Analytics, Google Data Transport, OpenTelemetry
    • Networking: OkHttp3, Apollo GraphQL, Okio
    • Imágenes: Fresco, Glide, Coil 3, Uploadcare CDN
    • Video: ExoPlayer (Media3), Expo Video
    • ML: Google ML Kit Vision (escaneo de códigos de barras), modelo Barhopper
    • Criptografía: Bouncy Castle
    • Almacenamiento: Expo Secure Store, React Native Async Storage
    • WebView: React Native WebView (con scripts inyectados)
    • DI: Koin
    • Serialización: GSON, Wire (Protocol Buffers)
    • Verificación de licencias: PairIP (para verificación de Google Play)
  • El build arm64 incluye 25 librerías nativas .so

1 comentarios

 
GN⁺ 2026-03-29
Opiniones de Hacker News
  • El artículo parecía como si lo hubiera escrito una IA, así que me generó cierta desconfianza
    Por curiosidad instalé la app yo mismo, pero a diferencia de lo que afirmaba el artículo, no pedía permisos de ubicación en absoluto
    La decompilé con Claude Code, pero esta herramienta es débil para el análisis de alcanzabilidad o para entender flujos de control complejos
    Trata código muerto no invocado como si fueran funciones realmente usadas, lo que puede llevar a confusión

    • En la lista de permisos mostrada en el artículo tampoco aparecía ningún permiso de ubicación
      Para pedir ubicación en tiempo de ejecución, necesariamente tendría que estar declarado, y esa parte no estaba
      En mi teléfono (quizá por Graphene) Play bloqueó la instalación, así que no pude verificar directamente el APK
      Si miras la sección “Información → Permisos” en Play Store, la versión 47.0.1 solo tiene permisos comunes como acceso a red, control de vibración y mostrar notificaciones
      Probablemente se trate de un despliegue por versiones o de segmentación por dispositivo
    • Me pregunto si hay alguna base concreta para decir que “parece escrito por IA”
      A mí no me dio esa impresión
    • El artículo no decía que la app solicitara permiso de ubicación, sino que explicaba que con una sola línea de JS se puede obtener la ubicación
    • ¿Será que la versión de la app es distinta?
      En la App Store de iPhone, la versión 47.0.1 apareció hace 34 minutos y figura como “correcciones menores de errores”
      Quizá esa actualización incluía código relacionado con ubicación
    • Me pregunto si durante la decompilación la app pudo haber mostrado información engañosa
  • Parecía la típica app de marketing de una consultora
    Da la impresión de que un desarrollador tercerizado usó una arquitectura estándar y que código como el de rastreo de ubicación venía incluido por defecto

    • El código de rastreo de ubicación venía dentro del SDK de OneSignal
      Eso es solo una plataforma para notificaciones push, así que no pasa nada a menos que la app pida el permiso directamente
    • 45Press es ese tipo de empresa
      Parece que consiguieron un contrato de soporte relacionado con la Casa Blanca (de unos 1.5 millones de dólares) y con eso hicieron esta app
    • Es una pena que ya no siga existiendo algo como el US Digital Service, porque ellos sí podrían haber hecho esto bien
      Ahora está prácticamente desmantelado, transformado en una organización llamada DOGE, y envuelto en varios litigios
      Artículo de Wikipedia sobre United States Digital Service
    • r8 no entiende bien el código de React Native, así que no hace correctamente la eliminación de código muerto (tree shaking)
      Por eso parecen haber quedado rastros reutilizados de otras apps
    • Me sorprendió ver la frase “Visit TrumpRx.gov”
      Me pregunto si realmente se puede usar un dominio .gov para promoción comercial
  • Si lo que dice el artículo es cierto, esto sería un hecho que marcaría el fin simbólico de la libertad
    Da la sensación de que se están perdiendo los valores de los que Estados Unidos se enorgullecía

  • Me sorprende que una app oficial del gobierno inyecte CSS y JavaScript en sitios web de terceros para quitar banners de cookies o paywalls
    Yo no instalaría una app gubernamental cerrada, pero la función en sí me parece positiva, como uBlock

  • El sitio era tan lento que casi no se podía usar
    En mi MacBook Pro 2019 con Chrome, el desplazamiento se trababa muchísimo

    • En Firefox 149 (Windows 10) también iba fatal al hacer scroll
      Irónicamente, un artículo que critica el desarrollo web muestra este tipo de problemas de rendimiento web
    • En Firefox móvil (151.0a1) también se trababa tanto al desplazarse que costaba leerlo
    • En un ThinkPad + Chrome pasó exactamente lo mismo
    • Coincido en que la calidad web del sitio original es pésima
    • En Android 14 + Firefox 148.0.2 funcionó normalmente
  • La crítica por la ausencia de pinning de certificados me parece un poco exagerada
    Aunque estés en una red donde sea posible un ataque MITM, si mi dispositivo no confía en esa CA, igual solo aparecerá un error TLS

    • Pero la cosa cambia si alguien logra emitir un certificado firmado por una CA en la que mi teléfono sí confía
      Por ejemplo, uno podría imaginar interceptación de tráfico en una cafetería cerca de una embajada en algún país donde la vigilancia es algo cotidiano
      Es raro, pero no es completamente imposible
    • En organizaciones que usan MDM hay excepciones, porque pueden empujar su propia CA a los dispositivos
    • Toda esta discusión ya se basa en prácticas de seguridad anticuadas, así que hoy en día tiene poca relevancia
  • Este sitio es tan pesado que hace que el navegador casi se congele
    Solo pude leerlo en modo lector

    • A mí me pasó lo mismo
      Pensé que era problema de mi tablet, pero me parece interesante que a otras personas también les ocurra
  • Al hacer scroll, la carga sobre la GPU es alta, así que el uso de recursos gráficos también lo es

  • Últimamente en la Casa Blanca parece que violar la ley se ha vuelto algo cotidiano

  • Desde el principio asumí que sería malware, y resultó que esa sospecha era correcta