Jason Gerlowski created SOLR-13355:
--------------------------------------

             Summary: RuleBasedAuthorizationPlugin ignores "all" permission for 
most handlers
                 Key: SOLR-13355
                 URL: https://issues.apache.org/jira/browse/SOLR-13355
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
          Components: security
    Affects Versions: 8.0, 7.5, master (9.0)
            Reporter: Jason Gerlowski
            Assignee: Jason Gerlowski


RuleBasedAuthorizationPlugin defines a set of predefined permission rules that 
users can use ootb to lock down sets of APIs to different roles (and 
ultimately, users).  The widest of these, the "all" permission is intended to 
be a catch-all that covers all requests not handled by an earlier rule.

But in practice, "all" doesn't seem to have any effect on most endpoints.  For 
example, the security.json below will still allow the readonly user to hit 
almost all endpoints!

{code}
{
  "authentication": {
    "blockUnknown": true,
    "class": "solr.BasicAuthPlugin",
    "credentials": {
      "readonly": "<pw>",
      "admin": "<pw>"}},
  "authorization": {
    "class": "solr.RuleBasedAuthorizationPlugin",
    "permissions": [
      {"name":"read","role": "*"},
      {"name":"schema-read", "role":"*"},
      {"name":"config-read", "role":"*"},
      {"name":"collection-admin-read", "role":"*"},
      {"name":"metrics-read", "role":"*"},
      {"name":"core-admin-read","role":"*"},
      {"name": "all", "role": "admin_role"}
    ],
    "user-role": {
      "readonly": "readonly_role",
      "admin": "admin_role"
    }}}
{code}

It looks like this happens because we neglect to check for the "all" special 
case in the branch of code that gets triggered for Handlers that implement 
PermissionNameProvider.  See 
[here|https://github.com/apache/lucene-solr/blob/master/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java#L122].

e.g. With the security.json above if the "readonly" user makes a request to 
{{/admin/authorization}}, the PermissionNameProvider will return 
{{SECURITY_EDIT}}.  When deciding whether the "all" permission applies to that 
endpoint, the code compares SECURITY_EDIT to ALL, sees they don't match, and 
decides that "all" doesn't apply.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to