Repository navigation
docs: warn UnifiedPDPPlugin default_rules.json blanket-locks unroled callers - #6830
Open
benedictkwok wants to merge 1 commit into
Open
benedictkwok wants to merge 1 commit into
benedictkwok wants to merge 1 commit into
Conversation
benedictkwok
requested review from
Lang-Akshay,
brian-hussey,
crivetimihai,
ja8zyjits and
msureshkumar88
as code owners
September 15, 2026 00:50
…callers With default_decision: "deny" and the shipped default_rules.json (every rule keyed on roles), any caller whose auth token has no roles claim gets denied EVERY tool call and resource fetch identically -- not selectively protected. This is easy to mistake for targeted enforcement during evaluation. Live-tested against a reference vulnerable MCP server (DVMCP Challenge 9, an authorization-bypass tool): with UnifiedPDPPlugin enabled on shipped defaults, both the actual exploit call and a completely unrelated, harmless tool call were denied with the identical 'no matching allow rule (fail closed)' reason -- confirming the block was blanket lockout from a missing roles claim, not the plugin recognizing the specific vulnerability. Contrasts this with a genuinely targeted fix: a custom roles: ["*"] deny rule scoped to one tool's exact name (verified live against a real known-malicious tool in PR IBM#6826 / issue IBM#6825) protects that tool specifically without locking out unrelated callers. Adds a worked example of that pattern and cross-references IBM#6825's proposed ToolShadowDetectorPlugin for automatic near-miss detection. Fixes IBM#6829 Signed-off-by: benkwok <benedictkwok@yahoo.com>
benedictkwok
force-pushed
the
docs/unified-pdp-blanket-lockout-warning
branch
from
October 23, 2026 22:15
87fb205 to
f130728
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #6829 — documents that enabling
UnifiedPDPPluginwith the shippeddefault_rules.jsondenies EVERY tool call and resource fetch identically for any caller whose auth token has norolesclaim, rather than selectively protecting anything. This is existing, correct plugin behavior (not a bug in the plugin logic) — the gap is that it's easy to mistake for targeted enforcement during evaluation, and the current README doesn't call it out.How I found this
Live-tested against Damn Vulnerable MCP Server (DVMCP) Challenge 9, an authorization-bypass vulnerability where a
remote-accesstool only checks that anauth_tokenargument is non-empty, never validating it against any real credential.Enabled
UnifiedPDPPluginwith the shippeddefault_rules.json, hoping it would block the exploit. It did — but a control call to a completely unrelated, harmless tool with the same token was denied identically:Both the exploit and a benign call got the exact same denial, because every rule in
default_rules.jsonis keyed onroles, and the test token carried norolesclaim — confirming the block was a blanket lockout from a missing role, not the plugin recognizing the specific vulnerability.Contrast: genuinely targeted protection is achievable
In a separate test against DVMCP Challenge 5 (tool shadowing), I proved
UnifiedPDPPluginCAN deliver real, selective, tool-specific protection — via a customroles: ["*"]deny rule scoped to one tool's exact federated name (bypassing role-matching entirely). Live-tested and shipped as PR #6826 / issue #6825. This PR's doc changes cross-reference that pattern as the concrete recipe for "how do I protect one specific tool" without causing the blanket-lockout side effect.Changes (docs only)
plugins/unified_pdp/README.md:roles: ["*"]deny rule scoped to one specific tool, with a note on its scope/limits (requires already knowing the bad tool's name; doesn't detect a new one — cross-references Feature request: detect tool shadowing (near-miss tool names impersonating a legitimate tool) #6825's proposedToolShadowDetectorPlugin).Testing evidence
Doc-only change. The reproduction in the issue (#6829) and this PR description was run against a live gateway with
UnifiedPDPPluginactually enabled on the shippeddefault_rules.json, comparing the exploit call against a control call with the same token.Scope
Documentation only — no plugin behavior, defaults, or rule files changed.