I'm not convinced that all the impacts of this issue have been stated above, and as such I've written a (somewhat lengthy) summary of the issue and its impacts. Of course, I'm doing this to try and gee up Atlassian to address the issue. In particular, the issue introduces some security concerns that I really think that Atlassian should address.
For starters, the title of this issue refers to watchers. In fact the problems stated are not limited to adding watchers. They hold for any User Picker field other than the Assignee field. That is, the Reporter field, and any User Picker or Multi User Picker custom field.
Environment
The problems exist in any JIRA instance in which some users have access to a limited number of projects, and must not know of the existence of any other users in the JIRA instance. For example, if the instance is used by a company to support multiple customers, but where there is a legal requirement that each of those customers not know about each other. Each partner only has access to a limited number of projects.
Let's call these customers the external users. In addition, there are a set of internal users who must have have access to all projects and know about all users.
Underlying Problem
When a user is adding a watcher or editing a User Picker field (a custom field or the Reporter field), the user can select any user in the system. JIRA does not restrict the set of users that can be selected to those that have access to the project.
Impacts
Usability
Impact 1: the popup window for selecting users displays far too many users
Users that have the Browse Users permission are able to select users from a popup window and use auto-complete to select a user.
Let's say an instance has 5000 users but there are only 50 that have access to a project. A user goes to add a watcher or to edit the contents of a User Picker field. The popup window displays all 5000 users in the system. The user has to wade through them all to find one of the 50 that it makes sense to choose from.
(See Impact 3 below for the related security impact.)
Impact 2: adding watchers, or editing a User Picker field is almost impossible if you don't have the Browse Users global permission - and it isn't safe to grant Browse Users to external users
Anyone with the Browse Users global permission can see all the users in the system, via a popup window that allows them to navigate through all the users, or by using auto-complete, when they edit a User Picker field or add a watcher. If the system is configured so that email addresses are visible, the user will be able to see the email addresses for all the users in the system.
Consequently, in a JIRA instance such as I described above, only internal users can be granted the Browse Users global permission.
It is often important for the set of external users who have access to a project to be able to add other external users as watchers, or to edit an issue and add them to User Picker custom fields (e.g. to a Reviewers or Approvers field). However, because these external users don't have the Browse Users global permission (as just explained), the only way that they can select a user is by knowing their exact username (e.g. jsmith). They can't select from the popup window of users (the "little men" button that launches the window is greyed out), and auto-complete doesn't work. They can't type the user's full name (e.g. John Smith) or their email address. It has to be the exact username.
This is next to useless.
Security Holes
Impact 3: Users can keep trying to match a username until they get a successful match - and the matched user might not have access to the project
That is, "I wonder if Jane Doe from Company X is using this system. Let's try to guess her username by adding her as a watcher or editing a User Picker field. Let's start with 'jdoe', then we'll try 'jane.doe', etc."
If a user does not have the Browse Users global permission, they can still try to guess the username of another user in the system when they add a watcher or edit a User Picker custom field. They have to guess the username correctly. If they guess wrong, JIRA says there is no user with that name. If they guess correctly, however, the user is added as a watcher, or added to the User Picker field, even if that user does not have access to the project. And once they have added the user, the user's full name is displayed with a hyperlink to their user profile, in which their email address will be displayed if the system has been configured to allow this.
One can easily imagine something an automated attack via the REST or SOAP APIs, with a program continually guessing usernames until it gets a match.
It is important to realise that, even if a user who does not have access to the project is added as a watcher or to a User Picker field, JIRA still will not grant them access to the issue, nor will it send them any email notifications. It just looks like they have access, even if they don't.
Impact 4: Internal users can erroneously add a user who does not have access to the project. External users hence will know of that user.
Internal users, who do have the Browse Users permission, are confronted with the complete set of users when they go to add a watcher or add a user to a User Picker field. It is a simple mistake for them to select the wrong user, particularly using the auto-complete interface. They could add an external user who does not have access to the project.
Then when an external user who does have access to the project goes to browse that issue, they can now see the name of a user who they should not know the existence of. They can click on the hyperlink for that user to look at their profile.
Re-iterating, the "false watcher" or "false user" does not actually have access to the issue. It just looks like they do. It certainly looks like that to the external user who accesses the project. They could get very upset: "Who is this Fred Nurk who has access to this issue? They don't work for any of the companies that have access to this project. Why do they have access to our stuff?"
Proposed Solution
1. Limit the users that can be selected (when adding a watcher or when editing any User Picker field) to those that have access to the project.
AND
2. Make Browse Users a project permission (in the permission scheme) rather than a global permission.
Piotr, some of us are still using add-ons that allow us to use Watchers in Security Levels. In any case, we had to use an nginx rewrite rule to revert back to the old behavior for us.