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