ゼロクリック、サイレント、リモートAndroid DoS
Zero click, silent, remote Android DoS (smsofdeath.com)
要約
不正な形式のWAP Push SMS1通が、ユーザーの操作なしにAndroidのcom.android.phoneプロセスをクラッシュさせ、アクティブな通話(緊急通話を含む)を切断します。この脆弱性は、SMS受信トレイに表示されず、攻撃者の番号も表示されないため、ゼロクリックかつサイレントに実行されます。繰り返し送信されると、デバイスは永続的なサービス不能状態に陥る可能性があります。
全文翻訳
SMS of Death
Android Telephony · Zero-Click · Remote DoS
不正な形式のWAP Push SMS1通がAndroidのcom.android.phoneをクラッシュさせ、アクティブな通話(緊急通話を含む)を切断します。被害者のゼロインタラクションで実行されます。
⚠ 動作する概念実証(Proof-of-Concept)があります。 authorised testing only. 警告とライセンスを読む前にダウンロードしてください。
コンポーネント
WapPushOverSms
frameworks/opt/telephony
インタラクション
なし
ゼロクリック、サイレント
ベクトル
リモートSMS
WAP Push, port 2948
ベンダーのステータス
● Fixしない(Won't Fix)
非セキュリティ(Non-Security)と分類
報告者
Mark Blaszczyk
インディペンデント
報告日
2026年5月5日
Android & Devices VRP
開示日
2026年10月29日
90日間のタイムライン後
CVE
なし
CVEは発行されず
01 / 脆弱性の概要
チェックされていないキャストが5バイトのヘッダーを負の配列サイズに変える
AndroidがWAP Pushメッセージを受信すると、WapPushOverSms.decodeWapPdu()はWSPヘッダー長をuintvarとして読み取ります。値はlongとして返され、範囲チェックなしでintにキャストされ、新しいバイト配列のサイズとして直接使用されます。
// WapPushOverSms.java:217
// ヘッダー長はlongとして読み取られ、範囲チェックなしでキャストされる
int headerLength = (int) pduDecoder.getValue32();
...
// WapPushOverSms.java:244
// キャストされた値が配列サイズとして使用される
byte[] header = new byte[headerLength];
0x80000000としてデコードされる5バイトのuintvar 88 80 80 80 00。符号付き32ビットintにキャストすると、-2147483648になります。new byte[-2147483648]の割り当ては、テレフォニーメインスレッドで未捕捉のNegativeArraySizeExceptionをスローし、com.android.phoneをクラッシュさせます。
E AndroidRuntime: FATAL EXCEPTION: main
E AndroidRuntime: Process: com.android.phone
E AndroidRuntime: java.lang.NegativeArraySizeException: -2147483648
E AndroidRuntime: at ...WapPushOverSms.decodeWapPdu(WapPushOverSms.java:244)
E AndroidRuntime: at ...WapPushOverSms.dispatchWapPdu(WapPushOverSms.java:339)
E AndroidRuntime: at ...InboundSmsHandler.processMessagePart(InboundSmsHandler.java:1169)
E AndroidRuntime: at ...InboundSmsHandler$DeliveringState.processMessage(InboundSmsHandler.java:627)
メッセージはデータSMSとして配信され、ユーザーには表示されません。受信トレイに何も表示されず、被害者は送信者の番号を見ることもありません。
02 / 影響
リモート、サイレント、そして復旧には手間がかかる
- ゼロクリック。被害者は何も操作しません。タップも、オープンも、通知もありません。
- サイレント。メッセージアプリに何も表示されず、攻撃者の番号も表示されません。
- 通話が切断される、緊急通話も含む。アクティブな音声通話は、プロセス再起動に伴い
DisconnectCause CS_DEATHとして終了します。 - テレフォニーのブラックアウト。
com.android.phoneが再起動する間、1〜2秒間のサービス停止が発生します。 - キャリアの再配信が事態を悪化させる。未確認のメッセージはキャリアによって再送信され、電話を再クラッシュさせます。テストでは、単一のメッセージが最大1週間断続的な障害を引き起こしました。
- 約20通のメッセージで、デバイスは長期間使用不能になります。
- 永続的なサービス不能。メッセージの急速な繰り返し配信は、SMSストレージの背後にあるSQLiteデータベースを破損させ、一時的なクラッシュを、起動ごとにクラッシュする電話に変えます(詳細は後述)。
複数のメーカーとモデル(2026年4月ファームウェアのPixel 9、様々なSamsung GalaxyおよびAシリーズ)でテストし、100%再現率を確認しました。
2秒間のクラッシュからブリックされた電話へ:SQLiteレース
単一のメッセージは断続的な障害です。ペイロードを連続して(約30メッセージ)送信すると、事態はさらに悪化します。クラッシュはテレフォニープロバイダーのSMSストアへの書き込みとインターリーブし、メッセージを保持するSQLiteデータベースを破損させる競合状態を引き起こします。
データベースが破損すると、com.android.phoneはもはや新しいメッセージを必要としません。起動時に破損したストアを読み込むと、起動ごとに即座にクラッシュします。電話は永続的にテレフォニーなしの状態になり、再起動してもクリアされません。
復旧は困難であり、これが重要な点です。工場出荷時リセットは一時的にしか役立ちません。なぜなら、キャリアは未確認のペイロードを再送信し、クラッシュを再トリガーするからです。完全な復旧には以下が必要でした。
- 物理SIMカードを取り外し、非Androidデバイス(例:iPhone)に挿入することで、キャリアの再試行メッセージが確認され、再配信が停止されるようにする。
- その後、ADB経由でSMSレコード/破損したデータベースをクリアする。
eSIMを使用しているデバイスでは、SIMカードを別のハンドセットに簡単に移動できないため、復旧は大幅に困難になり、非技術的なユーザーにとっては事実上手の届かないものになります。
この報告が焦点を当てるのはこの区別です。これは一時的なクラッシュではありません。これは、リモート、ゼロクリック、永続的なサービス不能であり、工場出荷時リセット(およびそれ以上)が必要な状態であり、これはVRP自身のルールにおける「破壊的なリモートDoS」のまさにその形状です。
03 / なぜこれが深刻なのか
リモート攻撃者が電話をトリプルゼロから切り離すことができる
通話が緊急サービスへのものである場合、通話の切断は単なる不便ではありません。この攻撃下にある、またはSQLite破損によってブリックされたデバイスは、000への通話を確実に発信できません。攻撃はリモートで実行され、被害者の電話番号のみが必要で、被害者には何も表示されません。
オーストラリアでは、緊急通話サービスへのアクセスは、モバイルサービスの必須の特性として扱われ、単なる「あれば便利」ではありません。ACMAが管理する電気通信(緊急通話サービス)決定(Telecommunications (Emergency Call Service) Determination)に基づき、キャリアはトリプルゼロに到達できない携帯電話を特定し、顧客が動作するデバイスに移行するのを支援し、影響を受けたハンドセットへのサービス提供を停止する義務があります。Telstraは、000に電話できない電話をブロックする義務があり、顧客に通知し、何も行われない場合は28日後にデバイスをブロックすると明確に述べています。
結果は逆効果です。000に電話できない電話に対する規制上の救済策は、OSをパッチすることではなく、ネットワークから切り離すことです。したがって、Androidハンドセットでその状態をリモートで誘発できる攻撃者は、実際には修正が存在するまで、被害者自身のデバイスをキャリアサービスから締め出すことができます。この規制は、緊急通話アクセスを失うことが公共安全の失敗と見なされるまさにその理由のために存在します。このバグは、その失敗をオンデマンドで製造します。
このフレームワークは、3Gシャットダウンに続いて2024年に強化されました。これにより、一部の電話は通常の通話はできても緊急サービスに到達できなくなりました。これは、この脆弱性が生み出す機能的な状態と同じです。
出典:ACMA: ECS決定の提案された修正 · Telstra: 緊急通話サービス決定 · PM&C省: 影響分析
04 / 修正
1つの範囲チェック
修正は、WapPushOverSms.java(217行目)のキャスト前の範囲チェックです。これは、最初の報告日にGoogleに提供されました。
long rawHeaderLen = pduDecoder.getValue32();
if (rawHeaderLen < 0 || rawHeaderLen > pdu.length) {
result.statusCode = Intents.RESULT_SMS_GENERIC_ERROR;
return result;
}
int headerLength = (int) rawHeaderLen;
05 / 開示タイムライン
Googleとのコミュニケーション
報告はAndroid & Google Devices VRPを通じて提出され、誤ったトリアージの申し立てとして2回再提出されました。3つのチケットと4人のエンジニアを経て、Googleはこの問題を非セキュリティ問題として分類しました。
| 研究者 | Android Security Team | ステータス変更 |
|---|---|---|
| 5 May 2026 | Researcher | 報告提出:WapPushOverSmsにおけるゼロクリックWAP Pushクラッシュ(issue 509520497)。同日、修正案を提示。 |
| 5 May 2026 | Android Security | 調査のために割り当て済み。協調開示に従うよう研究者に依頼。 |
| 15 May 2026 | Researcher | より高い優先度を要求:5台のハンドセットで再現、緊急通話への影響、オーストラリアのキャリア規制。 |
| 20 Jun 2026 | Android Security | Won't Fix (Infeasible)としてクローズ:「セキュリティ上の脆弱性ではない」。 |
| 20 Jun 2026 | Researcher | これはリモートでの永続的なDoSであると明確化。約20通のメッセージでデバイスが永続的に無効になる。申し立てとして再提出(issues 525810560 and 525816147、「SMS of DEATH」)。 |
| 20 Jun 2026 | Android Security | Resubmit 525810560は3分以内にクローズ。Won't Fix (Not Reproducible)。 |
| 22 Jun 2026 | Researcher | 高速送信によるSQLite破損 → 起動時のクラッシュを報告。復旧には非AndroidデバイスへのSIMスワップ + ADBが必要。 |
| 23 Jun 2026 | Android Security | 開示計画を要求。90日間のVRPタイムラインを再度通知し、執筆内容の事前レビューを依頼。 |
| 23 Jun 2026 | Researcher | 公共の安全のため保留に同意。オーストラリアのキャリアにブリーフィングを提供し、ブロックをスケジュールできるようにする。ワンライナー修正を再確認。 |
| 2-3 Jul 2026 | Android Security | 元の報告の重複として申し立てをマーク。再評価で同じ根本原因を確認。 |
| 16 Jul 2026 | Android Security | Discordで問題が浮上した後、元の報告を再オープンし、再度重複として確認。 |
| 16 Jul 2026 | Researcher | 追加情報:この動作はVRP自身の「破壊的なリモートDoS」基準を満たす。 |
| 17 Jul 2026 | Android Security | 追加コンテキストを認識。トリアージが再検討:「4人のエンジニアが報告を評価しました」。 |
| 27 Oct 2026 | Researcher | 3ヶ月の沈黙の後、ステータス更新を要求。 |
| 29 Oct 2026 | Android Security | 最終決定:Won't Fix。「セキュリティしきい値に達しない…非セキュリティ問題(NSI)と見なされる」と引用。 |
なぜこれが公開されるのか。 この問題はプライベートに報告され、VRPの90日間のウィンドウを大幅に超えて保留されていました。Googleは3つのチケットと4人のエンジニアにわたって修正を拒否し、リモート、ゼロクリック、緊急通話切断を伴うサービス不能を非セキュリティ問題として分類しました。完全な開示は、ユーザー、キャリア、および下流のOEMがリスクを評価し、軽減できるようにするためです。
06 / 概念実証
ソースとAPK
概念実証(Proof-of-Concept)のAndroidアプリと完全なソースコードはGitHubで公開されています。このアプリは不正な形式のWAP Push PDUを作成し、ターゲット番号にデータSMSとして送信します。
警告:これは動作する武器です。 リポジトリには、モバイルデバイスをリモートで妨害し、ブリックする可能性のある概念実証が含まれています。これは厳密にセキュリティ研究、教育、および防御テストのために公開されています。
所有しているデバイス、またはテストの明示的な許可を得ているデバイスに対してのみ実行してください。 他の誰かに対して使用することは犯罪であり、他人の緊急サービス(000)へのアクセスを妨害することは、オーストラリアおよびほとんどの国で重大な犯罪行為です。
ソフトウェアは「現状有姿」で提供され、いかなる保証もありません。 Apache License 2.0の下で提供されます。著者は、いかなる使用、誤用、または損害についても一切の責任を負いません。 APKまたはソースをダウンロードすることにより、それを使用して行うことすべてについて全責任を負うことに同意するものとします。