CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

GHSA-xv4r-4885-gwpg: Kimai has Improper Authorization in Team Member and Team Activity Assignment APIs Which Allows Expansion of Team Scope Beyond Authorized Visibility

mediumCVE-2026-52825
Summary Kimai contains an authenticated improper authorization vulnerability in Team-related assignment APIs. A Teamlead who can edit their own team can use backend API endpoints to add users or activities that fall outside their intended visible or manageable scope, even when the frontend correctly hides those targets. This affects both team member assignment and team activity assignment. The issue is caused by treating "may edit this team" as equivalent to "may attach any referenced object to this team", without performing a second authorization check on the target user or activity. Details The issue affects at least the following API routes: - POST /api/teams/{id}/members/{userId} - POST /api/teams/{id}/activities/{activityId} In both cases, the backend checks whether the caller may edit the Team, but it does not verify whether the referenced User or Activity falls inside the caller's allowed management scope. For team member assignment, the frontend form correctly limits the visible user choices. In src/Form/TeamEditForm.php, the team edit form uses UserType: $builder->add('users', UserType::class, [ 'label' => 'add_user.label', 'help' => 'team.add_user.help', 'mapped' => false, 'multiple' => false, 'expanded' => false, 'required' => false, 'ignore_users' => $team !== null ? $team->getUsers() : [] ]); In src/Form/Type/UserType.php, the user selector is built from UserRepository::getQueryBuilderForFormType(): $query = new UserFormTypeQuery(); $query->setUser($options['user']); $qb = $this->userRepository->getQueryBuilderForFormType($query); $users = $qb->getQuery()->getResult(); And in src/Repository/UserRepository.php, Teamlead-visible candidates are limited to team members from teams they lead: if (null !== $user && $user->isTeamlead()) { $userIds = []; foreach ($user->getTeams() as $team) { if ($team->isTeamlead($user)) { foreach ($team->getUsers() as $teamMember) { $userIds[] = $teamMember->getId(); } } } $userIds = array_unique($userIds); $qb->s

Details

Source
GitHub Security Advisories (INTL · database · site)
Severity
medium
Published
2026-07-14
Last updated
2026-07-14
Exploitation
Not in CISA KEV at last sync

Original advisory: https://github.com/advisories/GHSA-xv4r-4885-gwpg

Referenced CVEs

CVECSIRTS overviewExternal
CVE-2026-52825coverage & exploitation statusNVD · CVE.org

More from GitHub Security Advisories