mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-14 00:02:55 +00:00
* fix(cli): count superadmins as able to preserve ownership on push Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011BzU9zd53JsTShCsbKzYzB * fix: resolve variables in the url and headers of an mcp resource Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: keep resolved mcp secrets out of header warnings and userinfo urls Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: drop the url from mcp client errors before rmcp logs them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: run rmcp's reqwest client without a log subscriber Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: scrub the request target from mcp error bodies Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: drop server error bodies from mcp transport errors Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: fail closed when an mcp error message has no status prefix Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
42 lines
1.8 KiB
SQL
42 lines
1.8 KiB
SQL
-- Fixture for the MCP resource-authorization regression test (WIN-2041,
|
|
-- GHSA-7qg3-pr4g-cq5x).
|
|
--
|
|
-- Models a low-privileged developer (test-user-3, a plain workspace member) who
|
|
-- references, from an AI Agent flow, an MCP resource living in a private folder
|
|
-- they have NO access to. The AI agent worker must refuse to load that resource
|
|
-- because the developer's identity lacks resources:read on it.
|
|
|
|
-- Private folder the developer cannot read (empty extra_perms, owned by admin).
|
|
INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms, created_by)
|
|
VALUES ('test-workspace', 'private', 'Private Folder', '{"u/test-user"}', '{}', 'test-user');
|
|
|
|
-- MCP resource the developer is NOT allowed to read. The URL is a non-resolvable
|
|
-- public host so that, for an authorized caller, resolution succeeds but the
|
|
-- later connection step fails deterministically without network access.
|
|
INSERT INTO resource (workspace_id, path, value, description, resource_type, extra_perms, created_by)
|
|
VALUES (
|
|
'test-workspace',
|
|
'f/private/admin_mcp',
|
|
'{"name": "admin_mcp", "url": "https://mcp.invalid.windmill.test"}',
|
|
'Private MCP resource only admin can read',
|
|
'mcp',
|
|
'{}',
|
|
'test-user'
|
|
);
|
|
|
|
-- MCP resource whose URL lives in a variable. The host only appears in the
|
|
-- variable, so an error naming it proves the reference was resolved.
|
|
INSERT INTO variable (workspace_id, path, value, is_secret, description, extra_perms)
|
|
VALUES ('test-workspace', 'u/test-user/mcp_url', 'https://mcp-from-var.invalid.windmill.test/key', false, '', '{}');
|
|
|
|
INSERT INTO resource (workspace_id, path, value, description, resource_type, extra_perms, created_by)
|
|
VALUES (
|
|
'test-workspace',
|
|
'u/test-user/var_mcp',
|
|
'{"name": "var_mcp", "url": "$var:u/test-user/mcp_url"}',
|
|
'MCP resource with its URL in a variable',
|
|
'mcp',
|
|
'{}',
|
|
'test-user'
|
|
);
|