1 pontos por GN⁺ 2026-03-29 | 1 comentários | Compartilhar no WhatsApp
  • O app oficial da Casa Branca, baseado em React Native, usa backend WordPress, Expo SDK 54 e o motor Hermes, funcionando como um portal de conteúdo com notícias, fotos e políticas
  • Todas as WebViews incluem código de injeção de JavaScript que remove automaticamente banners de cookies, janelas de consentimento GDPR, elementos de paywall e similares
  • A infraestrutura de rastreamento de localização e criação de perfis de usuário via OneSignal SDK está totalmente incluída, com possibilidade de coletar dados de GPS em intervalos de 4,5 a 9,5 minutos
  • O app carrega serviços comerciais externos como GitHub Pages, Elfsight, Mailchimp, Uploadcare e Truth Social, introduzindo riscos de cadeia de suprimentos e possibilidades de rastreamento
  • A ausência de SSL pinning, inclusão de recursos de desenvolvimento e possibilidade de execução de código externo levanta preocupações de segurança e privacidade para um app oficial do governo

Visão geral do app

  • O app oficial White House é um aplicativo baseado em React Native publicado na App Store e no Google Play
    • Usa Expo SDK 54 e o motor JavaScript Hermes
    • O backend segue uma estrutura de API REST customizada baseada em WordPress
    • Segundo a configuração do Expo, o responsável pelo app é identificado como “forty-five-press”
  • A lógica do app é compilada em um bundle de bytecode Hermes de 5,5 MB, enquanto o código nativo funciona como um wrapper simples
  • A versão é 47.0.1, build 20, com Hermes e a New Architecture ativados

Configuração do Expo

  • Dois plugins, withNoLocation e withStripPermissions, estão incluídos
    • Presume-se que estejam relacionados à remoção de dados de localização e de permissões
  • Atualizações OTA desativadas; a infraestrutura de atualização do Expo está incluída, mas não funciona

Funções reais do app

  • A análise das strings do bundle Hermes mostra que o app carrega conteúdo via a API REST do WordPress de whitehouse.gov
    • Os principais endpoints são /wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x e outros
  • As strings internas do app incluem "THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov" e outras
  • O link https://www.ice.gov/webform/ice-tip-form também está incluído diretamente
  • No geral, ele funciona como um portal que oferece notícias, transmissões ao vivo, fotos, políticas, feeds sociais e conteúdo promocional do governo

Scripts de bloqueio de cookies e paywall

  • Em cada carregamento de página, as WebViews que abrem links externos executam código de injeção de JavaScript
    • Esse script oculta banners de cookies, janelas de consentimento GDPR, barreiras de login/cadastro, elementos de upsell e paywall, caixas de CMP e outros componentes
    • Aplica à força body { overflow: auto !important } para liberar a rolagem
    • Usa MutationObserver para remover continuamente novas janelas de consentimento adicionadas dinamicamente
  • Na prática, o app oficial do governo dos EUA injeta código para remover elementos de cookies, GDPR e paywall de sites de terceiros

Infraestrutura de rastreamento de localização

  • Apesar da presença do plugin withNoLocation, o código de rastreamento de localização do OneSignal SDK está totalmente incluído
    • Há três condições para ativar o rastreamento:
      1. A flag _isShared é definida como true (ao chamar setLocationShared(true))
      2. O usuário concede permissão de localização em tempo de execução
      3. O dispositivo possui um provedor de localização (GMS/HMS)
    • Quando essas condições são atendidas, solicitações de GPS podem ocorrer a cada 4,5 minutos (foreground) e 9,5 minutos (background)
    • Dados coletados: latitude, longitude, precisão, timestamp, estado de foreground/background e nível de precisão da localização
    • Os dados são sincronizados com o servidor por meio do PropertiesModel do OneSignal
    • Um serviço em segundo plano também está incluído, permitindo capturar localização mesmo com o app inativo
  • Não foi possível confirmar se há chamadas a setLocationShared no bundle JS, mas todo o pipeline foi compilado em estado passível de ativação

Criação de perfis de usuário com OneSignal

  • O SDK do OneSignal vai além de notificações push e executa rastreamento comportamental e segmentação de usuários
    • Principais funções: addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven e outras
    • O banco de dados local registra recebimento, abertura e ignorar notificações
  • Como resultado, localização, interação com notificações, cliques em mensagens in-app, número de telefone, tags e mudanças de estado podem ser enviados aos servidores do OneSignal

Risco de cadeia de suprimentos: carregamento de código externo

  • GitHub Pages

    • A biblioteca react-native-youtube-iframe carrega HTML de lonelycpp.github.io
    • Se essa conta do GitHub for comprometida, JavaScript arbitrário poderá ser executado dentro da WebView do app
  • Widget Elfsight

    • Feeds sociais são incorporados por meio do platform.js da Elfsight
    • Código SaaS comercial é executado sem sandbox, com possibilidade de rastreamento
    • O ID do widget 4a00611b-befa-466e-bab2-6e824a0a98a9 está hardcoded
  • Outros serviços externos

    • Mailchimp: processamento de assinatura por e-mail (whitehouse.us10.list-manage.com)
    • Uploadcare: hospedagem de imagens (ucarecdn.com)
    • Truth Social: inclui perfil de Trump e botão “Follow”
    • Facebook: carregamento de iframe do plugin de página
    • Todos eles são serviços comerciais externos, não infraestrutura governamental

Configuração de segurança

  • Sem pinning de certificado SSL; usa o TrustManager padrão do Android
    • Em Wi‑Fi público ou ambientes com proxy, ataques MITM podem expor o tráfego

Resquícios de desenvolvimento

  • O build de produção inclui URLs e recursos de desenvolvimento
    • Há strings de localhost e IP de desenvolvedor (10.4.4.109)
    • O cliente de desenvolvimento do Expo (expo-dev-client, expo-devlauncher, expo-devmenu) está incluído
    • O recurso dev_menu_fab_icon.png está presente
    • A Compose PreviewActivity aparece no manifesto como exportada

Estrutura de permissões

  • O AndroidManifest inclui, além das permissões comuns ligadas a notificações, várias permissões de badge do launcher (Samsung, HTC, Sony etc.)
  • As strings de solicitação em tempo de execução incluem permissões para localização precisa, localização aproximada e localização em segundo plano
  • A descrição no Google Play também menciona as seguintes permissões:
    • “modificar/excluir armazenamento compartilhado”, “executar serviço em foreground”, “exibir sobre outros apps”, “executar na inicialização” e “usar hardware de impressão digital/biometria”
  • A configuração do FileProvider expõe toda a raiz do armazenamento externo e é usada para acesso a arquivos pela WebView

Lista de SDKs incluídos

  • mais de 68 bibliotecas incluídas no total
    • Frameworks: React Native, Expo SDK 54, Hermes
    • Push/engajamento: OneSignal, Firebase Cloud Messaging, Firebase Installations
    • Analytics/telemetria: Firebase Analytics, Google Data Transport, OpenTelemetry
    • Rede: OkHttp3, Apollo GraphQL, Okio
    • Imagem: Fresco, Glide, Coil 3, Uploadcare CDN
    • Vídeo: ExoPlayer(Media3), Expo Video
    • ML: Google ML Kit Vision (leitura de código de barras), modelo Barhopper
    • Criptografia: Bouncy Castle
    • Armazenamento: Expo Secure Store, React Native Async Storage
    • WebView: React Native WebView (com script de injeção incluído)
    • DI: Koin
    • Serialização: GSON, Wire (Protocol Buffers)
    • Validação de licença: PairIP (para verificação do Google Play)
  • O build arm64 inclui 25 bibliotecas nativas .so

1 comentários

 
GN⁺ 2026-03-29
Comentários do Hacker News
  • O conteúdo da matéria parecia como se tivesse sido escrito por IA, então fiquei meio desconfiado
    Por curiosidade, instalei o app eu mesmo, mas, ao contrário do que a matéria dizia, ele não pediu permissão de localização em nenhum momento
    Tentei descompilar o APK com o Claude Code, mas essa ferramenta é fraca em análise de alcançabilidade ou em entender fluxos de controle complexos
    Ela trata código morto que nunca é chamado como se fosse função realmente usada, o que gera confusão

    • A lista de permissões mostrada na matéria também não incluía permissão de localização
      Para pedir localização em tempo de execução, isso precisaria estar declarado obrigatoriamente, e essa parte não existe
      No meu celular (talvez por causa do Graphene), a Play bloqueou a instalação, então não consegui verificar o APK diretamente
      Se você olhar em “Informações → Permissões” na Play Store, a versão 47.0.1 só mostra permissões comuns, como acesso à rede, controle de vibração e exibição de notificações
      Provavelmente é um caso de rollout de versão ou de segmentação por dispositivo
    • Queria saber se há alguma base concreta para dizer que “parece escrito por IA”
      Eu não tive essa impressão
    • A matéria não disse que o app pede permissão de localização, mas sim que uma linha de JS pode obter a localização
    • Será que a versão do app é diferente?
      Na App Store do iPhone, a versão 47.0.1 apareceu há 34 minutos e está descrita como “pequenas correções de bugs”
      Talvez essa correção inclua código relacionado à localização
    • Fico curioso se, no processo de descompilação, o app poderia ter mostrado informações falsas
  • Parecia um típico app de marketing de empresa de consultoria
    Dá a impressão de que o desenvolvedor terceirizado usou uma arquitetura padrão e acabou incluindo por padrão coisas como código de rastreamento de localização

    • O código de rastreamento de localização está dentro do SDK da OneSignal
      Isso é só uma plataforma de notificações push, então, se o app não pedir a permissão diretamente, nada acontece
    • A 45Press é esse tipo de empresa
      Parece que ela conseguiu um contrato de suporte ligado à Casa Branca (na faixa de US$ 1,5 milhão) e fez esse app
    • É uma pena que o US Digital Service de antigamente não exista mais para fazer isso direito
      Agora ele foi praticamente desmantelado e virou uma organização chamada DOGE, além de estar envolvido em vários processos
      Artigo da Wikipédia sobre o United States Digital Service
    • O r8 não entende direito código React Native, então não consegue fazer bem a eliminação de código morto (tree shaking)
      Por isso, parecem ter ficado rastros reutilizados de outros apps
    • Tomei um susto ao ver a frase “Visit TrumpRx.gov”
      Fiquei na dúvida se é aceitável usar um domínio .gov para promoção comercial
  • Se o conteúdo da matéria for verdadeiro, isso seria um acontecimento que marcaria o fim simbólico da liberdade
    Dá a sensação de que os valores dos quais os EUA se orgulhavam desapareceram

  • Surpreende que um app oficial do governo injete CSS e JavaScript em sites de terceiros para remover banners de cookies ou paywalls
    Eu não instalaria um app governamental fechado, mas a funcionalidade em si me parece positiva, tipo uBlock

  • O site estava tão lento que ficou quase inutilizável
    No meu MacBook Pro 2019 com Chrome, a rolagem travava muito

    • No Firefox 149 (Windows 10) a rolagem também estava horrível
      Ironicamente, uma matéria criticando desenvolvimento web apresenta esse tipo de problema de performance web
    • No Firefox mobile (151.0a1), a rolagem também engasgava tanto que era difícil ler
    • No ThinkPad com Chrome aconteceu a mesma coisa
    • Concordo que a qualidade web do site original é péssima
    • No Android 14 com Firefox 148.0.2 funcionou normalmente
  • A crítica de que não há pinning de certificado me parece um pouco exagerada
    Mesmo em uma rede onde um ataque MITM seja possível, se meu dispositivo não confiar naquela CA, o TLS vai simplesmente falhar

    • Mas a história muda se alguém conseguir emitir um certificado assinado por uma CA em que meu celular confia
      Por exemplo, dá para imaginar tráfego sendo interceptado em um café perto de uma embaixada, em um país onde vigilância é algo comum
      Isso é raro, mas não é totalmente impossível
    • Em organizações que usam MDM, existe uma exceção, porque elas podem enviar sua própria CA para o dispositivo
    • Essa discussão já se baseia em práticas de segurança ultrapassadas, então hoje ela não tem tanta relevância
  • Este site é pesado a ponto de travar o navegador
    Só consegui ler usando o modo de leitura

    • Eu tive a mesma experiência
      Achei que fosse problema do meu tablet, mas é interessante ver que outras pessoas também passaram por isso
  • Ao rolar a página, a carga na GPU é alta, então o uso de recursos gráficos fica elevado

  • Hoje em dia parece que a violação da lei virou rotina na Casa Branca

  • Desde o começo eu presumi que seria malware, e no fim essa previsão se confirmou