Sicherheitsforschung zu Liferay CE 7.0.3 GA4: Pre-Auth-RCE als Root (CVE-2020-7961-Klasse) Ende-zu-Ende reproduziert, plus 16 weitere Erkenntnisse — 8+ ohne bekannte CVE. Agentischer Loop-Hunt: 25 Generatoren, 22 Prüfer, 9 Live-Validatoren auf Docker. Beweiskette + Ein-Klick-Checker enthalten.
Teilen
Liferay CE 7.0.3 GA4 – Schwachstellenforschung (RAPTOR Loop-Hunt)
Ein Sicherheitsaudit von Liferay Portal CE 7.0.3 GA4 (Git-Tag 7.0.3-ga4, Commit
b2d7cc68a), durchgeführt mit der RAPTOR-Loop-Hunt-Methodik:
deterministische Aufklärung → 25 isolierte Generator-Agenten, die aus dem Rohquellcode lesen → 22 unabhängige
Judge-Agenten, die anhand des Rohquellcodes widerlegen → 9 Live-Validatoren, die eine echte GA4-Instanz in Docker angreifen.
Kernaussage: Nicht authentifizierte RCE als root Ende-zu-Ende reproduziert (Klasse CVE-2020-7961),
plus 8 weitere live-verifizierte Schwachstellen – einige davon ohne bekannte CVE.
⚠️ Rechtlich/ethisch: Alles hier richtet sich gegen eine selbst gehostete Testinstanz. Liferay CE 7.0 ist
End-of-Life (letzte Veröffentlichung 7.0.6 GA7, 2018); diese Probleme sind upstream nicht gepatcht. Verwenden Sie
dieses Material nur gegen Systeme, die Ihnen gehören oder für die Sie ausdrücklich autorisiert sind, sie zu testen.
Status: ✅ live-verifiziert gegen die Docker-GA4-Instanz · 🔬 per Code bestätigt (unabhängiger
Judge hat die vollständige Spur aus dem Rohquellcode rekonstruiert) · 🧪 benötigt Konfiguration / konfigurationsabhängig.
Vollständige kuratierte Liste mit Ablehnungen: FINDINGS.md · narrativer Bericht: REPORT.md
Neu vs. bekannt – CVE-Vergleich
Katalog von etwa 50 bekannten Liferay-7.0.x-Problemen als Vorwissen (Prior Art): PRIOR-ART.md
(OSV [email protected], NVD-Durchsuchung, Code-White-/CERT-EU-Advisories).
Befund
Bekannte CVE?
Beziehung
F-1 JSONWS-Deserialisierungs-RCE
CVE-2020-7961 (CISA KEV, in freier Wildbahn ausgenutzt)
Reproduktion + unabhängige Neuableitung. Als in GA4 ungepatcht bestätigt; vollständige Kette mit einem AspectJWeaver-Dateischreib-Gadget nachgewiesen (öffentliche PoCs verwenden normalerweise JdbcRowSetImpl-JNDI).
F-10 TunnelServlet readObject
CVE-2020-15842 (Klassenübereinstimmung)
Bekannte Klasse. Nur-Blacklist-Deserialisierungsschutz bestätigt; Pre-Auth-Barrieren live verifiziert (ohne gemeinsames Geheimnis/erlaubten Host nicht ausnutzbar).
Bekannte unsichere Standardeinstellung – unabhängig live bestätigt.
F-12 (Orakel + Reset-Ticket bei leerer Antwort)
keine gefunden
Neu. Fresh-JSESSIONID-Captcha-Bypass in Schritt 2; leere answer erzeugt ein gültiges 24-Stunden-Reset-Ticket für Konten ohne Sicherheitsfrage ohne jegliches Geheimniswissen.
F-11 SimpleCaptcha-Brute-Force
keine gefunden (CVE-2019-6588 ist ein anderes Captcha-Problem – XSS)
Neu. 4-stellige PIN + keine Ungültigmachung + Gästezähler-Bypass.
F-2 Poller-jabsorb-Deserialisierung
keine gefunden
Neu. Senke live bestätigt; Waffenisierung durch LiferaySerializer-Feldinjektion blockiert (offene Forschung).
F-4 Pingback-SSRF-Orakel
keine gefunden
Neu.
F-5 Sync-versionId-IDOR
keine gefunden
Neu.
F-6 XSL-Engine-RCE
keine gefunden (CVE-2020-13445 deckt nur FreeMarker/Velocity ab)
Neu. Die XSL-Engine lag außerhalb jedes früheren Fixes zur Template-Injection.
„Neu" = zum Stand 2026-07 wurde in OSV-/NVD-/Liferay-Advisories keine passende CVE gefunden; die Befunde wurden
nicht zur CVE-Vergabe eingereicht (die Produktlinie ist EOL).
Bekannte CVEs, die in GA4 bestätigt vorhanden sind, aber nicht live erneut getestet wurden
CVE-2020-15840 (Bypass des URL-Filters durch doppelte Kodierung), CVE-2024-8980 + CVE-2025-43748
(CSRF → Script-Console-RCE), CVE-2021-33335 (Company-Admin-Übernahme – GA4 ist die Untergrenze des
betroffenen Bereichs), CVE-2017-1000425 (flash.jsp-XSS), CVE-2021-29040 (verbose JSONWS-Fehler),
CVE-2022-41414 / CVE-2023-33949 (Enumeration/Registrierungs-Standardeinstellungen), CVE-2025-62261 (Reset-Tokens
im Klartext – NVD nennt 7.0.3 GA4 direkt). Siehe PRIOR-ART.md.
25 isolierte Agenten, einer pro Komponentenausschnitt × Bug-Klassen-Linse, Schlussfolgerung nur aus dem Rohquellcode (keine früheren Zusammenfassungen – Anti-Anker)
22 unabhängige Agenten, die jeden Kandidaten anhand des Rohquellcodes widerlegen; ein Kill erfordert im Code sichtbare Belege („Geh nicht davon aus, dass die unsichtbare Ebene sicher ist")
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
Führen Sie dann den einmaligen Einrichtungsassistenten unter http://localhost:8080/ aus (Standard-HSQL-DB; der Assistent
setzt das Admin-Passwort für [email protected]).
Den Einmal-Validator ausführen
tools/liferay_ga4_check.py ist ein einziges, nur auf der Standardbibliothek basierendes Python-3-Skript – richten Sie es auf
eine beliebige GA4-Instanz, und es testet jeden live-verifizierten Befund:
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
Erwartete Ausgabe bei einer Standard-GA4-Installation: 9 Befunde VULNERABLE
(F-1, F-1+RCE, F-2, F-4, F-5*, F-8, F-11, F-12, F-13*) plus F-10 als nicht verwundbar bestätigt
(Tunnel-Barriere hält). *F-5 und F-13 benötigen Fixture-Parameter (--leg-uuid/--version-id,
--wcd-page/--group-id/--article-id) – siehe --help.
Das Deserialisierungs-Gadget wird in reinem Python innerhalb des Skripts erzeugt (byte-verifiziert gegen
das im Rahmen der Untersuchung verwendete ysoserial-AspectJWeaver-Payload) – kein Java, keine JARs und kein ysoserial erforderlich.
Als solide verifiziert (damit Sie den Rest einordnen können)
Passwort-Reset-Tickets (128-Bit-UUID, einmalig, 24 h), Session-Erneuerung bei Ticket-Login,
Remember-me-Cookie AES-128 mit unternehmensspezifischem SecureRandom-Schlüssel, Standard-PBKDF2-Hashing, der
portalweite XML-Stack (externe Entitäten standardmäßig deaktiviert), WebDAV/SharePoint-Digest-Gates,
/api/axis|/api/liferay|/api/atom-Localhost-IP-Sperren, Upload-Pfadvalidierung, /combo/sprite-Traversal-Schutz,
Omni-Admin-Gating der Script-Konsole und der Gogo-Web-UI.
Abdeckungserklärung & Einschränkungen
Die Abdeckung wurde pro Komponente gegen das vollständige Inventar verfolgt (TRIED.md).
Nicht abgedeckt: eine tiefgehende funktionsbezogene Prüfung des gesamten 4-GB-Baums (nur Semgrep-Anker),
der Großteil von modules/apps außerhalb von foundation/web-experience auf Dateiebene, die F-2-Gadget-Forschung,
Live-Tests mit Nicht-Standard-Konfiguration (F-9/F-14) und die Erreichbarkeit der PDFBox-2.0.3-Abhängigkeits-CVEs.
Die Schleife wurde für den Bericht pausiert, nicht weil sie versiegte.
Passwort-vergessen: Benutzer-Enumeration + Antwort-Orakel für Erinnerungsfrage ohne Captcha (Fresh-Session-Bypass); leere Antwort erzeugt ein echtes Reset-Ticket für Konten ohne Sicherheitsfrage
Neu. Unsichere Standardeinstellung als Ursache (journal.article.view.permission.check.enabled=false) plus ein neuer Zustellweg (Portlet-Request-Param-Override).
F-3 Axis-Extender-SAP-Bypass
keine gefunden
Neu.
F-9 OpenID-Verknüpfung-vor-Verifizierung
keine gefunden
Neu.
F-14 SM_USER-Header-Vertrauen
keine gefunden
Neu.
F-15 LAR-Rollen-Data-Handler-Schmuggel
keine gefunden
Neu.
F-16 / F-17 OpenSocial / WSRP
keine gefunden
Neu, aber die Module sind nicht im Standard-GA4-Bundle enthalten (Liferay-Releng-Bundle: false).