1P by GN⁺ 19시간전 | ★ favorite | 댓글 1개
  • React Native 기반의 백악관 공식 앱은 WordPress 백엔드와 Expo SDK 54, Hermes 엔진을 사용하며, 뉴스·사진·정책 등 콘텐츠를 제공하는 포털 형태임
  • 모든 WebView에 JavaScript 주입 코드가 포함되어 쿠키 배너, GDPR 동의창, 페이월 요소 등을 자동으로 제거함
  • OneSignal SDK를 통한 위치 추적 및 사용자 프로파일링 기능이 완전 포함되어 있으며, GPS 데이터를 4.5분~9.5분 간격으로 수집 가능함
  • 앱은 GitHub Pages, Elfsight, Mailchimp, Uploadcare, Truth Social 등 외부 상용 서비스를 로드해 공급망 위험과 추적 가능성을 내포함
  • SSL 핀닝 미적용, 개발용 리소스 포함, 외부 코드 실행 가능성 등으로 인해 정부 공식 앱으로서는 보안·프라이버시 측면의 우려가 제기됨

앱 개요

  • White House 공식 앱은 App Store와 Google Play에 공개된 React Native 기반 애플리케이션
    • Expo SDK 54Hermes JavaScript 엔진을 사용
    • 백엔드는 WordPress 기반의 커스텀 REST API 구조
    • Expo 설정에 따르면 제작 주체는 “forty-five-press” 로 명시
  • 앱 로직은 5.5MB 크기의 Hermes 바이트코드 번들로 컴파일되어 있으며, 네이티브 코드는 단순 래퍼 형태
  • 버전은 47.0.1, 빌드 20, Hermes 및 New Architecture 활성화 상태

Expo 설정

  • 두 개의 플러그인 withNoLocationwithStripPermissions 이 포함되어 있음
    • 위치 정보 제거 및 권한 스트립 관련 기능으로 추정
  • OTA 업데이트 비활성화, Expo 업데이트 인프라는 포함되어 있으나 동작하지 않음

앱의 실제 기능

  • Hermes 번들 문자열 분석 결과, 앱은 whitehouse.gov의 WordPress REST API를 통해 콘텐츠를 로드
    • 주요 엔드포인트는 /wp-json/whitehouse/v1/home, /news/articles, /wire, /live, /galleries, /issues, /priorities, /achievements, /affordability, /media-bias, /social/x
  • 앱 내 문자열에는 "THE TRUMP EFFECT", "Greatest President Ever!", "Text President Trump", "Visit TrumpRx.gov", "Visit TrumpAccounts.gov" 등이 포함
  • 또한 https://www.ice.gov/webform/ice-tip-form 링크가 직접 포함되어 있음
  • 전체적으로 뉴스, 생중계, 사진, 정책, 소셜 피드, 행정부 홍보 콘텐츠를 제공하는 포털 형태

쿠키·페이월 차단 스크립트

  • 외부 링크를 여는 WebView에 매 페이지 로드 시 JavaScript 주입 코드가 실행됨
    • 이 스크립트는 쿠키 배너, GDPR 동의창, 로그인/회원가입 벽, 업셀·페이월 요소, CMP 박스 등을 숨김
    • body { overflow: auto !important }를 강제 적용해 스크롤 잠금 해제
    • MutationObserver를 통해 새로 추가되는 동의창도 지속적으로 제거
  • 결과적으로 미국 정부 공식 앱이 제3자 웹사이트의 쿠키·GDPR·페이월 요소를 제거하는 코드를 주입하는 구조

위치 추적 인프라

  • withNoLocation 플러그인이 있음에도 OneSignal SDK의 위치 추적 코드가 완전히 포함되어 있음
    • 추적 활성화 조건은 세 가지
      1. _isShared 플래그가 true로 설정 (setLocationShared(true) 호출 시)
      2. 사용자가 런타임에서 위치 권한을 허용
      3. 기기에 위치 제공자(GMS/HMS)가 존재
    • 조건 충족 시 4.5분(전경), 9.5분(백그라운드) 간격으로 GPS 요청
    • 수집 데이터: 위도, 경도, 정확도, 타임스탬프, 포그라운드/백그라운드 여부, 위치 정밀도
    • 데이터는 OneSignal의 PropertiesModel을 통해 서버로 동기화
    • 백그라운드 서비스도 포함되어 있어 앱 비활성 상태에서도 위치 캡처 가능
  • JS 번들 내 setLocationShared 호출 여부는 확인 불가하지만, 전체 파이프라인이 활성화 가능한 상태로 컴파일되어 있음

OneSignal 사용자 프로파일링

  • OneSignal SDK는 단순 푸시 알림 외에 사용자 행동 추적 및 세분화 기능을 수행
    • 주요 기능: addTag, addSms, addAliases, addOutcomeWithValue, addUniqueOutcome, notificationClicked, inAppMessageClicked, permissionChanged, subscriptionChanged, userStateChanged, setPrivacyConsentRequired, setPrivacyConsentGiven
    • 로컬 DB는 알림 수신·열람·무시 여부를 기록
  • 결과적으로 위치, 알림 상호작용, 인앱 메시지 클릭, 전화번호, 태그, 상태 변화 등이 OneSignal 서버로 전송됨

공급망 위험: 외부 코드 로딩

  • GitHub Pages

    • react-native-youtube-iframe 라이브러리가 lonelycpp.github.io 에서 HTML을 로드
    • 해당 GitHub 계정이 침해될 경우 임의의 JavaScript가 앱 WebView 내에서 실행 가능
  • Elfsight 위젯

    • Elfsightplatform.js를 통해 소셜 피드 임베드
    • 상용 SaaS 코드가 샌드박싱 없이 실행, 추적 가능성 존재
    • 위젯 ID 4a00611b-befa-466e-bab2-6e824a0a98a9가 하드코딩
  • 기타 외부 서비스

    • Mailchimp: 이메일 구독 처리 (whitehouse.us10.list-manage.com)
    • Uploadcare: 이미지 호스팅 (ucarecdn.com)
    • Truth Social: 트럼프 프로필 및 “Follow” 버튼 포함
    • Facebook: 페이지 플러그인 iframe 로드
    • 이들 모두 정부 인프라가 아닌 외부 상용 서비스

보안 설정

  • SSL 인증서 핀닝 없음, 표준 Android TrustManager 사용
    • 공용 Wi-Fi나 프록시 환경에서 MITM 공격 시 트래픽 노출 가능성

개발 잔여물

  • 프로덕션 빌드에 개발용 URL 및 리소스가 포함
    • localhost 및 개발자 IP(10.4.4.109) 문자열 존재
    • Expo 개발 클라이언트(expo-dev-client, expo-devlauncher, expo-devmenu) 가 포함
    • dev_menu_fab_icon.png 리소스 존재
    • Compose PreviewActivity 가 매니페스트에 export 상태로 포함

권한 구조

  • AndroidManifest는 일반적인 알림 중심 권한 외에 다수의 런처 배지 권한(삼성, HTC, Sony 등) 포함
  • 런타임 요청 문자열로 정밀 위치, 대략적 위치, 백그라운드 위치 권한이 존재
  • Google Play 설명에는 다음 권한도 명시
    • “공유 저장소 수정/삭제”, “포그라운드 서비스 실행”, “다른 앱 위에 표시”, “부팅 시 실행”, “지문·생체인식 하드웨어 사용”
  • FileProvider 설정은 외부 저장소 루트 전체 노출, WebView 파일 접근에 사용

포함된 SDK 목록

  • 68개 이상 라이브러리 포함
    • 프레임워크: React Native, Expo SDK 54, Hermes
    • 푸시/참여: OneSignal, Firebase Cloud Messaging, Firebase Installations
    • 분석/텔레메트리: Firebase Analytics, Google Data Transport, OpenTelemetry
    • 네트워킹: OkHttp3, Apollo GraphQL, Okio
    • 이미지: Fresco, Glide, Coil 3, Uploadcare CDN
    • 비디오: ExoPlayer(Media3), Expo Video
    • ML: Google ML Kit Vision(바코드 스캐닝), Barhopper 모델
    • 암호화: Bouncy Castle
    • 저장소: Expo Secure Store, React Native Async Storage
    • WebView: React Native WebView (주입 스크립트 포함)
    • DI: Koin
    • 직렬화: GSON, Wire(Protocol Buffers)
    • 라이선스 검증: PairIP (Google Play 확인용)
  • arm64 빌드에 25개의 네이티브 .so 라이브러리 포함
Hacker News 의견들
  • 기사 내용이 AI가 쓴 것처럼 보여서 좀 의심스러웠음
    호기심에 앱을 직접 설치해봤는데, 기사 주장과 달리 위치 권한 요청은 전혀 없었음
    Claude Code로 APK를 디컴파일해봤지만, 이 도구는 도달성 분석이나 복잡한 제어 흐름 파악에는 약함
    호출되지 않는 죽은 코드도 실제 사용되는 함수처럼 다뤄서 오해를 일으킴

    • 기사에 나온 권한 목록에도 위치 권한은 없었음
      런타임에서 위치를 요청하려면 반드시 선언이 필요한데, 그 부분이 없음
      내 폰(아마 Graphene 때문일 수도 있음)에서는 Play가 설치를 막아서 APK를 직접 확인하진 못했음
      Play 스토어의 “정보 → 권한” 항목을 보면 47.0.1 버전은 네트워크 접근, 진동 제어, 알림 표시 등 일반적인 권한만 있음
      아마 버전 롤아웃이나 기기별 타깃팅일 가능성이 있음
    • “AI가 쓴 것 같다”는 근거가 구체적으로 있는지 궁금함
      나는 그렇게 느껴지진 않았음
    • 기사는 앱이 위치 권한을 요청한다고 한 게 아니라, JS 한 줄로 위치를 가져올 수 있다고 설명한 것임
    • 혹시 앱 버전이 다른가?
      iPhone App Store 기준으로 47.0.1 버전이 34분 전에 올라왔고, “사소한 버그 수정”이라고 되어 있음
      아마 그 수정에 위치 관련 코드가 포함됐을 수도 있음
    • 디컴파일 과정에서 앱이 거짓 정보를 보여줬을 가능성은 없는지 궁금함
  • 전형적인 컨설팅 회사의 마케팅 앱처럼 보였음
    외주 개발자가 표준 아키텍처를 사용하면서 위치 추적 코드 같은 게 기본 포함된 듯함

    • 위치 추적 코드는 OneSignal SDK 안에 포함된 것임
      이건 단순히 푸시 알림용 플랫폼이라, 앱이 직접 권한을 요청하지 않으면 아무 일도 안 함
    • 45Press가 그런 회사임
      백악관 관련 지원 계약(약 150만 달러 규모)을 따내서 이런 앱을 만든 것 같음
    • 예전처럼 US Digital Service가 남아 있었다면 이런 걸 제대로 만들 수 있었을 텐데 아쉬움
      지금은 거의 해체돼서 DOGE라는 조직으로 바뀌었고, 여러 소송에 휘말려 있음
      United States Digital Service 위키 문서
    • r8이 React Native 코드를 제대로 이해하지 못해서 죽은 코드 제거(tree shaking) 를 제대로 못함
      그래서 다른 앱에서 재사용된 흔적이 남아 있는 듯함
    • “Visit TrumpRx.gov”라는 문구를 보고 깜짝 놀랐음
      .gov 도메인을 상업적 홍보에 쓰는 게 가능한지 의문임
  • 만약 기사 내용이 사실이라면, 이는 자유의 상징적 종말을 의미하는 사건일 것임
    미국이 자랑하던 가치가 사라지는 느낌임

  • 정부 공식 앱이 제3자 웹사이트에 CSS와 JavaScript를 삽입해 쿠키 배너나 페이월을 제거한다는 건 놀라움
    나는 비공개 정부 앱은 설치하지 않겠지만, 기능 자체는 uBlock처럼 긍정적으로 보임

  • 사이트가 너무 느려서 거의 사용할 수 없었음
    내 2019년형 MacBook Pro + Chrome 환경에서 스크롤이 심하게 끊김

    • Firefox 149 (Windows 10)에서도 스크롤이 엉망이었음
      아이러니하게도, 웹 개발을 비판하는 기사가 이런 웹 성능 문제를 보임
    • 모바일 Firefox(151.0a1)에서도 스크롤이 너무 버벅거려서 읽기 힘들었음
    • ThinkPad + Chrome 환경에서도 동일한 현상 발생
    • 원문 사이트의 웹 품질이 형편없음에 동의함
    • Android 14 + Firefox 148.0.2에서는 정상 작동했음
  • 인증서 pinning이 없다는 비판은 좀 과장된 것 같음
    MITM 공격이 가능한 네트워크에 있더라도, 내 기기가 그 CA를 신뢰하지 않으면 TLS 오류가 날 뿐임

    • 하지만 누군가 내 폰이 신뢰하는 CA로 서명된 인증서를 발급받는다면 이야기가 달라짐
      예를 들어, 감시가 일상적인 특정 국가의 대사관 근처 카페에서 트래픽을 가로채는 경우를 상상해볼 수 있음
      이런 일은 드물지만 완전히 불가능한 건 아님
    • MDM을 사용하는 조직이라면 자체 CA를 기기에 푸시할 수 있어서 예외가 생김
    • 이 논의는 이미 구식 보안 관행에 기반한 것이라 현재에는 크게 의미가 없음
  • 이 사이트는 브라우저가 멈출 정도로 무거움
    리더 모드로만 겨우 읽을 수 있었음

    • 나도 같은 현상을 겪었음
      태블릿 문제인 줄 알았는데, 다른 사람들도 그렇다니 흥미로움
  • 스크롤 시 GPU 부하가 심해서 그래픽 리소스 사용량이 높음

  • 요즘 백악관은 법 위반이 일상인 것 같음

  • 처음부터 악성코드일 거라고 가정했음, 그리고 그 예상이 맞았음