<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>smsofdeath.com</title>
  <subtitle>Browse aymeric&#39;s, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.</subtitle>
  <id>https://aggr.aymericbeaumet.com/sources/smsofdeath.com/</id>
  <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/sources/smsofdeath.com/"/>
  <link rel="self" type="application/atom+xml" href="https://aggr.aymericbeaumet.com/sources/smsofdeath.com/atom.xml"/>
  <updated>2026-10-29T07:08:50+00:00</updated>
  <author>
    <name>aymeric&#39;s</name>
  </author>
  <generator version="2.0.0" uri="https://github.com/aymericbeaumet/aggr">aggr</generator>
  <entry>
    <id>urn:aggr:item:c6992e16be563c05ba8aa57818e41657c3c2ae69</id>
    <title type="text">Zero click, silent, remote Android DoS</title>
    <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/items/hnrss-org/2026-10-29-zero-click-silent-remote-android-dos/"/>
    <link rel="via" type="text/html" href="https://smsofdeath.com/"/>
    <published>2026-10-29T07:08:50+00:00</published>
    <updated>2026-10-29T07:08:50+00:00</updated>
    <author>
      <name>MarkBlah</name>
    </author>
    <category term="news"/>
    <source>
      <title>Hacker News: Front Page</title>
    </source>
    <summary type="text">Android Telephony · Zero-Click · Remote DoS A single malformed WAP Push SMS crashes com.android.phone on Android, dropping active calls (including emergency calls), with zero interaction from the victim. ⚠ Working proof-of-concept,…</summary>
    <content type="html">&lt;p&gt;Android Telephony · Zero-Click · Remote DoS&lt;/p&gt;
&lt;p&gt;A single malformed &lt;strong&gt;WAP Push&lt;/strong&gt; SMS crashes &lt;strong&gt;com.android.phone&lt;/strong&gt; on Android, dropping active calls (&lt;strong&gt;including emergency calls&lt;/strong&gt;), with &lt;strong&gt;zero interaction&lt;/strong&gt; from the victim.&lt;/p&gt;
&lt;p&gt;⚠ Working proof-of-concept, authorised testing only. &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://smsofdeath.com/#poc&quot;&gt;Read the warning &amp;amp; license&lt;/a&gt; before downloading.&lt;/p&gt;
&lt;p&gt;Component&lt;/p&gt;
&lt;p&gt;WapPushOverSmsframeworks/opt/telephony&lt;/p&gt;
&lt;p&gt;Interaction&lt;/p&gt;
&lt;p&gt;Nonezero-click, silent&lt;/p&gt;
&lt;p&gt;Vector&lt;/p&gt;
&lt;p&gt;Remote SMSWAP Push, port 2948&lt;/p&gt;
&lt;p&gt;Vendor status&lt;/p&gt;
&lt;p&gt;● Won&#39;t Fix classified Non-Security&lt;/p&gt;
&lt;p&gt;Reporter&lt;/p&gt;
&lt;p&gt;Mark Blaszczykindependent&lt;/p&gt;
&lt;p&gt;Reported&lt;/p&gt;
&lt;p&gt;5 May 2026Android &amp;amp; Devices VRP&lt;/p&gt;
&lt;p&gt;Disclosed&lt;/p&gt;
&lt;p&gt;29 Oct 2026after 90-day timeline&lt;/p&gt;
&lt;p&gt;CVE&lt;/p&gt;
&lt;p&gt;Noneno CVE issued&lt;/p&gt;
&lt;p&gt;01 / The vulnerability&lt;/p&gt;
&lt;h2&gt;An unchecked cast turns a 5-byte header into a negative array size&lt;/h2&gt;
&lt;p&gt;When Android receives a WAP Push message, &lt;code&gt;WapPushOverSms.decodeWapPdu()&lt;/code&gt; reads the WSP header length as a &lt;code&gt;uintvar&lt;/code&gt;. The value comes back as a &lt;code&gt;long&lt;/code&gt;, is cast to &lt;code&gt;int&lt;/code&gt; with no range check, and is then used directly as the size of a new byte array:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot;&gt;// WapPushOverSms.java:217  header length read as long, cast with no bounds check
int headerLength = (int) pduDecoder.getValue32();
    ...
// WapPushOverSms.java:244  the cast value is used as an array size
byte[] header = new byte[headerLength];
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A 5-byte uintvar of &lt;code&gt;88 80 80 80 00&lt;/code&gt; decodes to &lt;code&gt;0x80000000&lt;/code&gt;. Cast to a signed 32-bit &lt;code&gt;int&lt;/code&gt;, that is &lt;code&gt;-2147483648&lt;/code&gt;. Allocating &lt;code&gt;new byte[-2147483648]&lt;/code&gt; throws an uncaught &lt;code&gt;NegativeArraySizeException&lt;/code&gt; on the telephony main thread, killing &lt;code&gt;com.android.phone&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot;&gt;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)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The message is delivered as a data SMS and is never shown to the user: there is nothing in the inbox, and the victim never sees the sender&#39;s number.&lt;/p&gt;
&lt;p&gt;02 / Impact&lt;/p&gt;
&lt;h2&gt;Remote, silent, and recoverable only with effort&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero-click.&lt;/strong&gt; The victim does nothing. No tap, no open, no notification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Silent.&lt;/strong&gt; Nothing appears in Messages; the attacker&#39;s number is never shown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calls drop, including emergency calls.&lt;/strong&gt; Active voice calls terminate with &lt;code&gt;DisconnectCause CS_DEATH&lt;/code&gt; as the process restarts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Telephony blackout.&lt;/strong&gt; 1-2 seconds of no service per message while &lt;code&gt;com.android.phone&lt;/code&gt; restarts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carrier redelivery amplifies it.&lt;/strong&gt; Unacknowledged messages are re-sent by the carrier, re-crashing the phone; a single message caused intermittent outages for up to a week in testing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~20 messages&lt;/strong&gt; render the device unusable for an extended period.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent denial of service.&lt;/strong&gt; Rapid repeated delivery corrupts the SQLite database behind SMS storage, turning a momentary crash into a phone that crashes on every boot (detailed below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tested across multiple makes and models (Pixel 9 on April 2026 firmware, various Samsung Galaxy and A-series) with a 100% reproduction rate.&lt;/p&gt;
&lt;h3&gt;From a 2-second crash to a bricked phone: the SQLite race&lt;/h3&gt;
&lt;p&gt;A single message is a repeated transient outage. Sending the payload rapidly in succession (≈30 messages) is materially worse: the crashes interleave with the telephony provider&#39;s writes to the SMS store and hit a &lt;strong&gt;race condition that corrupts the SQLite database&lt;/strong&gt; holding the device&#39;s messages.&lt;/p&gt;
&lt;p&gt;Once the database is corrupt, &lt;code&gt;com.android.phone&lt;/code&gt; no longer needs a fresh message to fail: it &lt;strong&gt;crashes immediately on every boot&lt;/strong&gt; as it reads the damaged store. The phone is now persistently without telephony, and a restart does not clear it.&lt;/p&gt;
&lt;p&gt;Recovery is hostile, and this is the critical part: a &lt;strong&gt;factory reset only helps temporarily&lt;/strong&gt;, because the carrier re-sends the unacknowledged payload and re-triggers the crash. Full recovery required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removing the physical SIM and inserting it into a &lt;strong&gt;non-Android device&lt;/strong&gt; (e.g. an iPhone) so the carrier&#39;s retried messages are acknowledged and stop being redelivered;&lt;/li&gt;
&lt;li&gt;Then clearing the SMS records / corrupt database over &lt;strong&gt;ADB&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On a device using an &lt;strong&gt;eSIM&lt;/strong&gt;, where the SIM can&#39;t simply be moved to another handset, recovery would be significantly harder, and for a non-technical user, effectively out of reach.&lt;/p&gt;
&lt;p&gt;This is the distinction the report turns on. It is not a transient crash: it is a &lt;strong&gt;remote, zero-click, persistent denial of service requiring a factory reset (and more) to recover&lt;/strong&gt;, which is the exact shape of a &amp;quot;Destructive Remote DoS&amp;quot; in the VRP&#39;s own rules.&lt;/p&gt;
&lt;p&gt;03 / Why this is serious&lt;/p&gt;
&lt;h2&gt;A remote attacker can cut a phone off from Triple Zero&lt;/h2&gt;
&lt;p&gt;Dropping calls is not an inconvenience when one of those calls is to emergency services. While a device is under this attack, or bricked by the SQLite corruption, it cannot reliably place a call to &lt;strong&gt;000&lt;/strong&gt;. The attack is remote, needs only the victim&#39;s number, and shows them nothing.&lt;/p&gt;
&lt;p&gt;Australia treats access to emergency calling as a mandatory property of a mobile service, not a nice-to-have. Under the &lt;strong&gt;&lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://www.acma.gov.au/consultations/2024-09/proposal-amend-ecs-determination&quot;&gt;Telecommunications (Emergency Call Service) Determination&lt;/a&gt;&lt;/strong&gt;, administered by the ACMA, carriers are required to &lt;strong&gt;identify mobile phones that cannot reach Triple Zero, help the customer move to a working device, and stop providing service to the affected handset&lt;/strong&gt;. &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://www.telstra.com.au/support/mobiles-devices/3g-determination&quot;&gt;Telstra states plainly&lt;/a&gt; that it is required to block phones that can no longer call 000, notifying the customer and blocking the device if nothing is done within 28 days.&lt;/p&gt;
&lt;p&gt;The consequence is perverse: the regulatory remedy for a phone that can&#39;t reach 000 is to &lt;strong&gt;cut it off the network&lt;/strong&gt;, not to patch the OS. So an attacker who can remotely induce that condition on an Android handset can, in effect, get the victim&#39;s own device barred from carrier service until a fix exists. The regulation exists precisely because loss of emergency-call access is considered a public-safety failure; this bug manufactures that failure on demand.&lt;/p&gt;
&lt;p&gt;The framework was &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://oia.pmc.gov.au/published-impact-analyses-and-reports/requirements-identify-and-manage-mobile-phones-unable-access&quot;&gt;tightened in 2024&lt;/a&gt; following the 3G shutdown, which left some phones able to make ordinary calls but unable to reach emergency services, the same functional state this vulnerability produces.&lt;/p&gt;
&lt;p&gt;Sources: &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://www.acma.gov.au/consultations/2024-09/proposal-amend-ecs-determination&quot;&gt;ACMA: proposed amendments to the ECS Determination&lt;/a&gt; · &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://www.telstra.com.au/support/mobiles-devices/3g-determination&quot;&gt;Telstra: Emergency Call Service Determination&lt;/a&gt; · &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://oia.pmc.gov.au/published-impact-analyses-and-reports/requirements-identify-and-manage-mobile-phones-unable-access&quot;&gt;Dept. of PM&amp;amp;C: impact analysis&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;04 / The fix&lt;/p&gt;
&lt;h2&gt;One bounds check&lt;/h2&gt;
&lt;p&gt;The remedy is a range check before the cast in &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://android.googlesource.com/platform/frameworks/opt/telephony/+/refs/heads/main/src/java/com/android/internal/telephony/WapPushOverSms.java#217&quot;&gt;&lt;code&gt;WapPushOverSms.java&lt;/code&gt; (line 217)&lt;/a&gt;, provided to Google on the day of the first report:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot;&gt;long rawHeaderLen = pduDecoder.getValue32();
if (rawHeaderLen &amp;lt; 0 || rawHeaderLen &amp;gt; pdu.length) {
    result.statusCode = Intents.RESULT_SMS_GENERIC_ERROR;
    return result;
}
int headerLength = (int) rawHeaderLen;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;05 / Disclosure timeline&lt;/p&gt;
&lt;h2&gt;Communication with Google&lt;/h2&gt;
&lt;p&gt;The report was filed through the Android &amp;amp; Google Devices VRP and resubmitted twice as a mis-triage appeal. Across three tickets and four engineers, Google classified it as a non-security issue.&lt;/p&gt;
&lt;p&gt;Researcher Android Security Team Status change&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 May 2026 Researcher Report filed: zero-click WAP Push crash in &lt;code&gt;WapPushOverSms&lt;/code&gt; (issue 509520497). Suggested fix provided the same day.&lt;/li&gt;
&lt;li&gt;5 May 2026 Android Security Assigned for investigation; researcher asked to follow coordinated disclosure.&lt;/li&gt;
&lt;li&gt;15 May 2026 Researcher Requests higher priority: reproduced on 5 handsets, emergency-call impact, Australian carrier regulations.&lt;/li&gt;
&lt;li&gt;20 Jun 2026 Android Security Closed Won&#39;t Fix (Infeasible): &amp;quot;not a security vulnerability.&amp;quot;&lt;/li&gt;
&lt;li&gt;20 Jun 2026 Researcher Clarifies this is a remote permanent DoS; ~20 messages permanently disable the phone. Resubmits as appeal (issues 525810560 and 525816147, &amp;quot;SMS of DEATH&amp;quot;).&lt;/li&gt;
&lt;li&gt;20 Jun 2026 Android Security Resubmit 525810560 closed within 3 minutes Won&#39;t Fix (Not Reproducible).&lt;/li&gt;
&lt;li&gt;22 Jun 2026 Researcher Reports SQLite corruption from rapid sends → crash on boot; recovery needs SIM swap to a non-Android device + ADB.&lt;/li&gt;
&lt;li&gt;23 Jun 2026 Android Security Requests disclosure plans; reminds of the 90-day VRP timeline and asks to review any write-up in advance.&lt;/li&gt;
&lt;li&gt;23 Jun 2026 Researcher Agrees to hold for public safety; offers to brief Australian carriers so they can schedule a block. Restates the one-line fix.&lt;/li&gt;
&lt;li&gt;2-3 Jul 2026 Android Security Appeal marked Duplicate of the original; re-evaluation confirms same root cause.&lt;/li&gt;
&lt;li&gt;16 Jul 2026 Android Security Original reopened after the issue surfaced on Discord, then confirmed a duplicate again.&lt;/li&gt;
&lt;li&gt;16 Jul 2026 Researcher Adds detail: the behaviour meets the VRP&#39;s own &amp;quot;Destructive Remote DoS&amp;quot; criterion.&lt;/li&gt;
&lt;li&gt;17 Jul 2026 Android Security Acknowledges the extra context; triage to take another look: &amp;quot;4 engineers will have evaluated the report.&amp;quot;&lt;/li&gt;
&lt;li&gt;27 Oct 2026 Researcher Requests a status update after three months of silence.&lt;/li&gt;
&lt;li&gt;29 Oct 2026 Android Security Final decision: Won&#39;t Fix, quoting &amp;quot;does not meet the severity threshold ... considered a Non-Security Issue (NSI).&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why this is public.&lt;/strong&gt; The issue was reported privately and held well beyond the VRP&#39;s 90-day window. Google declined to fix it across three tickets and four engineers, classifying a remote, zero-click, emergency-call-dropping denial of service as a non-security issue. Full disclosure follows so that users, carriers and downstream OEMs can assess the risk and mitigate.&lt;/p&gt;
&lt;p&gt;06 / Proof of concept&lt;/p&gt;
&lt;h2&gt;Source &amp;amp; APK&lt;/h2&gt;
&lt;p&gt;The proof-of-concept Android app and full source code are published on GitHub. The app crafts the malformed WAP Push PDU and sends it as a data SMS to a target number.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning: this is a working weapon.&lt;/strong&gt; The repository contains a proof-of-concept that can remotely disrupt and brick mobile phones. It is published strictly for security research, education, and defensive testing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Only run it against devices you own or are explicitly authorised to test.&lt;/strong&gt; Using it against anyone else is a crime, and interfering with a person&#39;s ability to reach emergency services (000) is a serious criminal offence in Australia and most countries.&lt;/p&gt;
&lt;p&gt;The software is provided &amp;quot;as is&amp;quot;, with no warranty, under the &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://github.com/MarkBlah/smsofdeath/blob/main/LICENSE&quot;&gt;Apache License 2.0&lt;/a&gt;. &lt;strong&gt;The author accepts no liability for any use, misuse, or damage.&lt;/strong&gt; By downloading the APK or the source, you accept full responsibility for what you do with it.&lt;/p&gt;
</content>
  </entry>
</feed>
