수백만 명과 수백 개의 인기 앱에서 코드 실행 권한을 획득하는 방법

2 weeks ago 4

"물론 Firebase가 (부분적으로) 원인이었어요"

  • AI 편집기 Cursor의 설치 파일 다운로드 과정에서 Lulu 방화벽을 통해 TodeskTop으로 연결을 시도한다는 사실을 확인함
    • ToDesktop은 Electron 앱 패키징, SDK, 업데이트 등을 제공하는 서비스임
  • 앱이 Firestore를 사용하고 있음을 확인하고, 개발자 도구를 통해 Firebase에 대한 기본 조사를 시작
    • Firebase: 구글에서 제공하는 앱용 백엔드 플랫폼으로, Firestore라는 NoSQL 데이터베이스를 통해 클라이언트 측 데이터 저장 및 처리를 지원
  • 개발자도구(DevTools)와 소스맵(sourcemap)을 활용해 Firestore에서 사용되는 컬렉션들을 살펴봄
  • temporaryApplications라는 이름의 컬렉션이 발견되었으나, 오래된 목록일 뿐 민감한 정보는 없었음(2022년 이후 업데이트되지 않음)
  • 대부분의 주요 로직과 배포 작업은 npm 패키지 @todesktop/cli를 통해 이뤄짐을 확인함
  • @todesktop/cli도 소스맵이 있어서, sourcemapper로 원본 소스 구조를 파악함

Todesktop CLI 들여다 보기

  • ToDesktop CLI: 앱 배포, 소스코드 업로드 등 주요 기능을 담당함
  • CLI 소스맵을 분석하면서 Firebase Cloud Function 중 getSignedURL을 악용해 임의 S3 업로드를 시도할 수 있는 취약점을 발견했으나, 실제로 의미 있는 파일 경로를 찾기는 어려워 보였음

Postinstall 스크립트를 통해 배포 파이프라인 하이재킹하기

  • 목표: 빌드가 진행되는 컨테이너(서버)에서 코드 실행 권한을 획득하는 것임
  • package.json의 postinstall 스크립트에 리버스 쉘(reverse shell) 페이로드를 넣어 빌드 컨테이너에서 연결을 수신함
  • 성공적으로 컨테이너 내부 접근에 성공하고, 빌드 환경의 구조와 중요한 파일들을 살펴봄
  • config.json.encrypted 파일을 확인하고, 복호화 방식도 찾아내어 실제 비밀정보(config.json)를 추출함
  • 추가로 Firebase Admin 키(광범위 권한을 지닌 키)도 내부에서 발견함

Post-exploitation

  • 이 취약점을 통해 마음대로 앱 업데이트를 배포해, 사용자가 앱을 재시작할 때 즉시 악성 코드 실행 가능함
  • 실제로 테스트용 앱에 업데이트 배포 후, 클라이언트 측에서 RCE(원격 코드 실행)을 재현함

영향범위

  • ToDesktop을 사용하는 모든 앱에 악성 업데이트를 배포할 수 있어, 수백만 명 이상의 사용자에게 잠재적으로 영향을 끼칠 수 있는 문제임
  • 예시로 언급되는 앱:
  • 특히 이들 사용자들은 IT·기술 업계 종사자가 많아 공격 시 피해가 클 가능성이 높음

The fix

  • 보고 후 즉시 ToDesktop 측과 연락해 해결 과정을 진행함
  • ToDesktop은 빠르게 문제를 해결하고, 추가 보상을 제공했음
  • 빌드 컨테이너와는 분리된 권한의 사이드카 컨테이너에서 서명, 업로드 등의 중요한 작업을 수행하도록 구조를 변경함
  • ToDesktop의 공식 보안 incident 보고서는 이곳에서 확인 가능함
  • 보안 사고는 어느 회사에나 일어날 수 있지만, 중요한 것은 대응 태도이며, ToDesktop은 신속하고 협조적으로 대처해 긍정적인 인상을 남김

Read Entire Article