🇰🇷 한글 설명
오픈소스 CRM 플랫폼인 Twenty의 2.9.0 미만 버전에서 AI 에이전트 모니터링 기능의 IDOR(부적절한 직접 객체 참조) 취약점이 발견되었습니다. 인증된 사용자가 다른 워크스페이스의 agentId 또는 turnId를 이용해 타인의 채팅 기록을 조회하거나 AI 평가 기능을 악용할 수 있습니다. 이 문제는 데이터 조회 시 워크스페이스 ID를 검증하지 않아 발생합니다.
💡 쉬운 설명
로그인한 사용자가 다른 회사의 AI 채팅 기록을 몰래 훔쳐보거나 조작할 수 있는 보안 결함입니다. 공격자가 특정 ID 값만 알면 다른 사용자의 대화 내용과 도구 실행 결과까지 모두 볼 수 있습니다.
🇺🇸 원문 (English)
Twenty is an open-source CRM (customer relationship management) platform. Prior to 2.9.0, Twenty was vulnerable to a cross-workspace insecure direct object reference (IDOR) in the AI agent monitor's AgentTurnResolver, in packages/twenty-server/src/engine/metadata-modules/ai/ai-agent-monitor/reso lvers/agent-turn.resolver.ts. The agentTurns(agentId) query and the evaluateAgentTurn(turnId) mutation looked up rows by agentId or id only; although AgentTurnEntity has a workspaceId column, it was not included in the WHERE clause, and the class-level guards only checked that the caller was authenticated in some workspace rather than that the requested object belonged to it, with the same flaw present in agent-turn-grader.service.ts. As a result, any authenticated user with the AI settings flag, a workspace owner by default, could target any other workspace on the same instance given the victim's agentId or turnId: agentTurns returned the victim's full chat history including message parts such as raw chat text, tool calls, and tool outputs, while evaluateAgentTurn inserted an agentTurnEvaluation row with the victim's workspaceId and fed the victim's turn into the default LLM. The agentId and turnId are non-guessable UUIDs but are exposed in the URL of the settings page. This issue is fixed in version 2.9.0.
📍 영향받는 시스템
Twenty CRM version < 2.9.0
⚔️ 공격 벡터
인증된 사용자가 URL에 노출된 타 워크스페이스의 agentId 또는 turnId를 사용하여 API 요청을 전송
🛡️ 대응 방법
Twenty CRM을 최신 버전인 2.9.0 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 버전 정보가 2.9.0 미만이면 취약한 상태이며, 2.9.0 이상이면 안전합니다.
npm list @twenty/twenty-server | grep -E 'version'