Skip to content

Unscoped IPluginVaultFactory lets any plugin decrypt any other plugin's (or the host's) vault secrets #246

Description

@PianoNic

`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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions