🇰🇷 한글 설명
오픈소스 CRM 플랫폼인 Twenty의 2.22.0 미만 버전에서 필드 수준의 읽기 권한 제약이 GraphQL 또는 REST 필터 조건에는 적용되지 않는 취약점이 발견되었습니다. 권한이 없는 필드를 필터에 사용하여 데이터의 존재 여부나 개수를 확인하는 방식으로, 이를 통해 차단된 필드의 값을 유추할 수 있는 정보 유출 공격이 가능합니다.
💡 쉬운 설명
특정 정보를 볼 권한이 없는 사용자라도 검색 필터를 교묘하게 이용하면 숨겨진 데이터가 무엇인지 알아낼 수 있는 보안 결함입니다. 마치 질문을 통해 '예/아니오' 답변을 얻어내어 비밀번호를 맞히는 것과 유사한 방식입니다.
🇺🇸 원문 (English)
Twenty is an open-source CRM (customer relationship management) platform. Prior to 2.22.0, field-level read permission is enforced on selected output fields but not on GraphQL or REST filter predicates. A workspace member or API key with permission to read an object but not a particular field can reference that denied field in direct filters, relation filters, or persisted view filters. The resulting totalCount and row presence reveal whether guesses match the real column, forming a boolean/count oracle that can reconstruct denied field values for records exposed by the principal's row-level policy. This issue is fixed in version 2.22.0.
📍 영향받는 시스템
Twenty CRM version < 2.22.0
⚔️ 공격 벡터
GraphQL 또는 REST API의 필터 조건(filter predicates)을 이용한 데이터 존재 여부 및 개수 기반의 정보 유출(Oracle Attack)
🛡️ 대응 방법
Twenty CRM을 최신 보안 패치가 적용된 2.22.0 버전 이상으로 업데이트하십시오.
🔧 검증 코드
설치된 Twenty의 버전을 확인하여 2.22.0 미만인 경우 취약한 상태로 판단합니다.
curl -s http://<target-ip>/api/graphql | grep -i 'version' || echo 'Check Twenty version via package manager or application metadata'