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
givewp-cve-2026-82222-rce-lab — # Laboratorio Docker autorizzato e PoC pulito per la validazione della RCE CVE-2026-82222 in GiveWP 4.16.5.1 e della correzione 4.16.7.2. | Kitploit
Strumenti/GitHubGitHub/dinosn/givewp-cve-2026-82222-rce-lab
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebApprendimento e FormazioneLab e Pratica
GitHubdinosn/givewp-cve-2026-82222-rce-lab

givewp-cve-2026-82222-rce-lab

# Laboratorio Docker autorizzato e PoC pulito per la validazione della RCE CVE-2026-82222 in GiveWP 4.16.5.1 e della correzione 4.16.7.2.

Vedi Repository
19h 4m 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

CVE-2026-82222 — Laboratorio di Validazione RCE Solo-Marker per GiveWP

Materiale di ricerca sulla sicurezza per riprodurre e validare CVE-2026-82222 in un laboratorio Docker isolato.

Per il PoC RCE diretto e la scansione URL usa CVE-2026-8222-RCE.py

Verdetto

Stato: dimostrato nel laboratorio fornito

GiveWP 4.16.5.1 consente a un attaccante inizialmente non autenticato di persistere un grafo di oggetti PHP, riattivarlo tramite la gestione delle sessioni di GiveWP ed eseguire un comando marker fisso come utente web-server di WordPress.

Risultato positivo testato:

root@kitploit:~
GiveWP:    4.16.5.1
WordPress: 6.6.2
PHP:       8.1.30
Result:    /tmp/CVE-2026-82222-RCE-GETBAG creato da www-data

Il risultato end-to-end è stato inoltre riprodotto contro il sorgente GiveWP 4.16.5.1 pulito e non strumentato. GiveWP 4.16.7.2 ha bloccato il vettore HTTP nella configurazione testata e ha bloccato indipendentemente il gadget terminale durante un controllo diretto.

Questo dimostra l'esecuzione di comandi all'interno del container WordPress. Non dimostra accesso root, fuga dal container, movimento laterale o compromissione dell'host.

Limite di sicurezza

Usa questo repository solo su sistemi di tua proprietà o su cui sei esplicitamente autorizzato a testare.

Il PoC fornito è intenzionalmente limitato:

  • Esegue solo touch /tmp/CVE-2026-82222-RCE-GETBAG.
  • Non offre alcuna opzione di comando arbitrario.
  • Non crea shell, callback, persistenza o escalation di privilegi.
  • Rifiuta target non-loopback a meno che l'operatore non fornisca il flag esplicito --allow-authorized-non-loopback.
  • Docker pubblica WordPress solo su 127.0.0.1.
  • Il nome del progetto Compose deriva dal percorso di checkout, così un clone non può abbattere i container o i volumi di un altro clone.
  • Il laboratorio usa il sorgente ufficiale pulito del plugin; non strumenta né applica patch al target vulnerabile.

Il test HTTP crea un utente donatore usa-e-getta, metadati e righe di sessione GiveWP. Usa il comando di reset incluso dopo il test.

Avvio rapido

Requisiti:

  • Docker con Compose v2
  • Python 3.10 o successivo
  • curl
  • unzip
  • sha256sum o shasum
  • Accesso di rete a downloads.wordpress.org per gli archivi ufficiali del plugin

Esegui la matrice completa vulnerabile/patchata:

root@kitploit:~
./lab verify

Il comando:

  1. Scarica GiveWP 4.16.5.1 e 4.16.7.2 da WordPress.org.
  2. Verifica entrambi gli hash SHA-256.
  3. Costruisce un laboratorio WordPress 6.6.2/PHP 8.1 fresco solo-loopback con la registrazione normale di WordPress esplicitamente disabilitata.
  4. Testa il 4.16.5.1 pulito e richiede la creazione del marker da parte dell'utente web.
  5. Costruisce un secondo laboratorio fresco con il 4.16.7.2 pulito.
  6. Richiede che il marker HTTP rimanga assente.
  7. Bypassa l'ingresso in un controllo diretto e conferma che anche il terminale ProviderForwarder patchato rifiuta il callable stringa.

Il laboratorio patchato rimane in esecuzione alla fine. Rimuovilo con:

root@kitploit:~
./lab reset

Per usare un'altra porta loopback:

root@kitploit:~
LAB_PORT=8099 ./lab verify

Evidenza attesa

Il controllo vulnerabile deve terminare con evidenza terminale concreta:

root@kitploit:~
[PASS] E1: registrazione non autenticata ha emesso cookie di autenticazione
[PASS] E3: grafo serializzato persistito nel proprio last_name
[PASS] E4: nonce del modulo di donazione ottenuto
[PASS] E5: scrittura sessione raggiunta post-sink HTTP status=500 atteso
[PASS] E6: trigger di lettura/distruzione sessione completato
marker presente e di proprietà dell'utente web WordPress
RISULTATO: CONTROLLO VULNERABILE CONFERMATO

Il controllo patchato deve mostrare:

root@kitploit:~
[PASS] P1: gate di registrazione patchato ha bloccato il cookie di autenticazione
DIRECT_MARKER=absent
marker HTTP assente e gadget terminale diretto bloccato
RISULTATO: CONTROLLO PATCHATO CONFERMATO

Un HTTP 500, payload memorizzato, eccezione o hit del rilevatore senza il marker non viene accettato come prova di RCE.

Ciclo di vita manuale del laboratorio

Avvia e testa la release vulnerabile:

root@kitploit:~
./lab start vulnerable
./lab test

Avvia e testa la release patchata:

root@kitploit:~
./lab start patched
./lab test

Ispeziona lo stato corrente:

root@kitploit:~
./lab status

Rimuovi container, volumi, utenti di test, sessioni e stato del marker:

root@kitploit:~
./lab reset

Gli ZIP del plugin in cache e gli asset estratti vengono conservati per riesecuzioni più veloci. Rimuovi anche quegli asset generati esatti con:

root@kitploit:~
./lab reset --purge-assets

Versioni interessate e testate

VersioneValutazione
GiveWP 4.16.5.1RCE riprodotta end-to-end
GiveWP 4.16.6–4.16.7.1Segnalate come interessate; non riprodotte singolarmente qui
GiveWP 4.16.7.2Controlli negativi patchati riprodotti
Release successiveNon testate singolarmente; aggiorna all'ultima release supportata

L'advisory pubblico identifica le release fino alla 4.16.7.1 come interessate. Questo repository dimostra direttamente solo le due versioni nella sua matrice di test positivo/negativo.

Riferimenti:

  • Advisory Patchstack
  • CVE-2026-82222
  • Commit di hardening GiveWP
  • Pagina ufficiale del plugin GiveWP

Causa principale

Lo sfruttamento combina diversi comportamenti:

  1. GiveWP 4.16.5.1 espone un'azione di registrazione che crea e autentica un donatore a bassi privilegi anche quando la registrazione normale di WordPress è disabilitata.
  2. Quell'utente può persistere dati serializzati nei propri metadati name.
  3. Give\Helpers\Utils::maybeSafeUnserialize() usa allowed_classes => false, producendo __PHP_Incomplete_Class, ma una successiva serializzazione preserva i nomi e le proprietà delle classi originali.
  4. Il grafo viene memorizzato in una sessione di acquisto GiveWP.
  5. Un successivo maybe_unserialize() senza restrizioni riattiva le classi incluse.
  6. La distruzione automatica entra in una catena POP completa fino a system().

Sono richieste quattro barre rovesciate letterali del namespace nel vettore HTTP. I due passaggi di stripping effettivi le riducono 4 -> 2 -> 1. Il payload è privo di NUL, e PHP 8.1.30 è stato verificato per idratare il nome serializzato semplice per la proprietà privata Session::$attributeName.

Catena POP completa

root@kitploit:~
TCPDF::__destruct()
  -> TCPDF::_destroy(true)
  -> foreach ($this->imagekeys as $file)
  -> Symfony Session::getIterator()
  -> Session::getAttributeBag()
  -> Session::getBag($this->attributeName)
  -> $this->storage->getBag($attributeName)
  -> DonationFactory->__call('getBag', [$attributeName])
  -> call_user_func_array('system', [$attributeName])
  -> system('touch /tmp/CVE-2026-82222-RCE-GETBAG')

Grafo controllato dall'attaccante:

root@kitploit:~
TCPDF
├── file_id = identificatore univoco della richiesta
└── imagekeys = Give\Vendors\Symfony\Component\HttpFoundation\Session\Session
    ├── attributeName = comando marker fisso
    └── storage = Give\TestData\Factories\DonationFactory
        └── loadedProviders["getBag"] = "system"

La transizione nascosta critica è il dispatch implicito di IteratorAggregate di PHP. TCPDF::$imagekeys è non tipizzato, quindi assegnare una Session Symfony fa sì che foreach invochi Session::getIterator().

Il comando marker viene eseguito prima che Symfony applichi il tipo di ritorno getAttributeBag(): AttributeBagInterface. Il conseguente TypeError e HTTP 500 sono effetti post-sink.

Cosa hanno mancato i tentativi precedenti

Il grafo candidato rifiutato usava:

root@kitploit:~
TCPDF::$objcopy
  -> DonationFactory::$loadedProviders['__destruct'] = 'system'

Quel grafo non può funzionare. TCPDF::_destroy() esegue solo unset di objcopy; PHP non instrada la distruzione automatica attraverso __call('__destruct', ...).

L'operazione mancante era:

root@kitploit:~
foreach ($this->imagekeys as $file) {

La revisione precedente seguiva i distruttori e le chiamate di metodo esplicite ma non ispezionava ricorsivamente il protocollo implicito degli oggetti attivato da foreach. La Session Symfony fornisce il ponte mancante:

  • foreach invoca getIterator().
  • getIterator() raggiunge getBag($attributeName).
  • Lo storage controllato dall'attaccante è una DonationFactory.
  • Il getBag non definito invoca ProviderForwarder::__call().
  • loadedProviders['getBag'] = 'system' seleziona il callable.
  • attributeName fornisce l'argomento del comando.

Evidenza dal sorgente

Posizioni rilevanti in GiveWP 4.16.5.1:

ComponentePosizione
Unserialize iniziale protettosrc/Helpers/Utils.php:203-217,237-241
Vettore di donazioneincludes/process-donation.php:157
Persistenza sessione GiveWPincludes/class-give-session.php:364-368,489-508
Riattivazione sessione senza restrizioniincludes/class-give-session.php:347-350
Distruttore TCPDFvendor/tecnickcom/tcpdf/tcpdf.php:2050-2052
Iterazione controllata dall'attaccantevendor/tecnickcom/tcpdf/tcpdf.php:7885-7907
Ponte iteratore Symfonyvendor/vendor-prefixed/symfony/http-foundation/Session/Session.php:134-136
Ponte getBag Symfonyvendor/vendor-prefixed/symfony/http-foundation/Session/Session.php:259-283
Callable terminalesrc/TestData/Framework/ProviderForwarder.php:19-23
Autoloader Composer GiveWPgive.php:624-625

Hash delle release ufficiali:

root@kitploit:~
give.4.16.5.1.zip
95fc6709b6ed284074bf09be096e28d6299fd4a103848c2b1c3bf8a5772cf98c

give.4.16.7.2.zip
c5bc98da2abb748c64d31a43679ff5f223092dfff6d214132a55dcbc948e91ae

Il laboratorio riestrae ogni plugin dal suo ZIP verificato prima di ogni avvio fresco, lo copia in WordPress senza modifiche e confronta byte per byte l'albero completo dei file del plugin distribuito con il sorgente verificato. Le tre immagini Docker base ufficiali sono anche bloccate ai loro digest manifest multi-architettura.

Perché 4.16.7.2 blocca la catena

GiveWP 4.16.7.2 aggiunge difese indipendenti su registrazione, gestione dell'input serializzato, riattivazione della sessione, migrazione dei dati e hardening dei gadget.

L'hardening terminale richiede che l'oggetto risolto implementi il contratto provider atteso:

root@kitploit:~
if ( ! $provider instanceof Contract\Provider ) {
    return null;
}

La stringa system controllata dall'attaccante viene quindi rifiutata. Il controllo diretto in questo repository bypassa il vettore HTTP e verifica che questa difesa terminale da sola lasci il suo marker assente.

Verifica di una distribuzione reale

Un risultato PoC negativo da solo non dimostra che un sito è patchato. Un WAF, routing diverso, registrazione disabilitata, modulo legacy mancante, configurazione della sessione o funzioni di comando PHP disabilitate possono tutti impedire il marker su un codebase ancora vulnerabile.

Procedura di validazione consigliata:

  1. Registra la versione GiveWP distribuita e la revisione del sorgente.
  2. Esegui un backup o uno snapshot del sito WordPress e del database.
  3. Ripristina quello snapshot in un ambiente di staging isolato.
  4. Disabilita l'accesso di rete in uscita non necessario.
  5. Esegui questo verificatore solo-marker contro il clone.
  6. Aggiorna GiveWP all'ultima release supportata, con 4.16.7.2 come release minima contenente i fix testati.
  7. Ripeti il test identico e richiedi l'assenza del marker.
  8. Verifica indipendentemente la versione del plugin installato e il sorgente patchato.

Controllo versione:

root@kitploit:~
wp plugin get give --fields=name,status,version

Rimedio e revisione dell'incidente

Aggiorna GiveWP all'ultima versione supportata. Dopo l'aggiornamento:

  • Svuota le cache opcode PHP dove applicabile.
  • Conferma che nessuna copia precedente di GiveWP rimanga attiva o accessibile via web.
  • Rivedi account WordPress o donatori inattesi.
  • Cerca nei metadati utente e nelle sessioni GiveWP grafi serializzati TCPDF, Session Symfony o loadedProviders.
  • Correla registrazione, modifiche del profilo, richieste di donazione e successive risposte HTTP 500 dalla stessa sessione.
  • Indaga su processi figlio del web-server o modifiche al filesystem inattese.

Se un'installazione vulnerabile esposta a internet contiene artefatti di iniezione di oggetti, trattala come una potenziale compromissione piuttosto che limitarti ad aggiornare il plugin.

Struttura del repository

root@kitploit:~
.
├── .github/workflows/validate.yml
├── .gitignore
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── poc
│   ├── direct-pop-control.php
│   └── poc.py
└── scripts
    └── fetch-assets.sh

Non committato:

root@kitploit:~
ZIP ufficiali del plugin
sorgente GiveWP estratto
sorgente target strumentato
cookie o dati di sessione
evidenze/log di runtime
indirizzi target interni o credenziali riutilizzabili
payload objcopy obsoleti
output di validazione storici

Limiti di validazione

AffermazioneStato
Vettore di iniezione di oggetti PHP persistenteDimostrato
Riattivazione delle classi incluseDimostrato
Catena POP stock completaDimostrato
Marker fisso eseguito come utente webDimostrato
Riproduzione contro 4.16.5.1 pulitoDimostrato
Controlli negativi contro 4.16.7.2 pulitoDimostrato
Ogni release intermedia interessata testataNon testata
Privilegio rootNon rivendicato
Fuga dal containerNon testata
Compromissione dell'hostNon testata

Lo standard di prova è deliberatamente rigoroso: solo un marker di comando osservabile attraverso la catena stock non modificata viene etichettato come RCE. Accettazione HTTP, serializzazione, eccezioni e hit del rilevatore sono evidenze intermedie.

Scarica lo strumento