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-2026-36834 — Out-of-bounds array read in LibRaw | Kitploit
Ferramentas/GitHubGitHub/kpatsakis/cve-2026-36834
Memory ForensicsVulnerability AnalysisFuzzingBinary AnalysisPapers & ResearchLearning & Education
GitHubkpatsakis/cve-2026-36834

CVE-2026-36834

Out-of-bounds array read in LibRaw

Ver Repositório
há 1 mêsAinda 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

Resumo

Existe uma leitura de array fora dos limites em src/decoders/pana8.cpp. A função GetDBit() pode retornar o valor 17 quando nenhuma correspondência na tabela Huffman é encontrada, mas huff_coeff[] é declarado com apenas 17 elementos (índices válidos 0-16). Isso resulta no acesso a huff_coeff[17], desencadeando comportamento indefinido confirmado pelo UBSan e AddressSanitizer.

Impacto

Aplicações que processam arquivos RW2 fornecidos pelo usuário, como editores de imagem ou ferramentas de gerenciamento de fotos que utilizam LibRaw, podem travar ou potencialmente vazar memória do processo ao abrir um arquivo malicioso.

CWE: CWE-125 (Leitura Fora dos Limites), CWE-129 (Validação Incorreta de Índice de Array) CVSS v3.1: AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H (~6.5 Médio)

Git commit: 777f20ae21c611a78021bd051fbbf1e71eae78f2

Código afetado

Arquivo: src/decoders/pana8.cpp Função: pana8_param_t::DecodeC8()

A causa raiz está em GetDBit():

root@kitploit:~
  uint32_t pana8_param_t::GetDBit(uint64_t a2)
  {
      for (int i = 0; i < 16; i++)
          if ((a2 & hufftable2[i]) == hufftable1[i])
              return i;
      return uint32_t((hufftable2[16] & a2) == hufftable1[16]) ^ 0x11u;
      // Quando a comparação é falsa: retorna 0 ^ 17 = 17
  }

O valor retornado é então usado diretamente como índice de array sem verificação de limites:

root@kitploit:~
  huff_index = int(GetDBit(pixbits));          // pode ser 17
  int32_t v37 = (huff_coeff[huff_index] >> 24) // linha 250: OOB
  uint32_t hc = huff_coeff[huff_index];        // linha 251: OOB
  // ... e linhas 254, 273

Cadeia de chamadas confirmada (saída do UBSan) LibRaw::unpack() -> panasonicC8_load_raw() pana8.cpp:125 -> pana8_decode_loop() pana8.cpp:132 -> pana8_decode_strip() pana8.cpp:155 -> DecodeC8() pana8.cpp:250 <-- OOB acionado

Erros do UBSan acionados: pana8.cpp:250 index 17 out of bounds for type 'unsigned int [17]' pana8.cpp:251 index 17 out of bounds for type 'unsigned int [17]' pana8.cpp:254 index 17 out of bounds for type 'unsigned int [17]' pana8.cpp:254 shift exponent -17 is negative pana8.cpp:273 index 17 out of bounds for type 'unsigned int [17]' pana8.cpp:303 left shift of negative value -1

Reprodução

Compile o LibRaw com sanitizers:

root@kitploit:~
  ./configure CXXFLAGS="-fsanitize=address,undefined -g -O1" \
            LDFLAGS="-fsanitize=address,undefined"
  make -j$(nproc)

Execute o script mutator em qualquer arquivo RW2 Panasonic:

root@kitploit:~
  python3 mutate_rw2.py input.rw2 mutated_pana8.rw2
  ASAN_OPTIONS=halt_on_error=0:print_stats=1 ./bin/dcraw_emu -v mutated_pana8.rw2

Correção

https://github.com/LibRaw/LibRaw/commit/02da167e0f819a37dbb7d714e87c5b40df6c5917

Baixar ferramenta