Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-66917 — IDOR + Stored XSS durch fehlerhafte Autorisierung auf Objektebene in JoomGallery | Kitploit
Tools/GitHubGitHub/toanln-cov/cve-2026-66917
Authentifizierung & AutorisierungSchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationWebsicherheit
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

IDOR + Stored XSS durch fehlerhafte Autorisierung auf Objektebene in JoomGallery

Repository anzeigen
vor 1 TagNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

IDOR + Stored XSS via Broken Object-Level Authorization in JoomGallery

JoomGallery ≤ 4.3.0 — Editor-Role User Hijacks Any Gallery Image and Stores XSS Payload, Enabling Admin Session Takeover

CVE CVSS v4.0 CWE-639 CWE-79 Affected Researcher


ZUSAMMENFASSUNG

UserimageController::save() in JoomGallery prüft checkACL('edit', ...) anstelle von checkACL('edit.own', ...). Ein Benutzer mit der Rolle „Editor" kann unabhängig vom Besitzer an jedes Bild ein POST an task=userimage.save&id=N senden (IDOR — CWE-639). Da die Editor-Rolle global über core.edit verfügt, besteht die Autorisierungsprüfung für jede Bild-ID auf der Website, einschließlich Bildern, die Administratoren gehören.

In Kombination mit einem fehlenden $this->escape()-Aufruf in der Frontend-Bildvorlage kann ein Editor eine XSS-Payload im Titel eines beliebigen Bildes speichern – einschließlich Bildern von Administratoren –, was zur Ausführung von JavaScript im Browser jedes Besuchers führt. Dies ermöglicht eine vollständige Übernahme der Admin-Sitzung und eine Kompromittierung der gesamten Website.


BETROFFENE VERSIONEN

KOMPONENTEVERWUNDBARGETESTET AUFBEHOBEN
JoomGallery (com_joomgallery)4.0.0 – 4.3.0Joomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.2 / Apache)4.4.0

DETAILS ZUR SCHWACHSTELLE

Typ: Broken Object-Level Authorization / IDOR (CWE-639) verkettet mit Stored Cross-Site Scripting (CWE-79) Erforderliche Authentifizierung: Editor-Konto mit niedrigen Rechten

Ursache 1 — IDOR (CWE-639)

Datei: components/com_joomgallery/src/Controller/UserimageController.php

Die Aktion save() führt eine ACL-Prüfung mit der Berechtigung edit anstelle von edit.own durch. Die Berechtigung edit wird allen Benutzern mit der Rolle „Editor" global gewährt, sodass die Prüfung für jede Bild-ID unabhängig vom Ersteller erfolgreich ist.

USERIMAGECONTROLLER.PHP — VERWUNDBARER CODE (ZEILE 145)

root@kitploit:~
// Verwundbar
if (!$this->checkACL('edit', 'image', $recordId, $parent_id, true)) { ... }

Da core.edit von der Editor-Gruppe global gehalten wird, ergibt die Bedingung für jede Bild-ID false, was uneingeschränkten Schreibzugriff gewährt. Bei einem erfolgreichen Speichern aktualisiert das Modell außerdem created_by auf die Benutzer-ID des Angreifers und überträgt damit stillschweigend den Besitz des Bildes an den Angreifer.

Ursache 2 — Stored XSS (CWE-79)

Datei: components/com_joomgallery/tmpl/image/default.php

Die Frontend-Bildvorlage gibt $this->item->title aus, ohne es für den alt-Attributkontext HTML-zu kodieren. Der JInput-Filter STRING von Joomla entfernt keine doppelten Anführungszeichen, sodass eine Payload mit " aus dem Attribut ausbricht und beliebige Event-Handler injiziert.

DEFAULT.PHP — VERWUNDBARER CODE (ZEILEN 64, 78)

root@kitploit:~
// Verwundbar
item->title; ?>" ...>

Die Payload abc" onmouseover="alert(document.domain);" x=" wird in jos_joomgallery.title gespeichert und bei jedem Seitenaufruf roh in das HTML-Attribut eingefügt. Weder auf der Speicher- noch auf der Anzeigeebene findet eine Bereinigung statt.


PROOF OF CONCEPT

Übersicht der Angriffskette

  1. Der Admin erstellt ein Galeriebild (ID=3). Besitzer = Administrator. Veröffentlicht und genehmigt.
  2. Der Angreifer meldet sich als Editor an. Extrahiert das Session-Cookie und das CSRF-Token aus der Anmeldeseite.
  3. Der Angreifer ruft ein neues CSRF-Token von der JoomGallery-Komponente ab.
  4. IDOR: Der Editor sendet POST an task=userimage.save&id=3 mit der XSS-Payload in jform[title]. Die ACL-Prüfung ist erfolgreich (core.edit, nicht edit.own). Der Server antwortet mit HTTP 303 — nicht 403.
  5. Der Titel wird mit der nicht maskierten Payload aktualisiert. created_by wird auf die Benutzer-ID des Angreifers übertragen.
  6. Die XSS-Payload wird unescape in jos_joomgallery.title gespeichert.
  7. Jeder Besucher (oder Admin) durchsucht das Galerie-Frontend. Die Vorlage rendert alt="abc" onmouseover="alert(document.domain);". XSS wird ausgelöst. Admin-Sitzung erfasst → vollständige Kompromittierung der Website.

1. Admin Erstellt Galeriebild — Besitzer: Administrator, ID = 3

Der Admin erstellt admin_image über das JoomGallery-Backend (Joomla 5.4.7). Das Bild ist Veröffentlicht, Genehmigt und gehört Administrator

Step 1


2. Editor Extrahiert CSRF-Token aus der Anmeldeseite

GET /index.php/component/users/login — die JSON-Antwort enthält "csrf.token":"a68c2b3a...". Das Token wird für den anschließenden Login-POST erfasst.

Step 2


3. Editor Meldet Sich An — HTTP 303, joomla_user_state=logged_in

POST /index.php/component/users/login mit CSRF-Token und Editor-Anmeldedaten. Antwort: HTTP 303 und Set-Cookie: joomla_user_state=logged_in. Das Session-Cookie wird erfasst.

Step 3


4. Editor Extrahiert Neues JoomGallery-CSRF-Token

GET /index.php?option=com_joomgallery mit Session-Cookie. Die Antwort enthält ein neues "csrf.token":"2d96934b..." für die Verwendung in der Speicheranfrage.

Step 4


5. IDOR + XSS-Injektion — Server Akzeptiert mit HTTP 303

Der Editor sendet POST an option=com_joomgallery&task=userimage.save&id=3 mit jform[title] gesetzt auf:

root@kitploit:~
abc" onmouseover="alert(document.domain);" x="

Der Server antwortet mit HTTP 303 (nicht 403), was den IDOR bestätigt. Der Location-Header zeigt die XSS-Payload in der Weiterleitungs-URL, was bestätigt, dass der Titel akzeptiert und gespeichert wurde.

Step 5


6. Besitz Übertragen — Besitzer Geändert zu Editor-Benutzer

Das JoomGallery-Backend zeigt, dass das Bild ID=3 nun den Besitzer Editor User hat. Das Feld created_by wurde während des nicht autorisierten Speicherns stillschweigend in der Datenbank aktualisiert.

Step 6


7. Datenbank Bestätigt Unescape Gespeicherte Payload

Eine SQL-Abfrage auf jos_joomgallery bestätigt, dass die XSS-Payload gespeichert ist — " wird als rohes doppeltes Anführungszeichen gespeichert, nicht als ". Auf der Speicherebene fand keine Bereinigung statt.

Step 7


8. XSS Wird im Galerie-Frontend Ausgelöst

Jeder Benutzer, der /index.php/component/joomgallery/gallery besucht, löst die Payload aus. Der alert()-Dialog des Browsers bestätigt die JavaScript-Ausführung im Ursprung des Opfers (document.domain).

Step 8


AUSWIRKUNG

  1. Nicht autorisierte Bildänderung (IDOR): Ein Benutzer mit der Rolle „Editor" kann jedes Galeriebild auf der Website ändern, einschließlich Bildern von Administratoren, ohne Besitzüberprüfung.
  2. Stillschweigende Besitzübertragung: Jedes nicht autorisierte Speichern weist created_by stillschweigend dem Angreifer zu und verändert den Prüfpfad dauerhaft.
  3. Stored XSS — Dauerhafte Ausführung: Die injizierte JavaScript-Payload wird bei jedem Laden einer Galerieseite im Browser jedes Besuchers ausgeführt, was nicht authentifizierte Besucher und Administratoren gleichermaßen betrifft.
  4. Admin-Sitzungsübernahme → Vollständige Kompromittierung der Website: Ein bösartiges Skript im alt-Attribut kann das Session-Cookie des Administrators exfiltrieren, wodurch der Angreifer vollständigen Backend-Zugriff und die Kontrolle über die gesamte Joomla-Installation erhält.
  5. Scope-Änderung: Die XSS wird im Browser-Ursprung des Opfers ausgeführt (CVSS S:C), wodurch die Vertrauensgrenze zwischen der Sitzung des Angreifers mit niedrigen Rechten und der Sitzung des Opfers mit hohen Rechten überschritten wird.

REFERENZEN

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • GitHub Advisory: https://github.com/advisories/GHSA-8vxv-gf52-gm5h
  • Vendor Repository: https://github.com/JoomGalleryfriends/JoomGallery
  • Vendor New Release Note: https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
Tool herunterladen