Bruce Dodson created AMQ-6984:
---------------------------------

             Summary: Authorization rules not honored for virtual topic 
consumer queues containing wildcards
                 Key: AMQ-6984
                 URL: https://issues.apache.org/jira/browse/AMQ-6984
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.15.4
            Reporter: Bruce Dodson


If you use <authorizationMap> to restrict which users can create queues or 
topics according to a given pattern, e.g. for "Consumer.*.VirtualTopic.>", this 
is normally honored correctly, and an exception occurs if the physical 
destination does not exist and user does not have admin access.

The attempt to create the physical destination is bypassed, properly, if the 
consumer is subscribing to a wildcard destination, and no check for admin 
access is performed in this case.

However, if the wildcard destination corresponds to a Consumer queue for a 
Virtual Topic, a physical queue is still created, containing literal wildcard 
characters. This is somewhere in the implementation details of Virtual Topics.

Perhaps this behavior, based on physical Consumer queues that contain literal 
wildcards, may be applicable for some use cases, e.g. to aggregate multiple 
virtual topics to a single consumer. There may be applications that rely on 
this behavior.

However, in any case, there is an issue in that access limits from the 
<authorizationMap> are not checked when the broker creates this queue. Thus, 
even if the user has only read access to that destination pattern, the broker 
will still create a queue containing literal wildcards if the user requests one 
via a consumer.

For one possible workaround, I looked into an option to address this within 
AbstractRegion.addConsumer(): if the destination is a queue containing 
wildcards, have it check broker.getDestinationInterceptor() and figure out if 
the destination corresponds to a Virtual Topic consumer queue, and if so, try 
to create it as a physical queue at that point (with authorization checks), 
e.g. by calling lookup(), as is done for destinations that do not contain 
wildcards. But it seemed like this might create some unwanted tight coupling to 
the implementation details of Virtual Topics, if done in this way, and I was 
not sure it would work.



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

Reply via email to