Projekt

Allgemein

Profil

Aktionen

Bug #169

offen

[Bugsink] TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "') AND ('bnvzdf'='bnvzdf''" is not allowed by plugin "Calendarlist". …

Von Bug Sink vor etwa 1 Monat hinzugefügt.

Status:
Neu
Priorität:
wichtig
Zugewiesen an:
-
Beginn:
08.09.2026
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

Beschreibung

Bugsink: https://bugsink.cytrus.de/issues/issue/e84f68a9-79f4-473c-8616-0e88f8f4d7be/event/last/

Typ: NEW issue

Projekt: www-rietberg-de

Bugsink Alert

TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "') AND ('bnvzdf'='bnvzdf''" is not allowed by plugin "Calendarlist". …


Automatisch erstellt durch n8n

KI-Analyse:

1. Ursache

Der InvalidControllerNameException wird ausgelöst, weil die Anfrage einen Controller-Namen übergibt, der die Zeichenfolge*

") AND ('bnvzdf'='bnvzdf'

enthält. Extbase prüft diesen Wert gegen die von Plugin „Calendarlist“ erlaubten Controller-Namen (die in ext_localconf.php mit ExtensionUtility::configurePlugin() definiert sind). Da der übergebene Wert keine der erlaubten Controller-Namen ist (und zudem ungültige Anführungszeichen, SQL-artige Syntax und Leerzeichen enthält), entscheidet Extbase, dass der Controller „nicht erlaubt“ ist und wirft die Ausnahme.

Die kurze Ursache ist also:

  • Unsauberer Parameter (controller / action / plugin GET-Parameter, der aus der URL kommt) → wird nicht bereinigt/validiert → Extbase interpretiert den schadhaften Wert als Controller-Namen → Exception.

Typische Ursachen sind:

  • Eine schadhafte URL (z. B. durch Angreifer generiert) wird an den Server gesendet.
  • Eine Erweiterung leitet den Rohdatenwert direkt aus $_GET/$_POST in die Extbase-Routing-Logik weiter, ohne ihn gegen die Plugin-Konfiguration zu prüfen.
  • Es existiert keine sichere Fallback-Validierung, um das Parsen zu unterbrechen, bevor die Controller-Auswahl erreicht wird.

2. Beschreibung des Fixes (konkret)

Maßnahme Was zu tun ist Warum es hilft
a. Überprüfen Sie die Plugin-Konfiguration Öffnen Sie die ext_localconf.php der Erweiterung „Calendarlist“ (oder der Erweiterung, die das Plugin bereitstellt) und überprüfen Sie die Zeile ExtensionUtility::configurePlugin(). Stellen Sie sicher, dass es nur die erlaubten Controllernamen auflistet, z. B.:
['Calendarlist' => 'Calendarlist\\Controller\\CalendarlistController,ListAction']
Extbase greift auf diese Whitelist zurück. Wenn ein unbekannter Controller angefordert wird, wird die Ausnahme ausgelöst. Die Whitelist ist die einzige vertrauenswürdige Quelle.
b. Richten Sie einen „catch-all“-Router ein Fügen Sie in der Erweiterungsspezifischen ext_routes.php ein Fallback-Routing hinzu, das nicht-extbase-Anfragen abfängt und z. B. TYPO3\CMS\FrontEndRouting\Exception\NoMatchFoundException wirft. Dies verhindert, dass Extbase einen schadhaften Controller-Namen überhaupt interpretiert. Wenn der Router einen Nichtübereinstimmung feststellt, wird das Routing beendet, bevor der Controller-Auswahlprozess beginnt, wodurch die InvalidControllerNameException vermieden wird.
c. Validieren Sie den Controller-/Action-Parameter frühzeitig In der Erweiterungsspezifischen PluginController (oder in einem Plugin Sub-Klasse) überschreiben Sie die processArguments()-Methode, um den controller-Parameter zu überprüfen: php if (!preg_match('#^[a-zA-Z0-9_]+$#', $controllerName)) { throw new InvalidParameterException('Ungültiger Controller-Name', 1678412864); } Eine einfache Regex-Sicherheitsprüfung blockiert SQL-Injection-ähnliche Zeichen sofort und verhindert so, dass die Ausnahme weiter oben ausgelöst wird.
d. Bereinigen Sie alle GET/POST-Daten, die direkt verwendet werden Gehen Sie alle Stellen durch, an denen $_GET['controller'] oder $_POST['controller'] gelesen wird (z. B. in initializeObject, processArguments). Stellen Sie sicher, dass Sie GeneralUtility::cleanInputValue() verwenden oder den Wert gegen den erlaubten Controller-Namen whitelisten. Wenn schadhafte Zeichen früher entfernt oder verworfen werden, kann sie Extbase nie als Controller-Namen sehen.
e. Testen Sie mit einer schadhaften URL Rufen Sie etwas wie index.php?id=...&controller=...) AND ('bnvzdf'='bnvzdf' auf und bestätigen Sie, dass Sie entweder auf eine 404-Seite/ eine freundliche Fehlermeldung umgeleitet werden, anstatt den vollständigen PHP-Stack-Trace zu sehen. Dies stellt sicher, dass der Fix den Ausnahme-Stack (den, den Sie gesehen haben) tatsächlich blockiert.

Zusammenfassend lässt sich sagen, dass die grundlegende Lösung darin besteht, sicherzustellen, dass nur Controllernamen aus der configurePlugin()-Liste akzeptiert werden und der eingehende Wert vor dem Übergeben an Extbase bereinigt/validiert wird. Die spezifische Kombination aus Überprüfung der Plugin-Konfiguration und frühe Validierung/Cleanup verhindert die Ausnahme zuverlässig.


3. Von der Schwachstelle betroffene TYPO3-Erweiterung

  • Erweiterungsschlüssel (derjenige, der Calendarlist-Plugin bereitstellt): In der Regel die Erweiterung calendarlist (oder calendlist, je nach Projekt). Die genaue Erweiterung finden Sie unter vendor/ → */Calendarlist/*. Die ext_emconf.php/ext_localconf.php dieser Erweiterung deklariert das Plugin „Calendarlist“.

Wenn das Projekt mehrere Erweiterungen mit demselben Plugin-Namen verwendet, könnte die Liste der Erweiterungen wie folgt lauten:

Erweiterungsschlüssel Datei relevante Plugin-Konfiguration
calendarlist ext_localconf.php von typo3/conf/ext/calendarlist/ext_localconf.php ExtensionUtility::configurePlugin('calendarlist', 'Calendarlist', ['Calendarlist' => 'CalendarlistController'])

(Korrigieren Sie den Erweiterungsschlüssel und den Controller-Namen, falls sie abweichen.)


4. Konfidenzbewertung

  • Konfidenz: 85 %

Warum nicht 100 %?

  • Die genaue Zeile der Plugin-Konfiguration könnte in einer anderen ext_localconf.php in einer Unter-Verzweigungsdatei versteckt sein (z. B. in typo3/sitenavigation/ext_localconf.php).
  • Es könnte zusätzliche, nicht veröffentlichte Router geben, die ebenfalls den Controller-Namen „Calendarlist“ analysieren.

Dennoch deutet die Fehlermeldung (der Controller-String entspricht exakt einem SQL-Injection-Muster) stark darauf hin, dass eine Validierung des Controller-Namens fehlt, die durch die Überprüfung der Plugin-Konfiguration und eine frühzeitige Parameterprüfung behoben werden kann. Daher ist der beschriebene Fix das wahrscheinlichste, robusteste Mittel, um das Problem zu lösen.


Zusammenfassung:
Überprüfen Sie configurePlugin() in der Erweiterung „Calendarlist“, fügen Sie eine frühzeitige Sicherheitsüberprüfung des controller-Parameters hinzu und stellen Sie sicher, dass jede Erweiterung den Controller-Namen vor dem Übergeben an Extbase bereinigt. Dadurch wird der InvalidControllerNameException für den gegebenen Angriff zuverlässig verhindert.

Nichts anzuzeigen

Aktionen

Auch abrufbar als: Atom PDF