Replies: 2 comments
|
I "think" this has been prepare "for the future" that hasn't come yet. It makes perfect sense to honor the SecurityClass in the registration and replace the old SECURITY_FILTERS. I see no reason to give Core filters any privilege over external ones. |
0 replies
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
What?
Pipeline validation treats a hardcoded name list as the source of
truth for "this filter is security-critical." Custom filters
registered through the public registry API (including praxis-ai
filters) cannot join that set, even when they are already marked
SecurityClass::Security.SecurityClassalready exists on the registry. Builtins areclassified with it, and out-of-tree filters can opt in via
register_with_class. The fail-open, conditional-security, andSkipTo-bypass checks still match names against
SECURITY_FILTERSinstead of that class.
The idea is that registration decides whether a filter is
security-critical, and the existing checks follow that
classification. Core would not list downstream filter names.
Goals
filter registered as
SecurityClass::Security, not only builtins.a core name-list change.
(
failure_mode: openstill requiresinsecure_options.allow_open_security_filters).Why?
A security filter with
failure_mode: openskips the check onprovider timeout, network error, or other
FilterErrorand forwardsthe request. Core already refuses that misconfiguration at startup
for builtins (
ip_acl,guardrails,csrf, …).That safety net is a closed list of core names. A filter registered
later, even as
SecurityClass::Security, is not in the list, sooperators get no warning.
This showed up downstream in
praxis-proxy/ai#753
for
ai_guardrails: it is a security gate (PII / injectionscreening via an external provider), but
failure_mode: openisaccepted with no config-time error. The same gap exists for other
AI filters that already call
register_with_class(..., SecurityClass::Security)today (for examplecredential_inject).Marking them Security does not currently change validation.
ai_guardrailsis one consumer, not the core change. Core shouldnot special-case that name. Any future security-class filter
(AI or otherwise) should get the same checks by registering as
Security.
User stories
failure_mode: openon asecurity-class filter to fail startup (unless I set
allow_open_security_filters), so a provider outage cannotsilently bypass the check.
SecurityClass::Securityand have the existing pipelinechecks apply, so I do not need a core PR per filter name.
the registry and the checks, so the two cannot drift.
Alternatives considered
SECURITY_FILTERS. Works for onefilter. Every new AI/out-of-tree security filter still needs a
core PR, and core starts owning names it does not implement.
Ships without a core change, but splits the safety net and is
easy to miss for the next filter. SkipTo / conditional checks
would have to be copied too.
Honoring
SecurityClassin the existing checks looks like theoption that scales and matches what the registry API already
advertises.
Open questions
SECURITY_FILTERSremain as a builtin snapshot, or shouldthe registry class become the only source of truth once the
checks use it?
All reactions