Bug #169
offen[Bugsink] TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "') AND ('bnvzdf'='bnvzdf''" is not allowed by plugin "Calendarlist". …
0%
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/pluginGET-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/$_POSTin 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 Erweiterungcalendarlist(odercalendlist, je nach Projekt). Die genaue Erweiterung finden Sie untervendor/→*/Calendarlist/*. Dieext_emconf.php/ext_localconf.phpdieser 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.phpin einer Unter-Verzweigungsdatei versteckt sein (z. B. intypo3/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