Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/kpatsakis/cve-2026-36834
Memory ForensicsAnalisi delle VulnerabilitàFuzzingAnalisi di BinariPaper e RicercaApprendimento e Formazione
GitHubkpatsakis/cve-2026-36834

CVE-2026-36834

Proof-of-concept riproducibile per CVE-2026-36834 che dimostra una lettura di array fuori dai limiti nel decoder Panasonic RW2 di LibRaw, con script di mutazione e riproduzione del crash basata su sanitizer.

Vedi Repository
32 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Sommario

Esiste una lettura di array fuori dai limiti in src/decoders/pana8.cpp. La funzione GetDBit() può restituire il valore 17 quando non viene trovata una corrispondenza nella tabella di Huffman, ma huff_coeff[] è dichiarato con soli 17 elementi (indici validi 0-16). Ciò comporta l'accesso a huff_coeff[17], innescando un comportamento indefinito confermato da UBSan e AddressSanitizer.

Impatto

Le applicazioni che elaborano file RW2 forniti dall'utente, come editor di immagini o strumenti di gestione fotografica che utilizzano LibRaw, potrebbero bloccarsi o potenzialmente divulgare memoria di processo aprendo un file dannoso.

CWE: CWE-125 (Lettura fuori dai limiti), CWE-129 (Convalida impropria dell'indice dell'array) CVSS v3.1: AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H (~6.5 Medium)

Git commit: 777f20ae21c611a78021bd051fbbf1e71eae78f2

Codice interessato

File: src/decoders/pana8.cpp Funzione: pana8_param_t::DecodeC8()

La causa principale è in 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 il confronto è falso: restituisce 0 ^ 17 = 17
  }

Il valore restituito viene quindi utilizzato direttamente come indice di array senza controllo dei limiti:

root@kitploit:~
  huff_index = int(GetDBit(pixbits));          // può essere 17
  int32_t v37 = (huff_coeff[huff_index] >> 24) // riga 250: OOB
  uint32_t hc = huff_coeff[huff_index];        // riga 251: OOB
  // ... e righe 254, 273

Catena di chiamate confermata (output 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 attivato

Errori UBSan attivati: pana8.cpp:250 indice 17 fuori dai limiti per il tipo 'unsigned int [17]' pana8.cpp:251 indice 17 fuori dai limiti per il tipo 'unsigned int [17]' pana8.cpp:254 indice 17 fuori dai limiti per il tipo 'unsigned int [17]' pana8.cpp:254 esponente di shift -17 negativo pana8.cpp:273 indice 17 fuori dai limiti per il tipo 'unsigned int [17]' pana8.cpp:303 shift a sinistra di valore negativo -1

Riproduzione

Compila LibRaw con sanitizers:

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

Esegui lo script di mutazione su qualsiasi file 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

Patch

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

Scarica lo strumento