You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
GetCollectedHuntTimelines missing hunt approval check — bypasses access control #1159
In grr/server/grr_response_server/gui/api_call_router_with_approval_checks.py, the GetCollectedHuntTimelines handler (line 1059-1065) is missing a hunt approval check.
The immediately preceding handler GetHuntFilesArchive (line 1041-1048) correctly requires self.approval_checker.CheckHuntAccess(context, str(args.hunt_id)) before returning hunt data.
Impact
GetCollectedHuntTimelines retrieves full filesystem timeline data (all file paths, sizes, modification times, ownership, and permissions) for every client in the hunt, yet skips the same approval check that GetHuntFilesArchive enforces.
A user who has not received hunt approval can call GET /api/v2/hunts/<hunt_id>/collected-timelines and receive complete filesystem metadata for all client machines in the hunt.
Suggested Fix
Add self.approval_checker.CheckHuntAccess(context, str(args.hunt_id)) to GetCollectedHuntTimelines, consistent with the adjacent GetHuntFilesArchive handler.
Hi, I'd like to work on this. The fix is straightforward adding self.approval_checker.CheckHuntAccess(context, str(args.hunt_id)) to GetCollectedHuntTimelines, consistent with GetHuntFilesArchive on line 1041. I can open a PR with the fix and a test case to verify the access control is enforced. Is this available to work on?"
Activity
kx7m2qd commentedon May 1, 2026
Hi, I'd like to work on this. The fix is straightforward adding self.approval_checker.CheckHuntAccess(context, str(args.hunt_id)) to GetCollectedHuntTimelines, consistent with GetHuntFilesArchive on line 1041. I can open a PR with the fix and a test case to verify the access control is enforced. Is this available to work on?"