Skip to content

Governance policy: deny-by-default instead of allowlist - #1

Open
mitchellOpZero wants to merge 2 commits into
mainfrom
deny-list-default-policy
Open

Governance policy: deny-by-default instead of allowlist#1
mitchellOpZero wants to merge 2 commits into
mainfrom
deny-list-default-policy

Conversation

@mitchellOpZero

Copy link
Copy Markdown
Owner

What changed

  • servicenow/01-…Governance_API.js: removed the 16-table write allowlist. Writes are now allowed on any table except the security deny list, which grew from 11 to 15 tables (added sys_user_role, sys_user_grmember, sys_security_acl_role, oauth_credential) plus fail-closed prefix guards for sys_security*, oauth_*, sys_auth_*.
  • README: documents the deny-by-default policy model and which tables/namespaces are blocked and why.

Why

The allowlist blocked most legitimate dev work — Service Portal widgets, knowledge articles, ITSM tables were all denied — while simultaneously allowing arbitrary-server-code tables like sys_script and sys_script_include. That's friction without a coherent security boundary, and friction is how teams end up bypassing the governed path entirely.

The deny list now covers the actual boundary — writes that change who can do what (identity, roles, group membership, ACLs, auth, credentials, system properties, fix scripts) — and everything else flows through the existing check → approve → verify controls (human-approved one-use tokens, prod read-only, credential-field blocking, script pattern checks).

Verified on a live PDI

Deployed to dev353573 and exercised through the governed endpoint:

  • sp_widget / kb_knowledge writes → approved (previously blocked)
  • sys_user_grmember insert → blocked (previously would have passed — group membership is privilege escalation)
  • made-up table sys_security_something_newblocked by prefix guard (fails closed)

🤖 Generated with Claude Code

mitchellOpZero and others added 2 commits July 6, 2026 14:05
Writes are now allowed on any table except the security boundary:
identity, roles/privilege escalation, ACLs, auth/credentials, system
properties, and fix scripts. Security namespaces (sys_security*,
oauth_*, sys_auth_*) fail closed by prefix so unlisted sensitive
tables are still blocked. The allowlist blocked most legitimate dev
work (portal widgets, knowledge, ITSM tables) while allowing
arbitrary-code tables like sys_script, so it added friction without
adding a coherent boundary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ny-list default

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant