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
CVE-2026-90907 — CLI Python che rileva e sfrutta CVE-2026-90907, un bypass di autorizzazione in Joomla! com_users che consente la creazione di account non autenticati; modalità di verifica non distruttiva più PoC. | Kitploit
Strumenti/GitHubGitHub/aorozco-sys/cve-2026-90907
Autenticazione e AutorizzazioneScanner di VulnerabilitàAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration Testing
GitHubaorozco-sys/cve-2026-90907

CVE-2026-90907

CLI Python che rileva e sfrutta CVE-2026-90907, un bypass di autorizzazione in Joomla! com_users che consente la creazione di account non autenticati; modalità di verifica non distruttiva più PoC.

Vedi Repository
111 mese 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-90907 — Creazione non autorizzata di account utente in Joomla! CMS

Python Severity Fixed

SOLO PER TEST DI SICUREZZA AUTORIZZATI. Eseguire la modalità exploit contro sistemi di cui non si è proprietari o per i quali non si dispone di esplicita autorizzazione scritta ai test è illegale. La modalità predefinita (CHECK) è non distruttiva e non crea nulla.

Strumento CLI che rileva e (opzionalmente, con -U) sfrutta CVE-2026-90907, una bypass di autorizzazione di severità media (CVSS 6.9) nel core di Joomla! CMS che consente a un attaccante remoto non autenticato di attivare la creazione non autorizzata di account utente tramite il controller com_users → profile.save — anche quando la registrazione pubblica è disabilitata nella Configurazione Globale.

Riepilogo della vulnerabilità

CampoValore
CVE IDCVE-2026-90907
SeveritàMedia — CVSS 6.9
TipoBypass di autorizzazione / controllo degli accessi improprio (CWE-862)
ComponenteComponente com_users, task profile.save
Vettore di attaccoRemoto, non autenticato, POST in due fasi nella stessa sessione
Corretto inJoomla! 5.4.9 e 6.1.4 (rilascio di sicurezza, 2026-09-29)

Versioni interessate

Secondo il bollettino di sicurezza Joomla! (2026-09-29) e le fonti di advisory pubbliche:

  • Joomla! 1.5.0 – 5.4.8
  • Joomla! 6.0.0 – 6.1.3

Anche Joomla! 3.x è interessato ma è End-of-Life: non riceverà una patch ufficiale — pianificare una migrazione. Il controllo del banner di versione dello strumento è informativo; il verdetto è comportamentale (vedi sotto).

Impatto

L'account controllato dall'attaccante è un account front-end con privilegi bassi e senza accesso amministrativo o al backend. Ciononostante ciò consente a un attaccante di:

  • Creare account anche quando la registrazione è esplicitamente disabilitata
  • Riservare nomi utente / indirizzi email
  • Attivare inaspettatamente i plugin degli hook di registrazione
  • Sondare la logica interna dell'applicazione come sessione autenticata

Causa principale

ProfileModel::save() esegue unset() su $data['username'] solo quando il nome utente è considerato conforme. isUsernameCompliant deriva dallo stato utente com_users.edit.profile.data, che il controller popola con la richiesta completa quando la validazione del form fallisce. Il controller inoltre non verifica lo stato di login della richiesta in ingresso. Pertanto, all'interno di una singola sessione guest:

  1. W1 (seed) — POST con un nome utente non conforme e senza privacyconsent → la validazione fallisce → il nome utente sporco viene persistito nello stato utente della sessione (nulla viene ancora creato).
  2. W2 (exploit) — stessa sessione, reinvio con un nome utente pulito più jform[privacyconsent][privacy]=1 → la protezione unset() viene saltata → INSERT INTO #__users → redirect 303 con user_id > 0.
  3. Verifica differenziale del login — POST user.login (il nome del campo è password, non passwd) con la password corretta rispetto a una errata e leggere il messaggio flash: corretta → "you cannot access the private section" (auth OK, ACL blocca) / errata → "do not match". Il differenziale è la prova.

Installazione

git clone https://github.com/aorozco-sys/CVE-2026-90907.git
cd CVE-2026-90907
pip install -r requirements.txt   # only dependency: requests

Utilizzo

# CHECK mode (default) — non-destructive: never sends consent, never creates an account
python3 joomla_cve_2026_90907.py https://ejemplo.com

# Verbose CHECK (full request/response log on stderr)
python3 joomla_cve_2026_90907.py https://ejemplo.com --no-color -v

# EXPLOIT mode (-U) — creates a real account in #__users (authorized targets only!)
python3 joomla_cve_2026_90907.py https://ejemplo.com \
    -U audit.user -E [email protected] -N "CVE Audit"

# Through a proxy (e.g. Burp Suite) with a custom timeout
python3 joomla_cve_2026_90907.py https://ejemplo.com -U audit.user \
    --proxy http://127.0.0.1:8080 --timeout 30

# Exploit without the differential login verification
python3 joomla_cve_2026_90907.py https://ejemplo.com -U audit.user \
    --no-verify-login

Flag

FlagDescrizione
TARGETURL di base (normalizzato; senza slash finale)
-U/--usernameAbilita la modalità EXPLOIT. Senza -U → CHECK non distruttivo
-P/--passwordPredefinita: generata con secrets, 16 caratteri alfanumerici+simboli, sempre stampata
-E/--emailPredefinita: <username>@example.invalid
-N/--namePredefinito: CVE Audit
-o/--outputDirectory delle evidenze (predefinita evidence_cve90907_<ts> nella cwd)
--proxy URLProxy per le richieste (Burp: http://127.0.0.1:8080)
--timeoutPredefinito 20 s
--uaUser-Agent (predefinito cve-2026-90907-audit/1.0)
--no-verify-loginSalta il differenziale di login (modalità exploit)
--verify-sslVerifica TLS (predefinito: non verificare)
--no-colorNessun colore ANSI
-v/--verboseLog completo req/resp su stderr

Codici di uscita (compatibili con CI)

CodiceSignificato
0Ok / non vulnerabile / sconosciuto
1Vulnerabile (LIKELY in check, CONFIRMED in exploit)
2Errore operativo (rete, dipendenze, ecc.)

Verdetti

  • VULNERABLE (LIKELY) — check: token OK + W1 elaborato in modo anonimo (303 con profile in Location, nessun redirect al login) + flash di errore di validazione (es. messaggio di privacy-policy richiesta). Conferma definitiva = modalità exploit.
  • NOT VULNERABLE (comportamentale) — W1 reindirizza al login o risponde 401/403/404: elaborazione anonima bloccata.
  • UNKNOWN — segnali mancanti (nessun token, versione illeggibile, ecc.). Le lacune sono elencate sulla console e in summary.json.
  • VULNERABLE (CONFIRMED) — exploit: Location con user_id > 0 dopo W2.

Artefatti delle evidenze

Ogni esecuzione scrive una directory -o con timestamp contenente 00_token.txt, 01_version.txt, 02_w1_seed.txt, 03_w2_exploit.txt, 04_login_correct.txt, 05_login_wrong.txt e summary.json. Ogni file registra la REQUEST completa (metodo/URL/header chiave/body), la RESPONSE (status, Location, Server, flash estratto, primi 500 byte del body) e i timestamp ISO — pronti per essere allegati a un report di pentest.

Sicurezza operativa

  • La modalità CHECK non invia mai privacyconsent e usa un username non conforme (probe()): il salvataggio fallisce sulle regole del form e nulla viene persistito.
  • Guardia di interruzione: se W1 avesse mai restituito user_id > 0 (non dovrebbe), la modalità exploit si interrompe prima di W2.
  • Dopo un exploit riuscito lo strumento stampa un avviso di pulizia: eliminare l'account creato tramite Joomla Admin → Users (questo rimuove anche la riga user_usergroup_map).

Remediation

  • Aggiornare immediatamente le istanze di produzione a Joomla! 5.4.9 o 6.1.4.
  • Nei siti in cui la registrazione era disabilitata, ordinare gli utenti del backend per data di registrazione e verificare il gruppo predefinito per account non riconosciuti creati prima della patch.

Riferimenti

  • CVE-2026-90907 — NVD
  • CVE-2026-90907 — record CVE.org
  • Joomla! Security Bulletin / rilascio di sicurezza coordinato 2026-09-29 (16 correzioni, inclusa questa — corretta in 5.4.9 e 6.1.4)

Licenza

Scarica lo strumento