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
gdcm-security-poc — Pacchetto privato di riproduzione del sanitizer end-to-end per sei risultati di GDCM | Kitploit
Strumenti/GitHubGitHub/abhinavagarwal07/gdcm-security-poc
Analisi StaticaAnalisi Dinamica (Sandboxing)Memory ForensicsAnalisi delle VulnerabilitàExploitFuzzingAnalisi di BinariPaper e RicercaApprendimento e Formazione
GitHubabhinavagarwal07/gdcm-security-poc

gdcm-security-poc

Pacchetto privato di riproduzione del sanitizer end-to-end per sei risultati di GDCM

Vedi Repository
31 giorno 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

Reperti GDCM 1-6: pacchetto di riproduzione

Sei difetti di parser/codec in GDCM, riprodotti sulla v3.2.6 come fallimenti dei sanitizer o controlli di propagazione limitati. Ogni trigger automatizzato ha un controllo quasi-valido che non produce il segnale vulnerabile. Il reperto 1 include anche una primitiva di flusso di controllo strumentata.

Destinato alla revisione da parte dei manutentori e dei coordinatori delle vulnerabilità. Leggere SAFETY.md prima di eseguire qualsiasi cosa.

Target fissati

manifest/targets.env:

NomeRevisioneCos'è
vulnerable9c71b163tag v3.2.6
master2cd05d13snapshot upstream master revisionato staticamente; matrice runtime in sospeso
fixednon impostatopopolare solo quando esiste un commit di remediation revisionato

master è uno snapshot datato, non un branch in movimento. Entrambe le revisioni sono raggiungibili dal repository pubblico, quindi bootstrap.sh può preparare l'una o l'altra senza alcuna sorgente privata.

Ambito dei reperti

Le prove runtime in questo repository sono per la v3.2.6. Gli intervalli più ampi riportati di seguito provengono dall'ispezione della cronologia dei sorgenti; i pattern implicati rimangono anche nello snapshot master fissato.

#CWEIntervallo ispezionato nei sorgentiPercorso richiesto
1CWE-787da v3.0.4 a v3.2.7lettura multi-frame RLE YBR_FULL_422
2CWE-787da v2.0.16 a v3.2.7codifica/transcodifica JPEG2000
3CWE-125da v2.0.5 a v3.2.7parsing di palette segmentate; l'applicazione della LUT espone valori propagati
4CWE-787da v2.0.8 a v3.2.7ImageRegionReader::ReadIntoBuffer; correlato alla validazione di precisione incompleta dopo CVE-2024-22373
5CWE-674da v2.0.4 o precedente a v3.2.7parsing ordinario di sequenze annidate
6CWE-369da v2.0.4 o precedente a v3.2.7parsing RLE ordinario con NumSegments=0

Contenuti

  • fixtures/ - gli input DICOM inerti, con SHA-256 fissato in manifest/expectations.json e verificati prima di ogni esecuzione del trigger
  • generators/ - generatori di sorgenti deterministici e senza dipendenze per ogni fixture
  • harnesses/ - harness minimali di lettura/codifica/decodifica; il reperto 2 è mostrato sia tramite la CLI gdcmconv sia tramite l'API di transcodifica della libreria che un server chiamerebbe
  • manifest/expectations.json - comandi leggibili dalla macchina, segnali decisivi e criteri di accettazione per il target fixed
  • scripts/ - preparazione dei sorgenti fissati, build con sanitizer, esecuzione limitata, pulizia
  • evidence/ - risultati concisi già osservati, con i target non testati dichiarati esplicitamente
  • LICENSE - licenza MIT

Prerequisiti

Un ambiente di build Linux o macOS usa e getta con Git, Python 3, CMake 3.20+, Ninja e una toolchain C++11 (Clang o GCC). Su Ubuntu: git python3 cmake ninja-build clang zlib1g-dev. Impostare CC/CXX per usare GCC invece.

La preparazione dei sorgenti clona via HTTPS a meno che GDCM_SOURCE_REPO non punti a un clone locale esistente. Non viene usato alcun host SSH.

Preparazione e build

Questi comandi preparano solo sorgenti e artefatti di build; non aprono alcuna fixture.

root@kitploit:~
./scripts/build-target.sh vulnerable asan  debug
./scripts/build-target.sh vulnerable ubsan debug
./scripts/build-target.sh master     asan  debug
./scripts/build-target.sh master     ubsan debug

Il terzo argomento è il profilo. debug è -O0 -g; release è -O2 -g -DNDEBUG, che elimina le gdcm_debug_assert() di GDCM e corrisponde a come le distribuzioni compilano la libreria. Eseguire la matrice con entrambi risponde alla prima domanda che un manutentore pone, ovvero se i report sono un artefatto di una build con le asserzioni abilitate.

GDCM_SUPPORT_BROKEN_IMPLEMENTATION=ON è il default di GDCM stesso e viene lasciato invariato. Sovrascrivere il parallelismo conservativo con JOBS=8.

Ogni build scrive build-info.json (revisione, compilatore, flag, piattaforma) nel proprio albero di build GDCM, e ogni riepilogo di esecuzione lo incorpora, così le prove archiviate sono auto-descrittive.

Esecuzione

root@kitploit:~
export GDCM_REPRO_ACK=I_UNDERSTAND_THIS_CRASHES_A_LOCAL_PROCESS

./scripts/run-matrix.sh vulnerable master --profile debug   # all automated cases
./scripts/run-one.sh vulnerable f1                          # one trigger
./scripts/run-one.sh vulnerable f1 --control                # its control

run-matrix.sh esegue ogni caso automatizzato per ogni target, non si ferma al primo fallimento e scrive _runs/matrix-<stamp>.json più un _runs/matrix-<stamp>.md renderizzato. Il caso f1-exploit a due stadi rimane manuale ed è riportato come tale invece di essere classificato erroneamente come un caso automatizzato fallito.

Ogni processo figlio ha i core dump disabilitati e un timeout di 15 secondi; il reperto 5 riceve inoltre un limite di stack limitato. Gli output rimangono sotto _runs/. Il classificatore confronta la classe del sanitizer e la funzione implicata, mai indirizzi, PID o numeri di riga dei sorgenti.

Per vulnerable, un caso passa quando appare il segnale decisivo e il suo controllo rimane pulito. Per master, il runner registra l'osservazione invece di un verdetto predefinito. Per fixed, un caso passa solo quando il segnale è assente, non appare alcun altro sanitizer o segnale fatale, e l'harness restituisce un esito pulito consentito. Queste regole sono provvisorie finché FIXED_REV non indica una patch effettiva; devono essere riviste rispetto al comportamento previsto di rifiuto-o-elaborazione di quella patch.

Casi

CasoRepertoCosa mostra
f11scrittura heap ASan in RLECodec::DecodeFragment
f1-exploit1sovrascrittura strumentata di oggetto adiacente e controllo di branch indiretto (Linux x86-64)
f22scrittura heap ASan in opj_write_from_memory tramite gdcmconv --j2k
f2-lib2la stessa scrittura tramite ImageChangeTransferSyntax::Change
f33lettura heap ASan nell'espansione di palette segmentate
f3-propagation3byte fuori limite raggiungono i pixel decodificati, riportati come conteggio
f3-sentinel3una parola di guardia nota e limitata attraversa il limite logico della LUT
f44scrittura heap ASan nella decodifica di regione JPEG2000
f55esaurimento dello stack ASan su elementi di sequenza annidati
f66divisione per zero UBSan nella decodifica RLE; SIGFPE su x86

Altri due harness sono ricerca di sfruttabilità piuttosto che casi di riproduzione, e si compilano solo nel profilo senza sanitizer su Linux x86-64:

HarnessRepertoCosa stabilisce
finding01_groom1l'adiacenza glibc testata, osservata tramite hook di registrazione delle allocazioni
finding03_leak3una sovralettura di 131070 byte può esporre un puntatore di libreria specifico della build

Prove conservate

evidence/v3.2.6-macos-arm64-debug.md registra la matrice debug v3.2.6 completata, inclusi ogni controllo ed entrambi i controlli limitati di propagazione del reperto 3.

evidence/v3.2.6-linux-x86_64-finding01-groom.md e evidence/v3.2.6-linux-x86_64-finding03-leak.md registrano i due risultati di sfruttabilità riportati di seguito. I risultati su master corrente, la matrice completa del profilo release e f1-exploit non sono dichiarati finché i loro transcript non vengono conservati.

Pulizia

root@kitploit:~
./scripts/clean.sh

La pulizia rifiuta di essere eseguita senza il marker del pacchetto e rimuove solo _work, _build, _generated, _runs e le cache di bytecode Python sotto questo repository. Le prove conservate sotto evidence/ non vengono rimosse.

Primitiva di sfruttamento (reperto 1)

f1-exploit è solo per Linux-x86_64 e viene eseguito manualmente; manifest/expectations.json contiene la sequenza esatta di comandi. Sotto il layout di allocazione deterministico dell'harness verifica tre fatti separati, ciascuno con un caso negativo abbinato:

  • l'overflow raggiunge memoria che l'allocatore ha fornito dopo il buffer target;
  • i byte che vi finiscono sono esattamente i byte richiesti dal DICOM costruito. Inserire un valore diverso, o usare la fixture f1 semplice, segnala corruzione ma esplicitamente non controllo del contenuto, quindi il controllo è falsificabile;
  • il puntatore a funzione della vittima sintetica finisce per contenere un indirizzo fornito dal file, e chiamarlo trasferisce il controllo a una funzione all'interno dell'harness.

Circa la metà delle finestre di 8 byte all'interno dell'overflow di 12288 byte accetta un valore arbitrario. Le restanti sono accoppiate, perché DoYBRFull422 duplica un byte sorgente in due posizioni di output; l'offset 6144 è una delle finestre libere. La decodifica del frame 1 viene eseguita per ultima, quindi è il contenuto del frame 1 che persiste oltre l'allocazione.

L'harness registra se ImageReader::Read() restituisce true mentre l'oggetto adiacente è modificato. Un transcript Linux x86-64 riuscito deve essere conservato prima di descrivere quel risultato come prova osservata.

Cosa accade senza la strumentazione

f1-exploit fornisce il proprio layout della vittima, quindi non può rispondere se un processo non modificato abbia quel layout. finding01_groom usa glibc standard, PIE predefinito e ASLR, con hook globali di allocazione che registrano ma non riposizionano le allocazioni. Nei test conservati:

  • l'allocazione successiva al buffer di 24576 byte era un chunk scratch GDCM liberato di 2049 byte in tutte le 20 prove registrate. Non è stato osservato alcun oggetto vivo o vtable;
  • corrompere i metadati della free-list di quel chunk attiva il controllo di consistenza di glibc stesso, che aborta. L'harness finding01 semplice muore allo stesso modo senza alcuna strumentazione.

Sulla build glibc testata, il reperto 1 ha causato in modo affidabile denial of service; non è stato trovato alcun percorso di esecuzione di codice. La geometria testata era fissa, e altri allocatori o piattaforme possono disporre l'heap diversamente.

finding03_leak è il risultato più forte. Nella build testata, la lettura fuori limite raggiunge 131070 byte, un puntatore a vtable di gdcm::ByteValue entra nei pixel decodificati, e l'harness deriva la base di caricamento della libreria usando l'offset di vtable noto di quella build. Questo è un risultato locale di divulgazione a livello di API: richiede l'applicazione della LUT e l'accesso al buffer dei pixel decodificati. Non dimostra che un servizio di rete restituisca quei pixel.

I due non possono essere concatenati in esecuzione di codice qui, e non solo perché non è stata trovata alcuna vittima: richiedono valori diversi di PhotometricInterpretation, quindi richiedono due file, e una base divulgata è utile solo finché il processo che la divulga è ancora vivo.

Confine delle prove

Un report di sanitizer prova l'evento dichiarato di memory-safety o comportamento indefinito nel processo e nella revisione testati. f1-exploit verifica il controllo dei byte e una sovrascrittura di puntatore a funzione adiacente sotto un allocatore strumentato che fornisce deliberatamente il layout target. Non stabilisce quel layout in un consumatore non modificato. Le prove conservate di finding01_groom non hanno osservato quel layout per la geometria testata e la build glibc.

Niente di tutto ciò prova la raggiungibilità remota in un particolare prodotto, la persistenza o l'applicabilità a valle. L'argomento di raggiungibilità per un dato deployment è un'affermazione separata, fatta nel testo di divulgazione e non da questo pacchetto.

Scarica lo strumento