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
Titra suffers from Broken Access Control vulnerabilities on multiple endpoint, allowing another user to view and edit other user's time entries in a private project.
Details
GET /project/timeentries/:projectId
GET /project/timeentriesfordaterange/:projectId/:fromDate/:toDate
server/APIroutes.js - Lines 218-223 and 261-275
And
POST /timeentry/create/
server/APIroutes.js - Lines 77-107
PoC
The UserA_Project_ID can be obtained through:
Bruteforcing
Social Engineering
GET Endpoints
Create two users: UserA and UserB
UserA creates a private project and adds time entries
UserB generates an API token
UserB sends request to /project/timeentries/{UserA_Project_ID} or
/project/timeentriesfordaterange/{UserA_Project_ID}/{START_DATE}/{END_DATE}
In the demo, I use the payload shown from the Mass Assignment PoC. The logic of improper access control should stay the same, mass assignment only signifies the severity.
Suggested Fix
Add project authorization check similar to /project/tasks/ endpoint at line 569:
constproject=awaitProjects.findOneAsync({_id: json.projectId,$or: [{userId: meteorUser._id},{public: true},{team: meteorUser._id}],})if(!project){sendResponse(res,403,'Access denied to project.')return}
Summary
Titra suffers from Broken Access Control vulnerabilities on multiple endpoint, allowing another user to view and edit other user's time entries in a private project.
Details
server/APIroutes.js - Lines 218-223 and 261-275
And
server/APIroutes.js - Lines 77-107
PoC
The UserA_Project_ID can be obtained through:
GET Endpoints
/project/timeentriesfordaterange/{UserA_Project_ID}/{START_DATE}/{END_DATE}
GET.mp4
POST Endpoint
POST.mp4
In the demo, I use the payload shown from the Mass Assignment PoC. The logic of improper access control should stay the same, mass assignment only signifies the severity.
Suggested Fix
Add project authorization check similar to /project/tasks/ endpoint at line 569: