일간

SMS of Death — 잘못된 WAP Push 한 통으로 Android 전화 프로세스가 죽고 긴급 통화가 끊긴다, 10월 패치

원문 smsofdeath.com ↗

연구자 Mark B(@sourone)가 공개한 전체 공개(full disclosure) 글입니다. 패치는 이미 나왔고, PoC가 함께 공개됐습니다.

결함

Android가 WAP Push 메시지를 받으면 WapPushOverSms.decodeWapPdu()가 WSP 헤더 길이를 uintvar로 읽습니다. 값은 long으로 돌아오는데 범위 검사 없이 int로 캐스팅되고, 그대로 새 바이트 배열의 크기로 쓰입니다. 5바이트 uintvar 88 80 80 80 00은 0x80000000으로 디코딩되고, 부호 있는 32비트로는 -2147483648입니다. new byte[-2147483648]이 텔레포니 메인 스레드에서 잡히지 않는 NegativeArraySizeException을 던져 com.android.phone이 죽습니다.

메시지는 데이터 SMS로 전달돼 사용자에게 보이지 않습니다. 수신함에 없고 발신 번호도 보이지 않습니다. 벡터는 WAP Push 포트 2948입니다.

영향

  • 제로클릭, 무음. 탭도 알림도 없습니다.
  • 진행 중인 통화가 끊깁니다. 긴급 통화 포함. 프로세스가 재시작하며 DisconnectCause CS_DEATH.
  • 메시지당 1~2초 통신 두절.
  • 통신사가 미확인 메시지를 재전송해 다시 죽입니다. 테스트에서 한 통으로 최대 일주일 간헐 장애. 약 20통이면 기기를 장기간 못 씁니다.
  • 메시지가 대기열에 남아 부팅마다 재시도되므로 재부팅 루프에 빠집니다. Android 12에서는 RescueParty가 약 90초마다 리커버리로 재부팅합니다.
  • Pixel 9(4월 펌웨어), 여러 삼성 Galaxy·A 시리즈에서 100% 재현.

복구는 ADB로만 됩니다. content://sms/raw의 WAP Push 행(destination_port=134020)을 부팅 직후 짧은 창에 지우는 방법이 공개돼 있고, 최후 수단은 텔레포니 프로바이더 초기화(SMS·MMS·APN 전부 삭제)입니다. 일반 사용자는 사실상 공장 초기화입니다.

시간표와 수정

  • 5월 5일: Android & Devices VRP에 신고. 한 줄짜리 범위 검사 수정안을 같은 날 제공.
  • 6월 15일: Android 엔지니어가 커밋 735d967 "Fix remote DoS in decodeWapPdu" 작성.
  • 10월 2026 보안 업데이트(Android 14~17)로 배포. 10월 패치 수준 이상이면 보호됩니다.
  • 10월 29일: 공개.

Google의 수정은 길이를 검증하는 대신 잡는 예외를 RuntimeException으로 넓혀 크래시를 삼키고, 디코드 실패 시 해당 메시지를 raw 테이블에서 지워 재전송과 부팅 시 재크래시를 막는 방식입니다.

글은 호주 사례를 들어 심각성을 설명합니다. 긴급 통화(000)가 안 되는 단말은 통신사가 서비스를 차단하도록 규정돼 있어, 공격자가 피해자 단말을 망에서 떼어 내는 효과까지 낼 수 있다는 겁니다.

글에 없는 것

CVE 번호, 실제 악용 여부, 삼성 등 제조사별 10월 패치 배포 일정, Android 13 이하의 처리. 100% 재현은 저자의 테스트 기준입니다.

실무에서 할 일

업무용 Android 단말의 보안 패치 수준을 2026-10-01 이상으로 맞추세요. MDM에서 패치 수준을 조건으로 걸 수 있으면 겁니다. 제조사 배포가 늦은 모델은 목록을 만들어 두고, 통화가 이유 없이 끊기거나 재부팅 루프에 빠진 단말이 나오면 이 글의 ADB 복구 절차를 지원팀에 넘기세요. PoC가 Apache 2.0으로 공개돼 있으니, 자기 기기 외에는 절대 돌리면 안 됩니다.

2026년 10월 29일에 올라온 글

그날 대시보드 →
  1. ·Claude Code가 백그라운드 에이전트 전사를 30초마다 모델에 보낸다 — 상태 줄 다섯 단어에 지출의 16%
  2. ·Mistral Large 4 가중치 공개 — 1T 파라미터, '수정된 MIT'지만 Model-as-a-Service는 별도 계약

댓글

불러오는 중…