본문으로 건너뛰기
피드

백악관 공식 앱을 디컴파일해봤더니 — GDPR 배너 강제 제거, GPS 추적, 개인 GitHub에서 코드 로드

security 약 6분
vote
0
댓글
북마크

백악관 공식 Android 앱을 디컴파일한 결과, 인앱 브라우저에서 쿠키 동의/페이월을 강제 제거하는 JS 주입, 완전히 컴파일된 GPS 추적 파이프라인, 개인 GitHub Pages에서 코드 로드, 프로덕션 빌드에 개발 잔재가 남아있는 것을 발견.

  • 1

    WebView에서 GDPR 배너/페이월 강제 제거 JS 주입

  • 2

    OneSignal 통한 4.5분/9.5분 간격 GPS 추적 파이프라인 내장

  • 3

    YouTube 임베드를 개인 GitHub Pages에서 로드

  • 4

    개발 서버 URL/IP가 프로덕션 빌드에 잔존

앱 기본 구조

  • 백악관이 공식 앱을 출시했는데, 누군가가 APK를 뜯어봤음 — React Native + Expo SDK 54, Hermes JS 엔진, 백엔드는 WordPress
    • "forty-five-press"라는 업체가 만들었고, 5.5MB Hermes 바이트코드 번들에 68개 이상 라이브러리 포함
    • WordPress REST API(whitehouse/v1)로 뉴스, 라이브 스트림, 갤러리, 정책 이슈 등을 제공하는 콘텐츠 포털
    • 하드코딩된 문자열 중에 "Greatest President Ever!" (ㅋㅋ), ICE 신고 폼 링크도 있음

인앱 브라우저의 동의 배너 강제 제거

  • 앱 내 WebView에서 외부 링크를 열 때마다 JavaScript를 주입해서 다음을 숨김:
    • 쿠키 배너, GDPR 동의 다이얼로그, OneTrust 팝업, 프라이버시 배너
    • 로그인 월, 회원가입 월, 업셀 프롬프트, 페이월까지
    • MutationObserver로 동적으로 추가되는 동의 요소도 계속 제거
    • body { overflow: auto !important }로 스크롤 잠금도 해제

⚠️주의

> 미국 정부 공식 앱이 서드파티 웹사이트에 CSS/JS를 주입해서 쿠키 동의, GDPR 배너, 페이월을 강제로 제거하고 있음.

GPS 추적 파이프라인

  • OneSignal SDK의 위치 추적 코드가 APK에 완전히 컴파일되어 있음
    • 포그라운드 4.5분, 백그라운드 9.5분 간격으로 GPS 폴링
    • 위도, 경도, 정확도, 타임스탬프, 포그라운드/백그라운드 여부, fine/coarse 구분까지 전부 OneSignal 서버로 동기화
    • 백그라운드 서비스로 앱이 비활성 상태에서도 위치 수집 가능
  • 활성화 조건이 3가지 있음: _isShared 플래그(JS에서 토글 가능), 런타임 위치 권한, 위치 제공자 존재
    • withNoLocation이라는 Expo 플러그인이 위치 코드를 제거했어야 하는데 실제로는 아무것도 제거하지 않음
    • JS 번들에 setLocationSharedisLocationShared 참조가 존재 — setLocationShared(true) 한 줄이면 전체 파이프라인 가동

서드파티 의존성 문제

  • YouTube 임베드에 lonelycpp.github.io라는 개인 GitHub Pages 사이트에서 HTML을 로드함
    • 이 계정이 탈취되면 앱 WebView 안에서 임의 코드 실행 가능 — 정부 앱이 랜덤 개인의 GitHub Pages에서 코드를 불러오는 상황
  • Elfsight(상용 SaaS 위젯)의 JS를 샌드박싱 없이 로드, Mailchimp로 이메일 수집, Uploadcare에서 이미지 호스팅, Truth Social 임베드 하드코딩
    • 이 중 어느 것도 정부 통제 인프라가 아님
  • SSL 인증서 피닝 없음 — 표준 Android TrustManager만 사용
    • 기업 프록시나 공용 WiFi에서 MITM 가능

프로덕션 빌드에 남은 개발 잔재

  • localhost:8081 URL(Metro 번들러 개발 서버)이 프로덕션 Hermes 번들에 포함
  • 개발자 로컬 IP 10.4.4.109가 문자열 리소스에 하드코딩
  • Expo 개발 클라이언트와 Compose PreviewActivity가 릴리스 빌드에 export됨
  • OneSignal을 통한 광범위한 사용자 프로파일링: 태그, SMS 번호, 크로스 디바이스 식별, 행동 추적, 알림 상호작용 로깅, 인앱 메시지 클릭 추적

기술 맥락

  • React Native 앱의 WebView injectedJavaScript는 원래 자사 웹 콘텐츠를 커스터마이징할 때 쓰는 기능인데, 이걸 서드파티 사이트에 적용하면 사실상 브라우저 확장 프로그램 수준의 페이지 조작이 돼요. GDPR 동의 배너를 제거하는 건 EU 법률 위반 소지가 있거든요
  • Expo의 config plugin 시스템(withNoLocation, withStripPermissions)은 빌드 타임에 네이티브 코드를 수정하는 방식인데, OneSignal 같은 SDK가 자체 네이티브 모듈로 위치 코드를 주입하면 Expo 플러그인이 이를 인식하지 못할 수 있어요. 이건 Expo 생태계에서 서드파티 SDK와의 충돌이 흔한 문제
  • 개인 GitHub Pages에서 코드를 로드하는 건 react-native-youtube-iframe 라이브러리의 기본 동작이에요. 이 라이브러리가 YouTube IFrame API를 감싸는 HTML을 자체 호스팅하는 건데, 정부 앱처럼 보안 요구사항이 높은 환경에서는 이런 외부 의존성을 자체 CDN으로 가져와야 했어요

React Native + Expo 기반 정부 앱의 보안 실태를 적나라하게 보여주는 리버스 엔지니어링. 특히 서드파티 의존성 관리와 빌드 위생 문제는 모든 모바일 개발팀이 점검해볼 만함.

댓글

댓글

댓글을 불러오는 중...

security

엘에이 경찰, 사생활 침해 논란 끝에 플록 번호판 감시 계약 종료

엘에이 경찰이 번호판 인식 카메라 업체 플록 세이프티와의 3년 계약을 연장하지 않기로 했어. 시민권, 프라이버시, 데이터 보관과 공유 문제를 해결하지 못했다는 게 핵심 이유야. 플록은 미국 전역에 최소 8만 대 카메라망을 깔아 경찰과 연방기관이 차량을 추적할 수 있게 해왔고, 오탐·보안 사고·이민 단속 악용 의혹까지 겹치며 압박이 커졌어.

security

크로미움 148부터 Math.tanh 한 번으로 운영체제 지문이 새는 문제

크로미움 148 이후 V8이 Math.tanh 계산을 자체 구현 대신 운영체제의 수학 라이브러리에 맡기면서, 같은 입력값도 리눅스·맥·윈도우에서 마지막 비트가 달라지는 지문 신호가 생겼다. 이 차이는 User-Agent로 맥이라고 주장하면서 리눅스 수학 결과를 내는 식의 위장을 바로 들키게 만든다. CSS 삼각함수와 웹 오디오까지 보면 브라우저 수학 경로가 꽤 복잡하게 갈라지고, 제대로 흉내 내려면 실제 운영체제 라이브러리의 비트 단위 동작까지 맞춰야 한다.

security

출입통제도 클라우드 구독제로 간다…제로트러스트·AI 분석이 승부처

기업 출입보안이 사업장별 서버를 두는 방식에서 클라우드 기반 서비스형 출입통제(ACaaS)로 옮겨가고 있다. 시장은 2026년 17억8000만 달러에서 2030년 31억9000만 달러로 커질 전망이고, 제로트러스트·모바일 인증·AI 출입 분석·스마트빌딩 통합이 핵심 경쟁 포인트로 꼽힌다.

security

AWS·구글 클라우드, 양자컴퓨터 대비해 암호 체계 갈아엎는 중

AWS와 구글 클라우드가 양자컴퓨터 시대를 대비해 기존 공개키 암호와 양자내성암호를 함께 쓰는 하이브리드 전환을 시작했다. 핵심 배경은 지금 훔친 암호문을 나중에 양자컴퓨터로 푸는 ‘선수집·후해독’ 공격이고, 국내도 통신·금융·국방 등 5개 분야에 45억원을 투입해 실증에 들어간다.

security

보안 점검 맡긴 AI 에이전트가 악성코드를 직접 실행할 수 있다는 경고

AI 보안 에이전트가 저장소를 검사하다가 README 같은 문서에 숨은 프롬프트 인젝션에 속아 악성 바이너리를 실행할 수 있다는 연구가 나왔다. 클로드 코드와 코덱스의 자동 모드처럼 승인 없이 명령을 수행하는 구성에서 문제가 재현됐고, 여러 모델과 공급업체를 가로질러 같은 패턴이 통했다는 점이 핵심이다.