Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 03:40

Blind SSRF and Arbitrary JavaScript Injection via Host Header Poisoning in actionResourceJs

CVSS –1 Quelle

Beschreibung

**1. Craft CMS ist anfällig für Server-Side Request Forgery (SSRF) und Arbitrary JavaScript Injection durch den Endpunkt `/actions/app/resource-js`. Durch Ausnutzen der standardmäßigen permissiven `trustedHosts`-Konfiguration kann ein Angreifer den `Host`- oder `X-Forwarded-Host`-Header vergiften, um die `$baseUrl` der Anwendung zu manipulieren. Dadurch wird die interne URL-Validierung des Endpunkts umgangen, wodurch der Backend-Guzzle-Client gezwungen wird, eine bösartige Nutzlast von einem angreifergesteuerten Server abzurufen und diese mit einem "Content-Type: application/javascript"-Header an den Client zu reflektieren. **2. Vulnerabilitätsmechanismus (Wurzelursache)** Die Sicherheitsanfälligkeit manifestiert sich, wenn `assetManager.cacheSourcePaths` auf `false` gesetzt ist. Die Angriffskette beruht auf drei strukturellen Fehlern und unsicheren Standardeinstellungen: - **A. Default Proxy Trust ("trustedHosts"): Crafts Standardeinstellung "GeneralConfig::$trustedHosts" ist auf "['any']" eingestellt. Dies ermöglicht es einem Angreifer, die strengen "Host"-Header-Validierungen des Front-End-Webservers (Nginx/Apache) zu umgehen, indem er einfach einen "X-Forwarded-Host"-Header einschleust. Yii2 wird dies analysieren und global `$baseUrl` auf die Domain des Angreifers setzen. - **B. Insecure HTTP Client (`actionResourceJs`):** In `AppController::actionResourceJs()` wird die `str starts with($url, $baseUrl)`-Validierung umgangen, weil `$baseUrl` bereits vom Angreifer vergiftet ist. Der Kern verwendet dann `Craft::createGuzzleClient()->get($url)`. Im Gegensatz zum GraphQL Asset-Fetcher ist diese Guzzle-Instanz standardmäßig `ALLOW REDIRECTS => true`. - **C. Forced JS Content-Type:** Die vom Server des Angreifers abgerufene Antwort wird dem Benutzer blind über `$this->asRaw()` mit dem Header `Content-Type: application/javascript` zurückgegeben. **3. Angriffsszenario & Auswirkungen (Nachweis der Ausnutzung)** Dieser Endpunkt fungiert als Proxy, nimmt nicht verifizierte Remote-Inhalte und dient als gültiges JavaScript. Während die direkte SSRF eine interne Netzwerkuntersuchung ermöglicht, treten die verheerendsten Auswirkungen auf, wenn Caching-Schichten beteiligt sind. Wenn sich die Craft CMS-Instanz hinter einer Caching-Schicht befindet, führt diese Sicherheitsanfälligkeit direkt zu **Web Cache Poisoning**: 1. Ein nicht authentifizierter Angreifer sendet die vergiftete Anfrage. 2. Die Caching-Schicht speichert die bösartige JavaScript-Antwort für die legitime URI "/actions/app/resource-js". 3. Wenn sich ein authentifizierter Administrator in der Systemsteuerung anmeldet, lädt sein Browser das vergiftete zwischengespeicherte JavaScript (**Stored XSS**). 4. Das bösartige Skript extrahiert Fenster. Craft.csrfTokenValue` und sendet stillschweigend eine POST-Anfrage an `/admin/actions/plugins/install-plugin` und erreicht **1-Click Remote Code Execution (RCE)** via Session Riding. ## Refereces https://github.com/craftcms/cms/pull/18559

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieKeine Angaben
Betroffene Versionen< 5.10, < 4.18
Behobene Versionen5.10, 4.18

Quellen & weiterführende Informationen

Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.

Was ist zur Behebung zu tun?

Auf eine behobene Version aktualisieren: 5.10, 4.18.

PrioritätGrün
EinordnungPlanbar behandeln und überwachen.

Empfohlene Schritte

  • Betroffene Systeme identifizieren: Pixel & Tonic Craft CMS.
  • Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
  • Update/Rollout auf behobene Version vorbereiten und priorisiert einspielen.
  • Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.

Übergangsmaßnahmen

  • Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
  • WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
  • Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
  • Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.