백악관 공식 앱 디컴파일 결과 드러난 추적 및 외부 코드 구조
(thereallo.dev)- 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 54와 Hermes JavaScript 엔진을 사용
- 백엔드는 WordPress 기반의 커스텀 REST API 구조
- Expo 설정에 따르면 제작 주체는 “forty-five-press” 로 명시
- 앱 로직은 5.5MB 크기의 Hermes 바이트코드 번들로 컴파일되어 있으며, 네이티브 코드는 단순 래퍼 형태
- 버전은 47.0.1, 빌드 20, Hermes 및 New Architecture 활성화 상태
Expo 설정
- 두 개의 플러그인
withNoLocation과withStripPermissions이 포함되어 있음- 위치 정보 제거 및 권한 스트립 관련 기능으로 추정
- 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의 위치 추적 코드가 완전히 포함되어 있음- 추적 활성화 조건은 세 가지
-
_isShared플래그가 true로 설정 (setLocationShared(true)호출 시) - 사용자가 런타임에서 위치 권한을 허용
- 기기에 위치 제공자(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 위젯
-
Elfsight의
platform.js를 통해 소셜 피드 임베드 - 상용 SaaS 코드가 샌드박싱 없이 실행, 추적 가능성 존재
- 위젯 ID
4a00611b-befa-466e-bab2-6e824a0a98a9가 하드코딩
-
Elfsight의
-
기타 외부 서비스
-
Mailchimp: 이메일 구독 처리 (
whitehouse.us10.list-manage.com) -
Uploadcare: 이미지 호스팅 (
ucarecdn.com) - Truth Social: 트럼프 프로필 및 “Follow” 버튼 포함
- Facebook: 페이지 플러그인 iframe 로드
- 이들 모두 정부 인프라가 아닌 외부 상용 서비스
-
Mailchimp: 이메일 구독 처리 (
보안 설정
-
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 도메인을 상업적 홍보에 쓰는 게 가능한지 의문임
- 위치 추적 코드는 OneSignal SDK 안에 포함된 것임
-
만약 기사 내용이 사실이라면, 이는 자유의 상징적 종말을 의미하는 사건일 것임
미국이 자랑하던 가치가 사라지는 느낌임 -
정부 공식 앱이 제3자 웹사이트에 CSS와 JavaScript를 삽입해 쿠키 배너나 페이월을 제거한다는 건 놀라움
나는 비공개 정부 앱은 설치하지 않겠지만, 기능 자체는 uBlock처럼 긍정적으로 보임 -
사이트가 너무 느려서 거의 사용할 수 없었음
내 2019년형 MacBook Pro + Chrome 환경에서 스크롤이 심하게 끊김- Firefox 149 (Windows 10)에서도 스크롤이 엉망이었음
아이러니하게도, 웹 개발을 비판하는 기사가 이런 웹 성능 문제를 보임 - 모바일 Firefox(151.0a1)에서도 스크롤이 너무 버벅거려서 읽기 힘들었음
- ThinkPad + Chrome 환경에서도 동일한 현상 발생
- 원문 사이트의 웹 품질이 형편없음에 동의함
- Android 14 + Firefox 148.0.2에서는 정상 작동했음
- Firefox 149 (Windows 10)에서도 스크롤이 엉망이었음
-
인증서 pinning이 없다는 비판은 좀 과장된 것 같음
MITM 공격이 가능한 네트워크에 있더라도, 내 기기가 그 CA를 신뢰하지 않으면 TLS 오류가 날 뿐임- 하지만 누군가 내 폰이 신뢰하는 CA로 서명된 인증서를 발급받는다면 이야기가 달라짐
예를 들어, 감시가 일상적인 특정 국가의 대사관 근처 카페에서 트래픽을 가로채는 경우를 상상해볼 수 있음
이런 일은 드물지만 완전히 불가능한 건 아님 - MDM을 사용하는 조직이라면 자체 CA를 기기에 푸시할 수 있어서 예외가 생김
- 이 논의는 이미 구식 보안 관행에 기반한 것이라 현재에는 크게 의미가 없음
- 하지만 누군가 내 폰이 신뢰하는 CA로 서명된 인증서를 발급받는다면 이야기가 달라짐
-
이 사이트는 브라우저가 멈출 정도로 무거움
리더 모드로만 겨우 읽을 수 있었음- 나도 같은 현상을 겪었음
태블릿 문제인 줄 알았는데, 다른 사람들도 그렇다니 흥미로움
- 나도 같은 현상을 겪었음
-
스크롤 시 GPU 부하가 심해서 그래픽 리소스 사용량이 높음
-
요즘 백악관은 법 위반이 일상인 것 같음
-
처음부터 악성코드일 거라고 가정했음, 그리고 그 예상이 맞았음