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
liferay-ga4-rce-research — Ricerca sulla sicurezza su Liferay CE 7.0.3 GA4: RCE pre-autenticazione come root (classe CVE-2020-7961) riprodotta end-to-end, più altri 16 risultati — 8+ senza CVE noti. Agentic loop-hunt: 25 generatori, 22 giudici, 9 validatori live su Docker. Traccia delle prove + checker one-go inclusi. | Kitploit
Strumenti/GitHubGitHub/dinosn/liferay-ga4-rce-research
Analisi Dinamica (Sandboxing)Analisi delle VulnerabilitàExploitScripting e AutomazioneSfruttamento di Applicazioni WebSicurezza WebPenetration TestingPaper e RicercaRed 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 →
GitHubdinosn/liferay-ga4-rce-research

liferay-ga4-rce-research

Vedi Repository
651 mese faNon ancora revisionato

Informazioni

Ricerca sulla sicurezza su Liferay CE 7.0.3 GA4: RCE pre-autenticazione come root (classe CVE-2020-7961) riprodotta end-to-end, più altri 16 risultati — 8+ senza CVE noti. Agentic loop-hunt: 25 generatori, 22 giudici, 9 validatori live su Docker. Traccia delle prove + checker one-go inclusi.

Condividi

Liferay CE 7.0.3 GA4 — Ricerca sulle vulnerabilità (RAPTOR Loop-Hunt)

Un audit di sicurezza di Liferay Portal CE 7.0.3 GA4 (git tag 7.0.3-ga4, commit b2d7cc68a) eseguito con la metodologia RAPTOR loop-hunt: ricognizione deterministica → 25 agenti generatori isolati che leggono il sorgente grezzo → 22 agenti giudici indipendenti che confutano partendo dal sorgente grezzo → 9 validatori live che attaccano una vera istanza GA4 in Docker.

In evidenza: RCE non autenticata come root riprodotta end-to-end (classe CVE-2020-7961), più altre 8 vulnerabilità verificate live — molte delle quali senza CVE noto.

⚠️ Legale/etico: tutto quello che viene descritto qui ha come bersaglio un'istanza di test self-hosted. Liferay CE 7.0 è end-of-life (ultima release 7.0.6 GA7, 2018); questi problemi non sono corretti upstream. Usa questo materiale solo contro sistemi che possiedi o sui quali sei esplicitamente autorizzato a eseguire test.


Probabilmente stai cercando https://github.com/dinosn/liferay-ga4-rce-research/blob/main/tools/liferay_ga4_check.py :)


I risultati in sintesi

Stato: ✅ verificati live contro l'istanza GA4 in Docker · 🔬 confermati dal codice (un giudice indipendente ha ri-derivato l'intera traccia dal sorgente grezzo) · 🧪 richiedono configurazione non di default.

IDRiscontroGravitàAutenticazioneStatoEvidenza
F-1JSONWS type-override → istanziazione arbitraria di classi + setter → RCE come root (c3p0 HexAsciiSerializedMap → ObjectInputStream → file-write AspectJWeaver → JSP)Criticanessuna✅verified/f1-jsonws-deser-rce.md
F-2suggerimento javaClass di jabsorb in /poller/* → istanziazione arbitraria di classi + injection di campi, prima della validazione dello userIdAlta (potenziale)qualsiasi account (auto-registrazione attiva di default)✅ sink / braccio RCE apertoverified/F-2-poller.md
F-4XML-RPC pingback.ping fetch-prima-della-validazione → SSRF cieco + oracolo di porte interne (raggiunta la shell Gogo su 127.0.0.1:11311)Medianessuna✅verified/f4-xmlrpc-pingback-ssrf.md
F-5IDOR su versionId di SyncDownloadServlet → lettura di qualsiasi versione di file DL (cross-site, nessun controllo VIEW sull'oggetto trasmesso)Altanessuna (tramite "leg" visibile agli ospiti)✅verified/F-5.md
F-6Il motore di template XSL ignora il sandboxing (secureProcessing=false, restricted eliminato) → SSRF document() ed esecuzione di comandi XSLTC rt:execCriticaautore di template del sito✅verified/F-6-F-7-template-engines.md

Elenco completo curato con le confutazioni: FINDINGS.md · report narrativo: REPORT.md


Nuove vs. note — confronto CVE

Catalogo di ~50 problemi noti di Liferay 7.0.x usati come prior art: PRIOR-ART.md (OSV [email protected], scansione NVD, advisory Code White / CERT-EU).

RiscontroCVE noto?Relazione
F-1 RCE da deserializzazione JSONWSCVE-2020-7961 (CISA KEV, sfruttata in natura)Riproduzione + ri-derivazione indipendente. Confermata non corretta in GA4; l'intera catena dimostrata con un gadget file-write AspectJWeaver (i PoC pubblici usano tipicamente JNDI con JdbcRowSetImpl).
F-10 readObject di TunnelServletCVE-2020-15842 (corrispondenza di classe)Classe nota. Confermata la protezione della deserializzazione basata solo su blacklist; barriere pre-autenticazione verificate live (non sfruttabile senza segreto condiviso/host consentito).
F-7 fuga di propsUtil nei templateCVE-2020-13445 (template injection, FreeMarker/Velocity)Variante. Stessa classe di bug (l'API dei template non riesce a limitare gli oggetti sensibili), meccanismo diverso: oggetti grezzi PropsImpl/saxReaderUtil esposti all'interno del contesto ristretto.
F-12 (metà enumerazione)CVE-2021-33321 (login.secure.forgot.password=false)Default insicuro noto — confermato in modo indipendente live.
F-12 (oracolo + ticket di reset con risposta vuota)nessuno trovatoNuova. Bypass del captcha con JSESSIONID nuovo al passo 2; una answer vuota crea un ticket di reset valido 24 h per account senza domanda, con zero conoscenza segreta.
F-11 brute-force su SimpleCaptchanessuno trovato (CVE-2019-6588 è un problema captcha diverso — XSS)Nuova. PIN a 4 cifre + nessuna invalidazione + bypass del contatore ospiti.
F-2 deserializzazione jabsorb del pollernessuno trovatoNuova. Sink confermato live; armamento bloccato dall'injection di campi di LiferaySerializer (ricerca aperta).
F-4 oracolo SSRF pingbacknessuno trovatoNuova.
F-5 IDOR su versionId della syncnessuno trovatoNuova.
F-6 RCE del motore XSLnessuno trovato (CVE-2020-13445 copre solo FreeMarker/Velocity)Nuova. Il motore XSL era esterno a ogni correzione precedente della template injection.

"Nuova" = nessun CVE corrispondente trovato negli advisory OSV/NVD/Liferay al 2026-07; i riscontri non sono stati proposti per l'assegnazione di un CVE (la linea di prodotto è EOL).

CVE noti confermati presenti in GA4 ma non ri-testati live

CVE-2020-15840 (bypass del filtro URL con doppia codifica), CVE-2024-8980 + CVE-2025-43748 (CSRF → RCE tramite la console degli script), CVE-2021-33335 (takeover dell'admin aziendale — GA4 è il limite inferiore dell'intervallo interessato), CVE-2017-1000425 (XSS flash.jsp), CVE-2021-29040 (errori JSONWS verbosi), CVE-2022-41414 / CVE-2023-33949 (default di enumerazione/registrazione), CVE-2025-62261 (token di reset in chiaro — NVD nomina direttamente 7.0.3 GA4). Vedi PRIOR-ART.md.


Il processo (RAPTOR loop-hunt)

FaseCosa è stato eseguitoOutput
0 — deterministicaaudit delle dipendenze raptor-sca (727 dipendenze), 17 regole Semgrep (1.098 anchor), modello delle minacce, manifest degli entrypoint da web.xml, catalogo CVE prior-artSCA.md SEMGREP.md THREAT-MODEL.md ENTRYPOINTS.md PRIOR-ART.md
1 — generazione25 agenti isolati, uno per fetta di componente × lente di classe di bug, ragionando solo dal sorgente grezzo (nessun riepilogo precedente — anti-ancoraggio)45 candidati in candidates/
2 — giudizio22 agenti indipendenti che confutano ogni candidato partendo dal sorgente grezzo; per un kill serve un'evidenza visibile nel codice ("non dare per scontato che lo strato invisibile sia sicuro")judge/
3 — verifica live9 agenti che attaccano l'istanza GA4 in Docker; ogni affermazione supportata da richiesta/risposta catturate; cleanup obbligatorioverified/

Registro: TRIED.md (tutto ciò che è stato tentato, incluse 3 slice a secco documentate) · INVENTORY.md (denominatore della copertura) · ambiente/fixture: ENV.md


Riproduci in locale con Docker

Non esiste un'immagine ufficiale liferay/portal:7.0.3-ga4, quindi crea la build dal bundle ufficiale:

root@kitploit:~
# Dockerfile
FROM openjdk:8-jdk
RUN apt-get update && apt-get install -y --no-install-recommends unzip curl \
 && rm -rf /var/lib/apt/lists/*
RUN curl -sSL -o /tmp/liferay.zip \
    "https://downloads.sourceforge.net/project/lportal/Liferay%20Portal/7.0.3%20GA4/liferay-ce-portal-tomcat-7.0-ga4-20170613175008905.zip" \
 && unzip -q /tmp/liferay.zip -d /opt \
 && mv /opt/liferay-ce-portal-7.0-ga4 /opt/liferay \
 && rm /tmp/liferay.zip
EXPOSE 8080 11311
CMD ["/opt/liferay/tomcat-8.0.32/bin/catalina.sh", "run"]
root@kitploit:~
docker build -t liferay-ga4 .
docker run -d --name liferay-ga4 -p 8080:8080 liferay-ga4

# first boot takes several minutes — wait for it:
until [ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8080/)" = 200 ]; do sleep 10; done

Quindi completa la procedura guidata di configurazione una tantum su http://localhost:8080/ (DB HSQL di default; la procedura imposta la password dell'admin per [email protected]).

Esegui il validator one-go

tools/liferay_ga4_check.py è uno script Python 3 a file singolo, solo stdlib — puntalo a qualsiasi istanza GA4 e testerà ogni riscontro verificato live:

root@kitploit:~
# passive validation of all findings (safe, no payloads detonated)
python3 tools/liferay_ga4_check.py http://localhost:8080

# with an account (self-registration is on by default) for the poller sink test
python3 tools/liferay_ga4_check.py http://localhost:8080 --user [email protected] --password '***'

# full RCE proof (opt-in): drops a SELF-DELETING JSP via the deserialization file-write
# gadget and fetches the command output; adjust --web-root to your install
python3 tools/liferay_ga4_check.py http://localhost:8080 --rce \
    --web-root /opt/liferay/tomcat-8.0.32/webapps/ROOT

Output atteso su un'installazione GA4 di default: 9 riscontri VULNERABLE (F-1, F-1+RCE, F-2, F-4, F-5*, F-8, F-11, F-12, F-13*) più F-10 confermato non vulnerabile (la barriera del tunnel regge). *F-5 e F-13 richiedono parametri di fixture (--leg-uuid/--version-id, --wcd-page/--group-id/--article-id) — vedi --help.

Il gadget di deserializzazione viene generato in Python puro dentro lo script (verificato byte per byte contro il payload ysoserial AspectJWeaver usato nell'engagement) — nessuna necessità di Java, jar o ysoserial.


Verificato come solido (per calibrare il resto)

Ticket di reset password (UUID a 128 bit, monouso, 24 h), rinnovo della sessione al login tramite ticket, cookie remember-me AES-128 con chiave SecureRandom per azienda, hashing PBKDF2 di default, lo stack XML dell'intero portale (entità esterne disabilitate di default), controlli digest WebDAV/SharePoint, blocchi IP localhost per /api/axis|/api/liferay|/api/atom, validazione del percorso di upload, protezioni anti-traversal di /combo /sprite, gating omni-admin della console degli script e della UI web Gogo.

Dichiarazione di copertura e limitazioni

La copertura è stata tracciata per componente rispetto all'inventario completo (TRIED.md). Non coperto: analisi funzione-per-funzione sull'intero albero da 4 GB (solo anchor Semgrep), gran parte di modules/apps al di fuori di foundation/web-experience a livello di file, la ricerca sul gadget F-2, i test live con configurazione non di default (F-9/F-14) e la raggiungibilità dei CVE della dipendenza PDFBox 2.0.3. Il loop è stato messo in pausa per il report, non perché si fosse esaurito.

Scarica lo strumento
F-7I template ristretti di Velocity e FreeMarker espongono propsUtil / saxReaderUtil grezzi → divulgazione di proprietà del portale + file:// agli ospitiAltaautore di template✅verified/F-6-F-7-template-engines.md
F-8IDOR sulla tabella Image_ tramite /image/*?img_id=N — nessun token, controlli limitati al prefisso aggirati scambiando il prefisso, id sequenziali enumerabiliMedianessuna✅verified/f-8-image-idor.md
F-11SimpleCaptcha = PIN a 4 cifre, mai invalidato con tentativi errati, contatore ospiti mai incrementato → rottura in ~5k richiesteMedianessuna✅verified/f11-f12-captcha-reminder.md
F-12Password dimenticata: enumerazione degli utenti + oracolo della risposta di recupero senza captcha (bypass con sessione nuova); la risposta vuota genera un ticket di reset reale per account senza domandaMedia-Altanessuna✅verified/f11-f12-captcha-reminder.md
F-13Override dei parametri di richiesta di Web Content Display (groupId/articleId/ddmTemplateKey) → lettura cross-site di articoli non destinati agli ospiti (journal.article.view.permission.check.enabled=false di default)Altanessuna (richiede un WCD su una pagina per ospiti)✅verified/F-13-wcd-param-override.md
F-3L'axis-extender OSGi salta ServiceAccessPolicy / la marcatura remote-access sui servizi SOAP dei moduliMedia (Alta con modulo WSDD)nessuna🔬judge/axis-spring-remoting.md
F-9OpenID collega l'account della vittima all'OpenID dell'attaccante prima della verifica dell'asserzione → account takeoverAltanessuna (OpenID abilitato, non di default)🔬 🧪judge/sso-autologin.md
F-10readObject di TunnelServlet protetto solo da una blacklist di classi; gadget ROME/JdbcRowSetImpl/c3p0/AspectJWeaver nel classpathCritica potenzialepeer fidato (segreto condiviso + host consentito)✅ le barriere reggono pre-autenticazioneverified/f10-f20-tunnel-auth-pipeline.md
F-14TokenAutoLogin si fida di un semplice header SM_USER (nessuna verifica, nessuna allowlist IP)Medianessuna (token SSO abilitato, non di default)🔬 🧪judge/sso-autologin.md
F-15L'importazione LAR dell'admin del sito contrabbanda RolesAdminPortletDataHandler → cancellazione massiva dei ruoli aziendali / azzeramento dei permessiMediaadmin del sito🔬judge/export-import-lar.md
F-16OpenSocial (non nel bundle di default): SSRF makeRequest pre-autenticazione, origin JS /gadgets/ifr, token di sicurezza falsificabili → impersonificazione, XSS persistenteAlta ×4nessuna / membro del sito🔬 (dipende dal deployment)judge/opensocial-shindig.md
F-17WSRP (non nel bundle di default): SSRF ProxyServlet pre-autenticazione; endpoint markup → render arbitrario delle portlet + persistenza di typeSettings del layoutMedianessuna🔬 (dipende dal deployment)judge/wsrp.md
F-8 IDOR su Image_nessuno trovatoNuova.
F-13 lettura cross-site WCDnessuno trovatoNuova. Default insicuro alla radice (journal.article.view.permission.check.enabled=false) più un nuovo percorso di consegna (override dei parametri di richiesta della portlet).
F-3 bypass SAP dell'axis-extendernessuno trovatoNuova.
F-9 OpenID link-prima-della-verificanessuno trovatoNuova.
F-14 fiducia nell'header SM_USERnessuno trovatoNuova.
F-15 contrabbando del data-handler dei ruoli LARnessuno trovatoNuova.
F-16 / F-17 OpenSocial / WSRPnessuno trovatoNuove, ma i moduli non sono nel bundle GA4 di default (Liferay-Releng-Bundle: false).