`PluginHost.cs:201` registers `IPluginVaultFactory` itself — not just the plugin's own keyed `IPluginVault` — into every plugin's child DI container. `PluginVaultFactory.GetVault(namespace)` (`Schuly.Infrastructure/Vault/PluginVaultFactory.cs:15`) performs no ownership check.
Exploit: any plugin resolves the factory and calls `GetVault("plugin:Schuly.Plugin.Schulware")` or `GetVault("host")` to decrypt another plugin's or the host's secrets (tokens, session cookies, raw credentials).
Fix: stop registering `IPluginVaultFactory` in the plugin child provider — only the pre-scoped keyed `IPluginVault` should be visible to plugin code.
Found during the Aug 2026 security sweep.
`PluginHost.cs:201` registers `IPluginVaultFactory` itself — not just the plugin's own keyed `IPluginVault` — into every plugin's child DI container. `PluginVaultFactory.GetVault(namespace)` (`Schuly.Infrastructure/Vault/PluginVaultFactory.cs:15`) performs no ownership check.
Exploit: any plugin resolves the factory and calls `GetVault("plugin:Schuly.Plugin.Schulware")` or `GetVault("host")` to decrypt another plugin's or the host's secrets (tokens, session cookies, raw credentials).
Fix: stop registering `IPluginVaultFactory` in the plugin child provider — only the pre-scoped keyed `IPluginVault` should be visible to plugin code.
Found during the Aug 2026 security sweep.