Skip to content

Commit 2f81622

Browse files
security: fix workspace scoping gaps in issue service
- Add workspace_id parameter to assign() and transition() methods - Fix SECURITY_TRIAGE.md duplicate entries and formatting - Ensures cross-tenant mutations are prevented Co-authored-by: Mervin Praison <MervinPraison@users.noreply.github.com>
1 parent 516d8b6 commit 2f81622

2 files changed

Lines changed: 10 additions & 7 deletions

File tree

SECURITY_TRIAGE.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@
1010
| GHSA-5cxw-77wg-jrf3 | fixed batch 1 | @url mentions |
1111
| GHSA-xp85-6wwf-r67c | fixed batch 1 | GHA branch quote |
1212
| GHSA-3qg8-5g3r-79v5 | fixed batch 1+2 | JWT + issue guard |
13-
| GHSA-xwq8, 7p8g, c2m8, 8g2p, w388, g8rr | fixed batch 1 | platform RBAC/IDOR partial |
13+
| GHSA-xwq8, 7p8g, w388, g8rr | fixed batch 1 | platform RBAC/IDOR partial |
1414
| GHSA-943m, 5jx9, 4x6r, 27p4, cp4f | fixed batch 2 | platform IDOR completion |
1515
| GHSA-vg22-4gmj-prxw | fixed batch 2 | example eval hardening |
16-
| GHSA-6xj3-927j-6pqw | fixed batch 2 | deploy.py bleach sanitize |
1716
| GHSA-8444-4fhq-fxpq | already-fixed | APIConfig.auth_enabled default True |
1817
| GHSA-78r8-wwqv-r299 | already-fixed | load_user_module gate |
19-
| GHSA-gv23, h8q5, 6h6v, h37g, 6h6v-7vxx | fixed batch 3 | service-layer workspace_id on get/update/delete |
20-
| GHSA-h37g-4h4p-9x97, c2m8, 8g2p | fixed batch 3 | only owner assigns admin/owner |
18+
| GHSA-gv23-xxxx-xxxx, GHSA-h8q5-cp56-rr65, GHSA-6h6v-xxxx-xxxx, GHSA-h37g-4h4p-9x97 | fixed batch 3 | service-layer workspace_id on get/update/delete |
19+
| GHSA-c2m8-xxxx-xxxx, GHSA-8g2p-xxxx-xxxx | fixed batch 3 | only owner assigns admin/owner |
2120
| GHSA-h8q5-cp56-rr65 | fixed batch 3 | bind default 127.0.0.1 (+ PLATFORM_HOST) |
2221
| GHSA-6xj3-927j-6pqw | not-applicable | Open WebUI path; not in this repo |
2322
| GHSA-gmjg, 9q28 | published | prior release |

src/praisonai-platform/praisonai_platform/services/issue_service.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,21 @@ async def assign(
144144
issue_id: str,
145145
assignee_type: str,
146146
assignee_id: str,
147+
*,
148+
workspace_id: Optional[str] = None,
147149
) -> Optional[Issue]:
148150
"""Assign an issue to a member or agent."""
149151
if assignee_type not in VALID_ASSIGNEE_TYPES:
150152
raise ValueError(f"Invalid assignee_type: {assignee_type}")
151153
return await self.update(
152-
issue_id, assignee_type=assignee_type, assignee_id=assignee_id
154+
issue_id, workspace_id=workspace_id, assignee_type=assignee_type, assignee_id=assignee_id
153155
)
154156

155-
async def transition(self, issue_id: str, new_status: str) -> Optional[Issue]:
157+
async def transition(
158+
self, issue_id: str, new_status: str, *, workspace_id: Optional[str] = None
159+
) -> Optional[Issue]:
156160
"""Transition an issue to a new status."""
157-
return await self.update(issue_id, status=new_status)
161+
return await self.update(issue_id, workspace_id=workspace_id, status=new_status)
158162

159163
async def delete(
160164
self, issue_id: str, *, workspace_id: Optional[str] = None

0 commit comments

Comments
 (0)