
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.
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
rootriprodotta 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 :)
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.
| ID | Riscontro | Gravità | Autenticazione | Stato | Evidenza |
|---|---|---|---|---|---|
| F-1 | JSONWS type-override → istanziazione arbitraria di classi + setter → RCE come root (c3p0 HexAsciiSerializedMap → ObjectInputStream → file-write AspectJWeaver → JSP) | Critica | nessuna | ✅ | verified/f1-jsonws-deser-rce.md |
| F-2 | suggerimento javaClass di jabsorb in /poller/* → istanziazione arbitraria di classi + injection di campi, prima della validazione dello userId | Alta (potenziale) | qualsiasi account (auto-registrazione attiva di default) | ✅ sink / braccio RCE aperto | verified/F-2-poller.md |
| F-4 | XML-RPC pingback.ping fetch-prima-della-validazione → SSRF cieco + oracolo di porte interne (raggiunta la shell Gogo su 127.0.0.1:11311) | Media | nessuna | ✅ | verified/f4-xmlrpc-pingback-ssrf.md |
| F-5 | IDOR su versionId di SyncDownloadServlet → lettura di qualsiasi versione di file DL (cross-site, nessun controllo VIEW sull'oggetto trasmesso) | Alta | nessuna (tramite "leg" visibile agli ospiti) | ✅ | verified/F-5.md |
| F-6 | Il motore di template XSL ignora il sandboxing (secureProcessing=false, restricted eliminato) → SSRF document() ed esecuzione di comandi XSLTC rt:exec | Critica | autore di template del sito | ✅ | verified/F-6-F-7-template-engines.md |
| F-7 | I template ristretti di Velocity e FreeMarker espongono propsUtil / saxReaderUtil grezzi → divulgazione di proprietà del portale + file:// agli ospiti | Alta | autore di template | ✅ | verified/F-6-F-7-template-engines.md |
| F-8 | IDOR sulla tabella Image_ tramite /image/*?img_id=N — nessun token, controlli limitati al prefisso aggirati scambiando il prefisso, id sequenziali enumerabili | Media | nessuna | ✅ | verified/f-8-image-idor.md |
| F-11 | SimpleCaptcha = PIN a 4 cifre, mai invalidato con tentativi errati, contatore ospiti mai incrementato → rottura in ~5k richieste | Media | nessuna | ✅ | verified/f11-f12-captcha-reminder.md |
| F-12 | Password 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 domanda | Media-Alta | nessuna | ✅ | verified/f11-f12-captcha-reminder.md |
| F-13 | Override 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) | Alta | nessuna (richiede un WCD su una pagina per ospiti) | ✅ | verified/F-13-wcd-param-override.md |
| F-3 | L'axis-extender OSGi salta ServiceAccessPolicy / la marcatura remote-access sui servizi SOAP dei moduli | Media (Alta con modulo WSDD) | nessuna | 🔬 | judge/axis-spring-remoting.md |
| F-9 | OpenID collega l'account della vittima all'OpenID dell'attaccante prima della verifica dell'asserzione → account takeover | Alta | nessuna (OpenID abilitato, non di default) | 🔬 🧪 | judge/sso-autologin.md |
| F-10 | readObject di TunnelServlet protetto solo da una blacklist di classi; gadget ROME/JdbcRowSetImpl/c3p0/AspectJWeaver nel classpath | Critica potenziale | peer fidato (segreto condiviso + host consentito) | ✅ le barriere reggono pre-autenticazione | verified/f10-f20-tunnel-auth-pipeline.md |
| F-14 | TokenAutoLogin si fida di un semplice header SM_USER (nessuna verifica, nessuna allowlist IP) | Media | nessuna (token SSO abilitato, non di default) | 🔬 🧪 | judge/sso-autologin.md |
| F-15 | L'importazione LAR dell'admin del sito contrabbanda RolesAdminPortletDataHandler → cancellazione massiva dei ruoli aziendali / azzeramento dei permessi | Media | admin del sito | 🔬 | judge/export-import-lar.md |
| F-16 | OpenSocial (non nel bundle di default): SSRF makeRequest pre-autenticazione, origin JS /gadgets/ifr, token di sicurezza falsificabili → impersonificazione, XSS persistente | Alta ×4 | nessuna / membro del sito | 🔬 (dipende dal deployment) | judge/opensocial-shindig.md |
| F-17 | WSRP (non nel bundle di default): SSRF ProxyServlet pre-autenticazione; endpoint markup → render arbitrario delle portlet + persistenza di typeSettings del layout | Media | nessuna | 🔬 (dipende dal deployment) | judge/wsrp.md |
Elenco completo curato con le confutazioni: FINDINGS.md · report narrativo: REPORT.md
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).