1 points par GN⁺ 2026-03-29 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • L’application officielle de la Maison-Blanche, basée sur React Native, utilise un backend WordPress, Expo SDK 54 et le moteur Hermes, et se présente comme un portail de contenus pour les actualités, photos et politiques publiques
  • Tous les WebView incluent du code d’injection JavaScript qui supprime automatiquement les bannières de cookies, fenêtres de consentement GDPR et éléments de paywall
  • Des fonctions de suivi de localisation et de profilage utilisateur via le SDK OneSignal sont intégralement incluses, avec possibilité de collecte des données GPS toutes les 4,5 à 9,5 minutes
  • L’application charge des services commerciaux externes comme GitHub Pages, Elfsight, Mailchimp, Uploadcare, Truth Social, ce qui implique des risques de supply chain et de traçage
  • L’absence de SSL pinning, la présence de ressources de développement et la possibilité d’exécuter du code externe soulèvent des inquiétudes en matière de sécurité et de confidentialité pour une application officielle du gouvernement

Vue d’ensemble de l’application

  • L’application officielle White House est une application basée sur React Native, publiée sur l’App Store et Google Play
    • Elle utilise Expo SDK 54 et le moteur JavaScript Hermes
    • Le backend repose sur WordPress avec une structure d’API REST personnalisée
    • Selon la configuration Expo, l’auteur indiqué est « forty-five-press »
  • La logique de l’application est compilée dans un bundle de bytecode Hermes de 5,5 Mo, tandis que le code natif sert de simple wrapper
  • Version 47.0.1, build 20, avec Hermes et la New Architecture activés

Configuration Expo

  • Deux plugins sont inclus : withNoLocation et withStripPermissions
    • Ils semblent liés à la suppression de la localisation et au retrait de permissions
  • Les mises à jour OTA sont désactivées ; l’infrastructure de mise à jour Expo est incluse mais non fonctionnelle

Fonctionnement réel de l’application

  • L’analyse des chaînes du bundle Hermes montre que l’application charge le contenu via l’API REST WordPress de whitehouse.gov
    • Principaux endpoints : /wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x etc.
  • Les chaînes présentes dans l’application incluent "THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov"
  • Le lien https://www.ice.gov/webform/ice-tip-form est également inclus directement
  • Dans l’ensemble, l’application prend la forme d’un portail proposant actualités, direct, photos, politiques publiques, flux sociaux et contenus de promotion de l’administration

Script de blocage des cookies et paywalls

  • Dans les WebView qui ouvrent des liens externes, du code JavaScript injecté est exécuté à chaque chargement de page
    • Ce script masque les bannières de cookies, fenêtres de consentement GDPR, murs de connexion/inscription, éléments d’upsell et de paywall, boîtes CMP, etc.
    • Il force body { overflow: auto !important } pour réactiver le défilement
    • Il utilise MutationObserver pour supprimer en continu les nouvelles fenêtres de consentement ajoutées dynamiquement
  • Il en résulte une architecture dans laquelle une application officielle du gouvernement américain injecte du code supprimant les éléments cookies/GDPR/paywall de sites tiers

Infrastructure de suivi de localisation

  • Malgré la présence du plugin withNoLocation, le code de suivi de localisation du SDK OneSignal est intégralement inclus
    • Trois conditions activent le suivi :
      1. le flag _isShared est défini sur true (lors d’un appel à setLocationShared(true))
      2. l’utilisateur autorise la permission de localisation à l’exécution
      3. un fournisseur de localisation (GMS/HMS) est présent sur l’appareil
    • Si ces conditions sont remplies, des requêtes GPS sont faites toutes les 4,5 minutes (premier plan) et 9,5 minutes (arrière-plan)
    • Données collectées : latitude, longitude, précision, horodatage, état premier plan/arrière-plan, niveau de précision
    • Les données sont synchronisées avec le serveur via le PropertiesModel de OneSignal
    • Un service d’arrière-plan est également inclus, permettant de capturer la position même lorsque l’application est inactive
  • L’analyse du bundle JS ne permet pas de confirmer la présence d’un appel à setLocationShared, mais tout le pipeline a été compilé dans un état activable

Profilage utilisateur via OneSignal

  • Le SDK OneSignal ne se limite pas aux notifications push : il assure aussi des fonctions de suivi comportemental et de segmentation utilisateur
    • Principales fonctions : addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven, etc.
    • La base de données locale enregistre la réception, l’ouverture et l’ignorance des notifications
  • En conséquence, la localisation, les interactions avec les notifications, les clics sur messages in-app, le numéro de téléphone, les tags et les changements d’état sont transmis aux serveurs de OneSignal

Risques de supply chain : chargement de code externe

  • GitHub Pages

    • La bibliothèque react-native-youtube-iframe charge du HTML depuis lonelycpp.github.io
    • Si ce compte GitHub est compromis, du JavaScript arbitraire peut être exécuté dans le WebView de l’application
  • Widget Elfsight

    • Des flux sociaux sont intégrés via platform.js d’Elfsight
    • Ce code SaaS commercial s’exécute sans sandboxing, avec un risque de traçage
    • L’ID de widget 4a00611b-befa-466e-bab2-6e824a0a98a9 est codé en dur
  • Autres services externes

    • Mailchimp : gestion de l’abonnement e-mail (whitehouse.us10.list-manage.com)
    • Uploadcare : hébergement d’images (ucarecdn.com)
    • Truth Social : profil Trump et bouton « Follow » inclus
    • Facebook : chargement d’un iframe de plugin de page
    • Tous sont des services commerciaux externes, hors infrastructure gouvernementale

Configuration de sécurité

  • Aucun SSL certificate pinning, usage du TrustManager Android standard
    • En Wi‑Fi public ou via un proxy, une attaque MITM peut exposer le trafic

Résidus de développement

  • Des URL et ressources de développement sont présentes dans la build de production
    • Présence de chaînes localhost et d’une IP développeur (10.4.4.109)
    • Le client de développement Expo (expo-dev-client, expo-devlauncher, expo-devmenu) est inclus
    • La ressource dev_menu_fab_icon.png est présente
    • Une Compose PreviewActivity est exportée dans le manifeste

Structure des permissions

  • L’AndroidManifest inclut, au-delà des permissions classiques centrées sur les notifications, de nombreuses permissions de badge lanceur (Samsung, HTC, Sony, etc.)
  • Les chaînes de demande à l’exécution incluent des permissions de localisation précise, localisation approximative et localisation en arrière-plan
  • La description Google Play mentionne également les permissions suivantes :
    • « modifier/supprimer le stockage partagé », « exécuter un service au premier plan », « afficher par-dessus d’autres applications », « s’exécuter au démarrage », « utiliser le matériel d’empreinte digitale/biométrique »
  • La configuration FileProvider expose toute la racine du stockage externe et est utilisée pour l’accès aux fichiers WebView

Liste des SDK inclus

  • Plus de 68 bibliothèques sont incluses au total
    • Frameworks : React Native, Expo SDK 54, Hermes
    • Push/engagement : OneSignal, Firebase Cloud Messaging, Firebase Installations
    • Analyse/télémétrie : Firebase Analytics, Google Data Transport, OpenTelemetry
    • Réseau : OkHttp3, Apollo GraphQL, Okio
    • Image : Fresco, Glide, Coil 3, Uploadcare CDN
    • Vidéo : ExoPlayer(Media3), Expo Video
    • ML : Google ML Kit Vision (scan de codes-barres), modèle Barhopper
    • Chiffrement : Bouncy Castle
    • Stockage : Expo Secure Store, React Native Async Storage
    • WebView : React Native WebView (avec script injecté)
    • DI : Koin
    • Sérialisation : GSON, Wire (Protocol Buffers)
    • Vérification de licence : PairIP (pour la validation Google Play)
  • La build arm64 inclut 25 bibliothèques natives .so

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.