Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
libheif-grid-nextjs-rce — PoC privato Fortbridge per la catena RCE CVE-2026-32740 Next.js/sharp leak-to-memcpy-GOT | Kitploit
Strumenti/GitHubGitHub/fortbridge-uk/libheif-grid-nextjs-rce
Memory ForensicsAnalisi delle VulnerabilitàExploitReverse EngineeringSfruttamento di Applicazioni WebPenetration TestingSviluppo PayloadBinary Exploitation

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
Lab e Pratica
GitHubfortbridge-uk/libheif-grid-nextjs-rce

libheif-grid-nextjs-rce

PoC privato Fortbridge per la catena RCE CVE-2026-32740 Next.js/sharp leak-to-memcpy-GOT

Vedi Repository
13 giorni faNon ancora revisionato

libheif grid-to-GOT Next.js RCE

Proof of concept funzionante che trasforma CVE-2026-32740 nello stack di immagini Next.js/sharp hardcoded in una scrittura ad indirizzo scelto e in una callback validata a /usr/bin/id.

Questo è un repository di ricerca privato di Fortbridge. Usalo solo contro il lab incluso o un altro sistema che sei esplicitamente autorizzato a testare.

Cosa dimostra il PoC

L'exploit utilizza solo le route HTTP di upload e ottimizzazione immagini del target:

  1. Invia ripetutamente un AVIF con leak ASLR e confronta i puntatori nei pixel restituiti con ogni profilo libvips esatto nel manifest.
  2. Procede solo quando un profilo e una base libvips randomizzata sono supportati da tutte le ancore indipendenti richieste.
  3. Risolve il selettore fake-node a due byte usando il profilo selezionato. Il profilo stock richiede un record heap marcato completo. Ogni profilo PIE usa la sua relazione page-lane dell'allocatore misurata indipendentemente.
  4. Usa la copia interna di libvips di g_module_open_full di GLib, una routine GModule che avvolge dlopen per caricare una libreria condivisa nativa da un percorso file. L'exploit calcola il suo indirizzo a runtime come la base libvips recuperata più l'offset hardcoded del profilo 0x3e995e. Il caricamento della libreria esegue il suo costruttore.
  5. Sulla macchina dell'attaccante, compila un piccolo shared object il cui costruttore esegue il comando fisso /usr/bin/id. Invia quell'ELF attraverso la route pubblica di upload con il nome immagine x.jpg e media type image/jpeg.
  6. Genera un AVIF 116x33 a quattro tile il cui overflow di Cb reindirizza il piano Cr a memcpy@GOT - 16.
  7. La prima riga ad indirizzo scelto memorizza uploads/x.jpg immediatamente prima dello slot GOT e sostituisce memcpy@GOT con il loader GModule derivato. La riga successiva chiama quel loader con il percorso della libreria già in RDI.
  8. Il caricamento dello shared object invoca il suo costruttore, che restituisce l'output di /usr/bin/id via TCP. Un token per tentativo impedisce che una callback obsoleta venga conteggiata come successo; la riga uid=... restituita è la prova.

Le esecuzioni di validazione originali relative a libvips sono registrate in evidence/libvips-gmodule-rce-10x.json. Tutti e dieci i processi freschi hanno restituito un output valido di /usr/bin/id con dieci basi libvips randomizzate distinte e dieci indirizzi del loader derivati indipendentemente.

I dati esatti dell'esecuzione su Ubuntu sono in evidence/libvips-gmodule-pie-rce-10x.json. I dati esatti dell'esecuzione su Debian 13 APT sono in evidence/debian13-apt-libvips-gmodule-rce-10x.json.

Risultati misurati

Abbiamo testato l'exploit completo contro 10 processi Node Ubuntu avviati di recente e 10 processi Node Debian avviati di recente. Tutte e 20 le esecuzioni hanno raggiunto l'esecuzione di comandi e restituito l'output di /usr/bin/id del target. L'exploit ha anche calcolato un indirizzo del loader GModule diverso per ogni base libvips randomizzata.

Prima di creare il payload finale, l'exploit potrebbe richiedere diversi tentativi di leak ASLR. Ogni tentativo carica l'AVIF di leak, lo invia attraverso la route di ottimizzazione e controlla il PNG restituito per quattro puntatori che identificano un profilo e una base libvips. Ubuntu ha richiesto tra 3 e 23 tentativi. Debian ha richiesto tra 3 e 15. Evidenze incomplete o ambigue causano un altro tentativo invece di un profilo ipotizzato.

Il progetto ha anche 96 test di regressione automatizzati. Questi sono controlli a livello di codice, non 96 ulteriori esecuzioni dell'exploit. Coprono la validazione del profilo, la classificazione dei puntatori restituiti, la calibrazione dell'heap, il calcolo degli indirizzi, la costruzione del payload e il fallimento sicuro quando le evidenze non corrispondono a un target supportato.

Stack testati

Entrambi i target x86-64 usano Next.js 15.5.23, sharp 0.34.4, libvips 8.17.2 incluso, libheif 1.20.2 incluso, ASLR e NX. I loro runtime nativi differiscono:

ProfiloNodeglibclibstdc++Relazione del selettore
Ubuntu25.8.1, PIE ET_DYN2.43-2ubuntu2.46.0.350x6000 - 0x690 = 0x5970
Debian 13Debian APT 20.19.2, PIE ET_DYN2.41-12+deb13u46.0.330x6000 - 0x3a0 = 0x5c60

I build ID completi e i valori SHA-256 sono in profiles/native_stack_profiles_pie.json. Le misurazioni del pacchetto Debian, degli artefatti, dello smoke test delle route e del layout a cinque lifetime sono catturate in evidence/debian13-profile-derivation.json. Il target Debian usa il pacchetto standard della distribuzione nodejs=20.19.2+dfsg-1+deb13u3; Node non è compilato dai sorgenti.

Valori hardcoded del profilo

La catena non necessita della base Node randomizzata. Il suo target di controllo è la routine interna g_module_open_full dentro libvips, la cui base randomizzata è recuperata dai pixel restituiti. Ogni profilo versionato hardcoda le costanti specifiche della build richieste dall'exploit:

  • offset dei puntatori restituiti usati per recuperare la base libvips e selezionare un profilo native-stack compatibile;
  • l'offset di memcpy@GOT e l'offset di g_module_open_full più i suoi byte di istruzione di validazione;
  • relazioni page-lane dell'allocatore e page-to-fake-node;
  • offset del layout degli oggetti, geometria dei tile, larghezza delle righe e percorsi dell'applicazione.

La base libvips randomizzata, l'indirizzo del loader a runtime risultante e il selettore finale a due byte non sono hardcoded. Sono derivati per ogni processo target dai pixel restituiti e dal profilo selezionato.

L'exploit fallisce in modo sicuro quando un profilo è malformato o i pixel restituiti non selezionano esattamente una coppia profilo/base supportata. Il profilo stock richiede anche il suo record heap restituito completo. Un profilo è un'affermazione di compatibilità esatta, quindi l'operatore dovrebbe verificare gli artefatti del target offline prima di usarlo.

L'ABI del loader è importante. La chiamata sovrascritta fornisce il percorso della libreria in RDI, un puntatore a riga immagine in RSI e la lunghezza di copia di 58 byte in RDX. Questa esatta routine GModule profilata usa solo bit di flag supportati da ESI e non dereferenzia RDX sul percorso di caricamento riuscito. Un harness offline ha validato quel entry point e la firma delle istruzioni prima che fosse usato nelle esecuzioni misurate.

Requisiti

  • Linux x86-64
  • Python 3.11 o successivo
  • ffmpeg con l'encoder libaom-av1
  • un compilatore C disponibile come cc sulla macchina dell'attaccante
  • un indirizzo di callback IPv4 raggiungibile dal target
  • Node.js e npm per eseguire il lab direttamente, o Docker per entrambi i target

Installa l'unica dipendenza Python:```bash python3 -m venv .venv . .venv/bin/activate python3 -m pip install -r requirements.txt

Conferma il supporto alla codifica AV1:```bash
ffmpeg -hide_banner -encoders | grep libaom-av1

Avvia il laboratorio incluso

Il laboratorio accetta intenzionalmente caricamenti arbitrari e passa file selezionati a sharp. Non esporlo a una rete non attendibile.```bash cd lab npm ci npm run build npm run start

Il target è quindi disponibile all'indirizzo `http://127.0.0.1:3000`.
Scarica lo strumento