---
title: "백악관 공식 앱을 디컴파일해봤더니 — 예상대로 엉망이었음"
published: 2026-03-28T15:37:17.000Z
canonical: https://jeff.news/article/1344
---
# 백악관 공식 앱을 디컴파일해봤더니 — 예상대로 엉망이었음

백악관 공식 Android 앱을 디컴파일한 결과, 서드파티 웹사이트의 GDPR 동의창과 페이월을 강제 제거하는 JS 인젝션, 4.5분 간격의 GPS 추적 파이프라인, 개인 GitHub Pages에서 코드 로딩 등 다수의 보안·프라이버시 문제가 발견됨.

- 백악관이 앱스토어와 구글플레이에 공식 앱을 출시했는데, 누군가 APK를 뜯어봤음. React Native + Expo(SDK 54) 기반이고 Hermes JS 엔진 위에서 돌아감. 백엔드는 놀랍게도 **WordPress** + 커스텀 REST API임
- 개발사는 Expo 설정에 "forty-five-press"라는 이름으로 박혀있고, 실제 앱 로직은 5.5MB짜리 Hermes 바이트코드 번들 하나에 다 들어있음. 네이티브 Java 쪽은 그냥 얇은 래퍼 수준

## 앱이 하는 짓: 쿠키 동의창과 페이월을 강제로 없앰

- 앱 내 WebView로 외부 링크를 열 때마다 **JavaScript를 인젝션**함. 이 스크립트가 하는 일이 압권인데:
  - 쿠키 배너, GDPR 동의 다이얼로그, OneTrust 팝업 제거
  - 로그인 월, 가입 월, 업셀 프롬프트, **페이월** 요소 제거
  - `body { overflow: auto !important }`로 동의 다이얼로그가 잠근 스크롤을 강제 해제
  - `MutationObserver`로 동적으로 추가되는 동의 요소도 계속 제거
- 미국 연방 정부 공식 앱이 서드파티 웹사이트의 쿠키 동의창과 페이월을 CSS/JS 인젝션으로 뜯어내고 있다는 거임

> [!WARNING]
> 정부 공식 앱이 타사 웹사이트의 GDPR 동의 배너와 페이월을 강제 제거하는 JavaScript를 인젝션하고 있음. 법적으로 문제가 없을 수도 있지만, 정부 앱이 할 짓은 아님

## GPS 추적 파이프라인이 통째로 컴파일되어 있음

- Expo 설정에 `withNoLocation`이라는 플러그인이 있어서 위치 추적을 제거한 것처럼 보이지만, **실제로는 OneSignal SDK의 네이티브 위치 추적 코드가 전부 APK에 남아있음**
- 포그라운드 **4.5분**, 백그라운드 **9.5분** 간격으로 GPS를 폴링하도록 설정되어 있음
- 위도, 경도, 정확도, 타임스탬프, 포그라운드/백그라운드 여부, GPS/네트워크 구분까지 전부 캡처해서 OneSignal 서버로 동기화하는 구조
- 활성화 조건은 3가지 게이트가 있음: (1) JS에서 `setLocationShared(true)` 호출, (2) 사용자가 런타임 위치 권한 승인, (3) 기기에 위치 프로바이더 존재. 근데 `setLocationShared`와 `isLocationShared`가 JS 번들에 참조되어 있어서 **언제든 켤 수 있는 상태**
- 앱이 비활성 상태일 때도 위치를 캡처하는 백그라운드 서비스까지 포함되어 있음

## 보안? 그런 거 없음

- YouTube 임베드에 `react-native-youtube-iframe` 라이브러리를 쓰는데, 이게 **lonelycpp라는 개인의 GitHub Pages**에서 플레이어 HTML을 로드함. 이 계정이 해킹당하면 앱 WebView 안에서 임의 코드 실행이 가능
- Elfsight(상용 SaaS 위젯 회사)의 JavaScript를 샌드박싱 없이 로드해서 소셜 미디어 피드를 임베드함. Elfsight가 추적하는 건 고스란히 이 앱에서도 추적됨
- 이메일 구독은 Mailchimp로, 이미지는 Uploadcare CDN으로, Truth Social 임베드는 하드코딩된 static CDN URL로 — **정부 인프라를 거치는 게 하나도 없음**
- SSL 인증서 피닝도 없음. 기본 Android TrustManager만 사용해서, 기업 프록시나 공공 와이파이의 MITM 공격에 그대로 노출

## 프로덕션에 개발 아티팩트가 그대로

- Hermes 번들에 `localhost` URL이 포함되어 있음 (Metro 번들러 개발 서버 주소)
- 개발자 로컬 IP `10.4.4.109`가 string resources에 하드코딩
- Expo 개발 클라이언트(`expo-dev-client`, `expo-devlauncher`, `expo-devmenu`)가 릴리즈 빌드에 컴파일되어 있고, 개발용 `PreviewActivity`가 매니페스트에 export 상태

## OneSignal을 통한 사용자 프로파일링

- 단순 푸시 알림을 넘어서 OneSignal이 하는 일이 많음:
  - `addTag`로 사용자 세그먼테이션
  - `addSms`로 전화번호를 사용자 프로필에 연결
  - `addAliases`로 크로스 디바이스 사용자 식별
  - 알림 클릭, 인앱 메시지 클릭/표시/해제 전체 라이프사이클 추적
  - 사용자 상태 변경 추적
- 위치, 알림 상호작용, 인앱 메시지 클릭, 전화번호, 태그, 상태 변경 — 전부 OneSignal 서버로 전송

> [!IMPORTANT]
> 68개 이상의 라이브러리가 컴파일되어 있고, Google ML Kit Vision(바코드 스캐닝), Apollo GraphQL, ExoPlayer, Firebase Analytics 등이 포함됨. 뉴스 앱치고 과하다 못해 의심스러운 수준

- ICE(이민세관단속국) 신고 폼 링크도 하드코딩되어 있음. 뉴스 앱인데
- 하드코딩된 문자열 중에는 "Greatest President Ever!" 같은 것도 있음 (ㅋㅋ)
- 불법이냐고? 아마 아닐 거임. 정부 공식 앱에서 기대하는 수준이냐고? 그것도 아닐 거임

## 핵심 포인트

- 앱 내 WebView가 외부 사이트의 쿠키 동의창, GDPR 배너, 페이월을 JS 인젝션으로 강제 제거
- OneSignal SDK를 통한 GPS 추적 파이프라인이 포그라운드 4.5분, 백그라운드 9.5분 간격으로 설정되어 전체 컴파일됨
- YouTube 임베드가 개인 GitHub Pages에서 HTML을 로딩 — 계정 탈취 시 임의 코드 실행 가능
- 인증서 피닝 없음, 개발용 아티팩트가 프로덕션 빌드에 포함, 정부 인프라 없이 Mailchimp/Uploadcare 등 서드파티 의존

## 인사이트

정부 앱이라는 타이틀이 무색할 정도의 보안·프라이버시 수준. React Native + WordPress 조합의 허술함보다, GDPR 동의창을 강제로 뜯어내는 JS 인젝션이 정치적으로도 기술적으로도 가장 논란이 될 부분임.
