security: require org-admin for gateway session message endpoint
send_gateway_session_message only required basic auth (AUTH_DEP) while all other gateway endpoints required ORG_ADMIN_DEP. Any authenticated user could send messages to any gateway session. Now requires org-admin and verifies the board belongs to the caller's organization. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
committed by
Abhimanyu Saharan
parent
7ca4145aff
commit
66da278673
@@ -127,6 +127,7 @@ async def send_gateway_session_message(
|
||||
board_id: str | None = BOARD_ID_QUERY,
|
||||
session: AsyncSession = SESSION_DEP,
|
||||
auth: AuthContext = AUTH_DEP,
|
||||
ctx: OrganizationContext = ORG_ADMIN_DEP,
|
||||
) -> OkResponse:
|
||||
"""Send a message into a specific gateway session."""
|
||||
service = GatewaySessionService(session)
|
||||
@@ -134,6 +135,7 @@ async def send_gateway_session_message(
|
||||
session_id=session_id,
|
||||
payload=payload,
|
||||
board_id=board_id,
|
||||
organization_id=ctx.organization.id,
|
||||
user=auth.user,
|
||||
)
|
||||
return OkResponse()
|
||||
|
||||
@@ -378,9 +378,12 @@ class GatewaySessionService(OpenClawDBService):
|
||||
session_id: str,
|
||||
payload: GatewaySessionMessageRequest,
|
||||
board_id: str | None,
|
||||
organization_id: UUID | None = None,
|
||||
user: User | None,
|
||||
) -> None:
|
||||
board, config, main_session = await self.require_gateway(board_id, user=user)
|
||||
if organization_id is not None:
|
||||
self._require_same_org(board, organization_id)
|
||||
if user is None:
|
||||
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
|
||||
await require_board_access(self.session, user=user, board=board, write=True)
|
||||
|
||||
Reference in New Issue
Block a user