The vulnerability exists due to a permission check mismatch between the frontend UI and the backend data endpoint. The contacts_data.php script, which serves as a backend data provider for the contacts list, performs an inadequate authorization check.
The analysis of the provided information and the commit history of the Admidio/admidio repository confirms this. The commit 7a8536d5cde9c5a3558b8c834d5525f3a5762a19, titled "Members of other organizations could be shown to wrong users #2016", directly addresses the issue.
The patch modifies modules/contacts/contacts_data.php to replace the weak permission check isAdministratorUsers() with the stricter isAdministrator() and an additional check for the contacts_show_all setting. This aligns the backend's authorization logic with the frontend's, preventing unauthorized users from accessing data across different organizations.
The root cause is the incorrect authorization check within the contacts_data.php file. When a request is made with mem_show_filter=3, the script incorrectly grants access to a user who is only a 'user manager' (isAdministratorUsers()) but not a full administrator (isAdministrator()). This allows them to view member data from all organizations, bypassing the intended multi-tenant separation.