- 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:
- A flag
_isShared é definida como true (ao chamar setLocationShared(true))
- O usuário concede permissão de localização em tempo de execução
- 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
- Há 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
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
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
Eu não tive essa impressão
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
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
Isso é só uma plataforma de notificações push, então, se o app não pedir a permissão diretamente, nada acontece
Parece que ela conseguiu um contrato de suporte ligado à Casa Branca (na faixa de US$ 1,5 milhão) e fez esse app
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
Por isso, parecem ter ficado rastros reutilizados de outros apps
Fiquei na dúvida se é aceitável usar um domínio
.govpara promoção comercialSe 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
Ironicamente, uma matéria criticando desenvolvimento web apresenta esse tipo de problema de performance web
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
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
Este site é pesado a ponto de travar o navegador
Só consegui ler usando o modo de leitura
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