LINUX.ORG.RU

Эксплуатируемая через SMS уязвимость в Android, приводящая к зацикленной перезагрузке

 , ,


0

1

Раскрыты детали и опубликован эксплоит для уязвимости (CVE-2026-58882) в платформе Android, позволяющей добиться зацикленной перезагрузки через отправку специально оформленного SMS-сообщения. Для устранения зацикленной перезагрузки требуется сброс к заводским настройкам или ручные манипуляции при помощи утилиты ADB. Уязвимость получила кодовое имя «SMS of Death» и устранена в октябрьском обновлении репозитория AOSP. Производители устройств получили доступ к патчу в июле. Атака может быть совершена на любые телефоны, оснащённые Android 12-17. Обновление выпущено только для Android 14-17. Эксплуатирующее уязвимость SMS-сообщение обрабатывается как фоновое и не отображается на устройстве. Для проведения атаки не требуется выполнение пользователем каких-либо действий.

Проблема вызвана неконтролируемым приведением типа при обработке некорректного заголовка WAP Push-сообщения, отправленного через SMS. Переполнение возникает так как поле с размером заголовка приводится из беззнакового значения (uintvar) к 32-разрядному знаковому типу int без должной проверки границ. Из-за приведения 64-битного типа long в 32-битный int в Java корректное с точки зрения протокола значение 0x80000000 интерпретируется как отрицательное число -2147483648 в переменной headerLength. В дальнейшем эта переменная используется при выделении памяти через вызов «new byte[headerLength]», что в случае получения отрицательного числа приводит к генерации исключения и аварийному завершению процесса com.android.phone.

Через несколько секунд процесс перезапускается, но эффект не ограничивается кратковременным прерыванием связи. Проблемное WAP Push-сообщение из-за аварийного завершения продолжает находиться в очереди необработанных сообщений и новая попытка его обработки приводит к очередному аварийному завершению процесса com.android.phone.

После серии подобных падений срабатывает обработчик RescueParty, который перезагружает устройство в режим Recovery, в котором предлагается выполнить сброс к заводским настройкам. Простая перезагрузка не помогает - если проблемное сообщение не удалено из очереди, примерно через 90 секунд устройство опять будет перезагружено.

Для удаления сообщения из очереди без сброса к заводским настройкам предлагается использовать утилиту adb:


   adb shell content query --uri content://sms/raw --projection _id:destination_port:date:deleted
   adb shell cmd appops set com.android.shell WRITE_SMS allow
   adb shell "content delete --uri content://sms/raw --where \"address='<SENDER>'\""
   adb shell cmd appops set com.android.shell WRITE_SMS default
   adb shell pm clear com.android.providers.telephony

Но это лишь даст возможность извлечь SIM-карту, загрузиться и установить обновление прошивки. Так как из-за аварийного завершения процесса «com.android.phone» оператору связи не отправляется подтверждение обработки WAP Push-сообщения, до истечения таймаута он будет предпринимать новые попытки отправки и ситуация будет повторяться. В проведённых тестах повторные отправки продолжались от суток до недели. Для устройств, производители которых прекратили публикацию обновлений прошивки, обходного пути блокирования проблемы пока нет, кроме обращения к оператору связи с просьбой блокировки передачи сообщений WAP Push на его стороне.

https://www.opennet.ru/opennews/art.shtml?num=66586

Переполнение возникает так как поле с размером заголовка приводится из беззнакового значения (uintvar) к 32-разрядному знаковому типу int без должной проверки границ. Из-за приведения 64-битного типа long в 32-битный int в Java корректное с точки зрения протокола значение 0x80000000 интерпретируется как отрицательное число -2147483648 в переменной headerLength. В дальнейшем эта переменная используется при выделении памяти через вызов «new byte[headerLength]», что в случае получения отрицательного числа приводит к генерации исключения и аварийному завершению процесса com.android.phone.

Ну, то что бездумный signed-дефолт это плохо я уже давно писал (в данном случае - в спецификациях джавы). Но тут непонятно - а если бы там 0x7FFFFFFF было, всё было бы норм и выделение 2гигабайтного массива бы делалось? Или 0xFFFFFFFF - оно не покрашит? Аллокация byte[-1] же. Не хватает подробностей.

firkax ★★★★★
()
Ответ на: комментарий от firkax

бездумный signed-дефолт это плохо я уже давно писал (в данном случае - в спецификациях джавы)

А в джаве есть беззнаковые типы? Если только char

cobold ★★★★★
()

Касательно остальных аспектов - я не понял речь про смс или про что-то другое? Я могу такую смску сам кому-то послать или эти сообщения только оператор может формировать?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Install on a sender device, enter (or auto-fill from an active SIM) the target number, pick the sending SIM, and tap SEND CRASH SMS.

У тебя ж нет андроида, так что не можешь. Или ты с чего хотел слать, со своего кнопочного?

anonymous
()
Ответ на: комментарий от anonymous

У меня модем есть, через AT-команды можно любые блобы в смс отправлять.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Ну почитай сорцы по ссылке и повтори руками, в чем проблема?

anonymous
()
Ответ на: комментарий от cobold

Документ по ссылке какой-то странный, похож на список исправлений чего-то. В любом случае, про отправку смс в нём ничего нет.

Но я зашёл на гитхаб, там написано что надо слать смс с таким payload

01 06 88 80 80 80 00 BE

firkax ★★★★★
()

Не совсем оффтоп, сейчас увидел и очень рассмешило.

https://www.opennet.ru/opennews/art.shtml?num=66585

уязвимость позволяла выполнить код на сервере через указание специально оформленного email. Проблема была вызвана отсутствием должного экранирования спецсимволов и могла быть эксплуатирована через указание при регистрации email вида «atouch${IFS}/tmp/savane-rce-proof@example.com» с последующим нажатием в web-интерфейсе кнопки проверки GPG-ключа (email подставлялся в строку запуска утилиты gpg, вызываемую через PHP-функцию proc_open()).

Если кто-то будет вспоминать саванну, я бы хотел ссылаться на этот случай. Наверное человек типа фирфакс писал на php.

anonymous
()
Ответ на: комментарий от anonymous

Права root на сервере были получены через эксплуатацию до этого уже известной уязвимости в ядре Linux, которое не было обновлено на сервере (был установлен дистрибутив Trisquel GNU/Linux 11 на базе Ubuntu 22.04 с ядром linux-libre 5.15)

Как перестать смеяться? И эти люди учат других.

anonymous
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария