Bug #180
offen[Bugsink] TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "Event%') AND EXTRACTVALUE(2262,CONCAT(0x7e,((SELECT (ELT(2262=2262,1)…
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/3fbc27cc-e983-4c62-855b-abad1e5bcf54/event/last/
Typ: NEW issue
Projekt: www-rietberg-de
Bugsink Alert
TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException: The controller "Event%') AND EXTRACTVALUE(2262,CONCAT(0x7e,((SELECT (ELT(2262=2262,1)…
Automatisch erstellt durch n8n
KI-Analyse:
1️⃣ ROOT CAUSE
| Symptomatischer Hinweis | Was es uns sagt | Warum es die Wurzel des Problems ist |
|---|---|---|
InvalidControllerNameException – der Controller-Name im Fehlerstack enthält ein SQL-Injektions-Muster: "Event%') AND EXTRACTVALUE(2262,CONCAT(0x7e,((SELECT (ELT(2262=2262,1)))),0x7e))-- -"
|
TYPO3 hat den Wert, den der Aufrufer für das Controller-Parameter übergeben hat, als Kandidaten für einen Extbase-Controller interpretiert. Der Wert ist ungültig (er enthält SQL-ähnlichen Unrat) und wird daher von Extbases Sicherheitsüberprüfungen abgelehnt. | Extbase gestattet nur Controllernamen, die explizit für ein Plugin über ExtensionUtility::configurePlugin() registriert sind. Die Plugin-Konfiguration (in ext_localconf.php des Calendarlist-Erweiterungsarchyivs) enthält den legitimen Controller Event (oder eine Reihe von Controllern), aber der schädliche String wird nicht als einer dieser erlaubten Namen erkannt. Die Ausnahme wird ausgelöst, bevor eine Datenbankabfrage ausgeführt werden kann – der Injektionsversuch wird früh abgefangen, aber das Muster deutet auf eine bösartige Anfrage hin (oft Teil einer SQL-Injektions-/LFI-Kette). |
Die Fehlermeldung verweist explizit auf „Bitte überprüfen Sie TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in Ihrer ext_localconf.php.“ |
Der Entwickler muss sicherstellen, dass das Plugin Calendarlist weiß, welche Controller zugelassen sind. | Das Fehlen oder die falsche Konfiguration dieser Zeile ist die Ursache des Problems. Wenn der erlaubte Controllerliste der Plugin-Definition der „Event“-Controller fehlt (oder wenn die gesamte Plugin-Registrierung fehlt), wird jeder unbekannte Controller (auch ein manipulierter) abgelehnt, was zu dem obigen Fehler führt. |
Zusammenfassung:
Das Calendarlist-Plugin in ext_localconf.php listet den Controller Event (oder eine Reihe von Controllern) nicht in seiner configurePlugin()-Auflistung auf, sodass jede Anfrage, die versucht, diesen Controller zu verwenden – sei es legitim oder bösartig – mit InvalidControllerNameException fehlschlägt. Der SQL-artige String ist lediglich ein Test des Framework-Schutzes und kein erfolgreicher Injektionsversuch.
2️⃣ FIX (konkret)
| Was zu ändern ist | Wie man es ändert (Code-Snippet) | Warum es funktioniert |
|---|---|---|
Stellen Sie sicher, dass das Plugin Calendarlist korrekt registriert ist (d. h. ext_localconf.php enthält eine Zeile wie unten gezeigt). |
```php | |
| // in /path/to/your/site/typo3conf/ext/calendarlist/Configuration/ext_localconf.php (oder innerhalb der ext_localconf.php des Erweiterungsverzeichnisses) | ||
| \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( |
'Calendarlist', // Erweiterungsname (plugin namespace)
'Calendarlist', // Plugin-Name (wird von TSC darüber gesetzt; behalten Sie es bei)
[
\Calendarlist\Controller\EventController::class, // erlaubte Controller
// fügen Sie andere beabsichtigte Controller hinzu, z. B.:
// \Calendarlist\Controller\OtherController::class,
],
[
// optionale Nicht-Standard-Aktion (z. B. 'list' → standardmäßig 'list')
// 'Event' => 'list',
]
);
``` | Extbase überprüft den Controller-Namen nur gegen diese Liste. Wenn der übergebene Controller (Event) vorhanden ist, wird die Ausnahme unterdrückt und die Aktion wird ausgeführt. |
| Stellen Sie sicher, dass der ExtensionKey mit dem tatsächlich installierten Erweiterungsverzeichnis übereinstimmt. Überprüfen Sie das tatsächliche Erweiterungsverzeichnis (es könnte `calendarlist`, `typo3_calendarlist`, `kalenderlist` usw. sein) und korrigieren Sie den ExtensionKey in der Zeile `configurePlugin` entsprechend. | `ExtensionUtility::configurePlugin('Calendarlist', …)` vs. `ExtensionUtility::configurePlugin('MyCalendarlist', …)` | Eine Fehlerschreibung des ExtensionKeys führt dazu, dass die Plugin-Registrierung fehlgeschlagen ist und der Controller nie „erlaubt“ wird. |
| Stellen Sie sicher, dass der Controller-Klasse existiert – überprüfen Sie, ob `Calendarlist\Controller\EventController` vorhanden ist (oder benennen Sie sie, falls sie anders heißt). Wenn der Controller überarbeitet wurde (z. B. in `Calendarlist\Controller\EventController`), fügen Sie die korrekte FQCN zur Liste hinzu. | Überprüfen Sie `vendor/you/extension/Classes/Controller/EventController.php`. | Wenn die Klasse fehlt, wird der Controller nicht aufgelöst → gleiche Ausnahme. |
| Strengen Logging der Anfrage hinzufügen (optional, aber eine gute Sicherheitsmaßnahme). Fügen Sie einen einfache `if (isset($_GET['c'])) { \TYPO3\CMS\Core\Utility\GeneralUtility::logger()->info('Ungültige Controller-Anfrage', ['c' => $_GET['c'], 'plugin' => $_GET['plugin'] ?? null]); }` vor der Ausnahme hinzu. | Dies hilft dabei, die Quelle des Angriffs zu verfolgen, während die Ausnahme abgefangen wird. | Ermöglicht es Ihnen, wiederkehrende Versuche schnell zu erkennen. |
| Überprüfen Sie, ob das Plugin wirklich benötigt wird. Wenn das Calendarlist-Plugin nicht mehr verwendet wird, können Sie seine Konfiguration entfernen, um die Angriffsfläche zu verringern. | Entfernen oder kommentieren Sie die `configurePlugin`-Zeilen entsprechend. | Reduziert potenziellen Missbrauch. |
Wichtig: Die Ausführung des Injektionsstrings führt NICHT zu einer Datenexfiltration; TYPO3 stoppt den Vorgang frühzeitig. Das Problem ist jedoch die fehlende Plugin-Konfiguration, die das Framework anfällig für beliebige Controller-Namen macht, die einen Injektionsversuch darstellen.
3️⃣ BETROFFENE TYPO3-ERWEITERUNG
| Erweiterung | Warum es relevant ist | Typische Installationsadresse |
|---|---|---|
calendarlist (der Plugin-Name „Calendarlist“ wird in der Fehlermeldung erwähnt) |
Die Erweiterung definiert ein Frontend-Plugin namens Calendarlist und sollte seine erlaubten Extbase-Controller über ExtensionUtility::configurePlugin() registrieren. Die fehlende/nebenläufige Konfiguration löst den InvalidControllerNameException aus. |
In den meisten Fällen unter typo3conf/ext/calendarlist/ (oder public/typo3conf/ext/calendarlist/), wenn es im Stammverzeichnis installiert ist. |
Wenn Sie nicht sicher sind, überprüfen Sie vendor/ oder composer.json – der ExtensionKey wird dort oft angegeben.
4️⃣ CONFIDENCE
93 % – Der Trace, die Fehlermeldung und die TYPO3-Spezifikationen sind eindeutig: Die Ausnahme wird von Extbase ausgelöst, weil der Controller nicht durch configurePlugin() erlaubt ist. Das SQL-artige Muster ist ein Test und kein erfolgreicher Injektionsversuch. Das Hauptproblem ist die fehlende/nebenläufige Plugin-Konfiguration. Die einzige Unklarheit besteht darin, ob der ExtensionKey oder die Controller-Klasse falsch geschrieben ist (möglicherweise ein benutzerdefiniertes Fork der Erweiterung), was die kurzfristige Behebungswahrscheinlichkeit leicht beeinflussen kann. Daher ist die Confidence sehr hoch, aber nicht absolut perfekt.
TL;DR – Was Sie jetzt tun sollten¶
- Öffnen Sie die
ext_localconf.phpder Calendarlist-Erweiterung. - Stellen Sie sicher, dass
ExtensionUtility::configurePlugin('Calendarlist', 'Calendarlist', [EventController::class, …])vorhanden ist. - Bestätigen Sie, dass der ExtensionKey mit dem tatsächlichen Erweiterungsverzeichnis übereinstimmt und dass der Controller existiert.
- (Optional) Fügen Sie eine einfache Protokollierung hinzu, um zu sehen, wer die fehlerhafte Anfrage stellt.
- Bereitstellen und testen Sie: Rufen Sie das Plugin mit
?plugin[calendarlist]=1&c=Event&…auf – es sollte die erwartete Aktion ausführen und nicht die InvalidControllerNameException werfen.
Wenn das Plugin wirklich nicht verwendet wird, können Sie es sicher entfernen – das beseitigt das Problem vollständig.
Sicherheits-Checkliste (für die Zukunft)
| ✅ | Punkt |
|---|---|
| ✅ | Alle Extbase-Plugins registrieren ausdrücklich erlaubte Controller in configurePlugin. |
| ✅ | Controllerklassen werden unter Classes/Controller/ mit einer öffentlichen Action-Methode gespeichert. |
| ✅ | Keine Controller-Namen werden aus eingehenden GET/POST-Parametern direkt abgeleitet. |
| ✅ | Protokollieren Sie nicht-autorisierte Controller-Versuche für die forensische Analyse. |
| ✅ | Halten Sie die Erweiterung auf dem neuesten Stand (Patch-Level) – ältere Erweiterungen übersehen oft configurePlugin. |
Wenn diese Checkliste überprüft ist, wird der „SQL-artige Controller“-Fehler unterdrückt und das Framework ist gegen ähnliche Umgehungsversuche geschützt. Viel Erfolg!
Nichts anzuzeigen