2026년 3월 24일 화요일, Linear는 동일 워크스페이스 내 다른 멤버들에게 비공개 팀의 데이터를 노출시키는 코드 변경을 배포했습니다. 약 1시간 동안, 즉 UTC 기준 12:07부터 1:10까지 워크스페이스 멤버(게스트 사용자 포함)가 평소 팀 권한 범위를 벗어난 데이터에 접근할 수 있었습니다.

Linear의 인가 계층은 쿼리별로 권한 필터를 추가하기 위해 'sync group' 리졸버를 사용합니다. 성능 최적화는 사용자와 절대 일치할 수 없는 리졸버를 건너뛰도록 설계되었고, 단일 내부 워크스페이스에서만 실행되도록 제한되어 있었습니다. 그러나 다른 곳에서 최적화를 비활성화하는 코드 경로에 변수 섀도잉 버그가 있었습니다. 원래 필터로 폴백하는 대신 모든 사용자별 리졸버를 제거해버렸고, 그 결과 하위 권한 검사가 완전히 건너뛰어져 쿼리가 필터링되지 않은 결과를 조용히 반환했습니다.

이 변경은 동료 검토와 테스트를 거쳤지만, 최적화가 활성화된 경로만 검증되었습니다. 다른 워크스페이스에서 비활성화된 경로는 아무도 테스트하지 않았습니다. Linear 팀은 이 버그가 AI가 작성한 것이 아니라고 특별히 언급했습니다. 이는 테스트 커버리지 공백을 드러낸 인간의 변수 섀도잉 회귀였습니다.

노출은 알림 다이제스트(한 멤버가 전체 워크스페이스에 대한 다이제스트를 받을 수 있음), 클라이언트 동기화 부트스트랩, 모바일 세션, 광범위한 OAuth/API 쿼리를 통해 발생했습니다. 자격 증명이나 API 키는 유출되지 않았고, 악의적 남용의 증거도 없었습니다. Linear는 1시간 이내에 변경을 되돌리고, 웹 및 데스크톱 클라이언트를 강제로 다시 로드하고, 활성 모바일 세션을 로그아웃시키고, 영향을 받은 워크스페이스 연락처에 48시간 이내에 통지했습니다.

2026년 3월 24일 약 1시간 동안 비공개 팀 데이터가 동일 워크스페이스의 다른 멤버와 게스트에게 접근 가능했으며, 약 7,000건의 동기화 및 API 호출이 이를 가져왔을 수 있습니다.

최적화의 비활성화 경로에 모든 사용자별 리졸버를 누락시키는 변수 섀도잉 버그가 있었습니다.

테스트 커버리지는 최적화가 활성화된 경우를 검증했지만, 비활성화된 경로는 검증하지 않았습니다.

권한 검사가 실패 시 개방(fail open) 방식으로 작동했습니다. 쿼리가 오류를 발생시키는 대신 결과를 반환했습니다.

알림, 동기화, 모바일 및 API 계층 모두가 손상된 권한 계층을 신뢰했습니다.

필터를 건너뛰는 접근 제어 '최적화'는 비활성화 경로가 테스트되거나, 정상 경로 검토가 조용한 권한 확대를 승인하지 않는 경우에만 안전합니다.

Linear는 배포 환경, 팀 유형, 역할, 게스트 접근 및 인증 방법 전반에 걸쳐 통합 테스트를 확장하고, 다이제스트당 알림 항목 수를 제한하고, 배포 전 보안 검토와 인가 이상 징후 모니터링을 더욱 강화하기로 약속했습니다. 영향을 받은 워크스페이스 소유자에게 통지했고, 요청한 이들에게는 워크스페이스별 노출 요약을 제공했습니다. 사용자들은 이를 막 1억 달러 ARR을 돌파한 회사가 드물게 투명하게 처리한 보안 사고로 기록했습니다.

근거 확인하기

출처

  1. Post mortem on Linear security incident on March 24th, 2026 Linear · linear.app ·
  2. User-specific data accessible to the wrong users within the same workspace Linear Status · linearstatus.com ·
  3. Linear discloses a data exposure incident Devbytes · devbytes.co.in ·