April 27th – What happened with our feature flag configuration
Disclosures

4월 27일 – 기능 플래그 구성에 어떤 일이 있었는지

2026년 4월 27일, 한 보안 연구원이 ClickUp의 클라이언트 측 기능 플래그 구성에서 개인 식별 정보가 노출되었다고 공개적으로 밝혔습니다. 구체적으로, 893개의 고객 이메일 주소가 기능 플래그 타겟팅 규칙에 포함되어 있었으며, 해당 작업 공간으로부터의 트래픽을 속도 제한하기 위한 인시던트 대응 과정에서 사용된 한 플래그가 고객의 API 토큰을 부적절하게 참조하고 있었습니다.

이 문제를 더 일찍 파악했어야 했습니다. 그러지 못했기에, 무슨 일이 있었는지, 그 이유는 무엇인지, 현재 어떤 조치를 취했는지, 그리고 앞으로 어떻게 개선해 나갈 것인지에 대해 여러분께 명확한 설명을 드려야 합니다.

영향을 받으셨나요?

이번 정보 유출은 기능 출시 과정에서 특정 기능을 볼 수 있는 사용자를 제어하기 위해 기능 플래그 타겟팅 규칙에 사용된 893개의 고객 이메일 주소로 제한되었습니다.

4월 29일(현재 진행 중) 이전에 저희로부터 직접 연락을 받으셨다면, 귀하의 이메일 주소가 기능 플래그 설정에 포함된 목록에 포함되어 있었음을 의미합니다. 만약 저희로부터 연락을 받지 못하셨다면, 귀하의 이메일 주소는 해당 목록에 포함되어 있지 않았습니다.

  • 어떤 고객의 작업 공간 콘텐츠(작업, 문서, 파일 또는 프로젝트 데이터)도 유출되지 않았으며, 단 아래에 설명된 한 가지 예외가 있을 수 있습니다.
  • 비밀번호, 결제 정보 또는 계정 인증 정보는 유출되지 않았습니다.
  • 어떤 인증 시스템도 침해되지 않았습니다.

기술적 문제

ClickUp은 기능 플래그 관리를 위해 Split.io (현재 Harness의 일부)를 사용합니다. 대부분의 브라우저 측 기능 플래그 SDK와 마찬가지로, Split.io는 애플리케이션의 JavaScript 번들에 클라이언트 측 SDK 키를 포함해야 합니다. 이 키는 의도적으로 공개되어 있으며, SDK가 브라우저에서 현재 사용자에 대한 기능 플래그를 평가하는 데 사용됩니다. 이는 Split.io, LaunchDarkly 및 유사한 플랫폼 전반에 걸쳐 문서화된 표준 동작이며, 보안 취약점이 아닙니다.

키는 문제가 아닙니다. 우리 엔지니어들이 플래그 설정에 무엇을 포함시켰는지가 중요합니다.

아키텍처 측면에서 발생한 상황은 다음과 같습니다. 기능 플래그 플랫폼을 통해 엔지니어들은 기능 출시 시 특정 사용자를 목표로 지정할 수 있습니다. ClickUp 엔지니어링 팀은 플래그 타겟팅 규칙에 이메일 주소를 직접 사용해 왔습니다. 예시로는 특정 베타 테스터 그룹을 대상으로 기능을 활성화하는 경우를 들 수 있습니다. Split.io SDK의 공개적으로 쿼리 가능한 splitChanges 엔드포인트는 이러한 타겟팅 규칙을 포함한 전체 플래그 정의 세트를 반환합니다. 즉, 클라이언트 측 키(이 키는 의도적으로 프론트엔드 코드에 포함되어 있습니다)를 가진 사람이라면 누구나 해당 플래그 정의를 가져와 그 안에 포함된 이메일 주소를 추출할 수 있었습니다.

엔지니어들은 플래그 구성을 내부 도구로 취급했으나, SDK 아키텍처는 설계상 이를 누구나 조회할 수 있도록 되어 있었습니다. 이로 인해 이메일 주소들이 본래 있어서는 안 될 곳에 축적되게 되었습니다. 기능 플래그 업데이트는 코드와 마찬가지로 +1 동료 검토를 거쳐야 합니다. 그러나 이 검토 단계에서 해당 문제가 발견되지 않았습니다.

단 한 가지 예외 – 특정 고객에 대한 속도 제한을 위해 구성된 플래그

API 악용 신고를 처리하던 당직 엔지니어가 트래픽을 제한하기 위해 속도 제한 플래그 구성에 고객의 API 토큰을 참조하는 바람에, SDK 엔드포인트를 통해 해당 토큰이 노출될 가능성이 생겼습니다. 이는 절대 발생해서는 안 될 일이었습니다. 인증 정보는 플래그 구성에 포함되어서는 안 되기 때문입니다. 당사는 즉시 해당 토큰을 비활성화했으며, 현재까지의 로그 조사 결과 연구원 본인의 조사 이외에 악의적인 접근 흔적은 발견되지 않았습니다. 다른 고객의 토큰이나 작업 공간 데이터에는 접근할 수 없었으며, 당사는 해당 고객과 직접 협력하고 있습니다.

무엇이 드러났고 무엇이 드러나지 않았는가

주장우리의 연구 결과
번들에 SDK 키가 하드코딩되어 있음이는 정상적인 동작이며 의도된 설계입니다. 브라우저 측 기능 플래그 SDK는 바로 이런 방식으로 작동합니다. 단순히 취약점이라고 볼 수는 없습니다.
플래그 타겟팅 규칙에 포함된 893개의 고객 이메일 주소본 보고 시점 기준 정확한 정보입니다. 모든 제3자 이메일 주소는 4월 28일 03:25(UTC)에 삭제되었습니다.
플래그 구성의 라이브 고객 API 토큰확인됨. 2025년 10월 7일 추가됨. 2026년 4월 27일 12:05 UTC에 무효화됨.
Split.io에 대한 쓰기 권한정확하며 의도된 동작입니다. 브라우저 SDK의 텔레메트리 엔드포인트(이벤트/bulk, testImpressions)는 표준 SDK 동작의 일환으로 쓰기 요청을 허용합니다. 이는 ClickUp의 설정 오류가 아닙니다.
“15개월 동안 아무런 조치도 없었다”오해의 소지가 있습니다. 날짜는 정확합니다. SDK 키에 관한 2025년 1월 17일자 최초 버그 바운티 보고서는 키 자체만으로는 취약점이 아니었기 때문에 엔지니어링 작업으로 이어지지 않았습니다. 실제 문제는 이메일 주소와 플래그 구성이었으나, 이는 최초 보고서에 포함되지 않았습니다. 플래그 구성은 2026년 4월 8일이 되어서야 HackerOne에 공개되었으며, ClickUp은 2026년 4월 27일이 되어서야 이를 알게 되었습니다.

타임라인

당사는 제3자 버그 바운티 제공자의 문제점 및 당사의 내부 커뮤니케이션 tools의 문제점을 포함하여, 어떤 부분에서 프로세스에 문제가 있었는지 완전히 투명하게 공개할 것을 약속드립니다.

날짜이벤트
2025년 1월 17일한 연구원이 BugCrowd의 버그 바운티 프로그램에 Split.io SDK 키 유출 사실을 보고했습니다. 보고 콘텐츠를 고려할 때, BugCrowd와 ClickUp은 이를 ‘정보 제공’ 유형으로 적절히 분류했습니다.
2025년 6월 3일ClickUp이 버그 바운티 프로그램을 HackerOne으로 이전했습니다. 위에서 언급한 문제를 포함해 모든 기존 보고서가 성공적으로 이전되었습니다.
2026년 4월 8일‘impulsive’라는 닉네임을 사용하는 연구원이 HackerOne에 새로운 상세 보고서를 제출하며 피해 범위가 확대되었음을 밝혔다. 이 보고서에 따르면, 플래그 지정 규칙에 포함된 893개의 고객 이메일 주소와 활성 고객 API 토큰, 기타 운영 데이터가 유출된 것으로 나타났다.
2026년 4월 10일HackerOne의 트라이어지 분석가가 해당 보고서를 2025년 1월 보고서의 중복 건으로 잘못 처리하여, 새로운 보고서가 실질적으로 다르며 더 광범위한 영향을 다루고 있다는 점을 간과했습니다. 추가 검토 결과, 유사한 보고서의 인스턴스가 두 건 더 확인되었습니다. 하나는 2025년 9월 6일, 다른 하나는 2026년 1월 1일에 발생한 사례입니다.
2026년 4월 21일해당 연구원은 HackerOne에 추가적인 세부 정보를 제공하며 사이트 폐쇄 조치에 이의를 제기했다.
2026년 4월 25일연구원은 조치를 강화합니다. HackerOne을 통해 ClickUp CEO와 security@clickup.com으로 이메일을 보내고, X(구 트위터)를 통해 ClickUp에 DM을 보내며 5월 2일을 공개 시한으로 정했습니다. ClickUp CEO와 security@로 보낸 이 이메일들은 스팸 필터에 걸려 수신자에게 전달되지 않았습니다. ClickUp에 보낸 X DM 역시 자동으로 필터링되어 읽히지 않았습니다.
2026년 4월 27일 ~ 10:42 UTC해당 연구원은 X를 통해 이를 공개적으로 밝혔다.
2026년 4월 27일 11:06(UTC)ClickUp에서 이를 감지했습니다. 인시던트가 발생했습니다. 인시던트 대응 절차가 시작되었으며, 고객 API 토큰을 교체하는 절차가 진행되었습니다.
2026년 4월 27일 12:53–14:12 (UTC)엔지니어링 팀 전반에 걸친 초기 스플릿 플래그 정리 작업.
2026년 4월 27일 ~ 17:00 (UTC)총 4,809개의 기능 플래그에 대한 완전 자동화된 감사가 완료되었습니다.
2026년 4월 27일 23:13 (UTC)ClickUp과 Harness(Split)의 엔지니어들이 기술적 세부 사항을 검토합니다.
2026년 4월 28일 03:25 UTC모든 고객 이메일 주소가 플래그 설정에서 삭제된 것으로 확인되었습니다. 참고: 일부 제3자 이메일 주소는 사기 사용과 관련된 이유로 일부러 두 개의 플래그에 남아 있습니다.

우리 프로세스가 실패한 부분

여기서 세 가지 문제가 발생했으며, 우리는 각 문제를 명확히 지적하고자 합니다. 다음 섹션에서 변경 사항에 대해 논의하겠습니다.

1. 최초 보고에 대한 후속 조치가 미흡했습니다. 2025년 1월 버그 바운티 보고서의 결과가 엔지니어링 작업이나 플래그 구성 설정 내에 어떤 데이터가 포함되어 있는지 검토를 포함하지 않았다는 것입니다. 그러나 실제로는 그러지 못했습니다. 향후 이러한 일이 재발하지 않도록 트라이어지 프로세스를 개선하고 있습니다.

2. HackerOne이 중복 처리 절차를 부적절하게 처리했습니다. 2026년 4월 보고서는 2025년 1월 보고서와 비교해 상당히 새로운 영향을 기록하고 있었습니다. HackerOne은 이를 중복으로 처리해 닫힘을 가져와서는 안 되었습니다. 추가 검토 결과, 2025년 9월 6일과 2026년 1월 1일에 유사한 보고서가 중복으로 닫힌 인스턴스가 두 건 더 확인되었습니다. 당사는 HackerOne과 협력하여 그들의 분류 프로세스상의 문제점을 해결하고 있습니다. 향후 제3자 프로세스에 의존하지 않도록 모든 HackerOne 보고서에 대한 2차 검토 절차를 도입할 예정입니다.

3. 저희 이메일 서비스에서 해당 연구원의 신고 내용을 스팸으로 분류했습니다. 4월 25일 토요일, 해당 연구원은 저희 CEO와 security@clickup.com으로 이메일을 보냈으며, ClickUp의 X 계정에 DM을 보냈습니다.

우리는 X에 게시물이 공개된 후에야 이 이메일들을 확인했습니다. 스팸 폴더와 X 다이렉트 메시지(DM) 필터링에 대한 내부 조사 과정에서 이 이메일들이 발견되었습니다.

보안 관련 수신 이메일이 무작정 차단되지 않도록 이메일 필터링 및 스팸 검토 절차를 개선하고 있습니다.

이 모든 것은 근본적인 문제를 정당화할 수 없습니다. 애초에 고객 데이터가 기능 플래그 설정에 포함되어서는 안 되었기 때문입니다.

지금까지의 성과 완료

즉시 (완료됨)

  • 노출된 고객 API 토큰을 무효화했습니다.
  • 기능 플래그 구성에서 모든 고객 이메일 주소를 제거했습니다.
  • 전 공학 부서를 대상으로 플래그 설정에 개인 식별 정보(PII)나 인증 정보를 포함하는 것을 금지하는 지침을 발령했습니다.
  • 개인 식별 정보(PII), 인증 정보 및 민감한 데이터와 관련된 모든 기능 플래그에 대한 전면적인 감사를 완료했습니다.

단기 (진행 중)

  • security@ClickUp.com으로 수신되는 모든 보안 관련 통신이 정상적으로 표시되도록 이메일 필터링 규칙을 업데이트하고, 스팸 메시지를 (안전하게) 검토하는 단계를 추가했습니다.
  • HackerOne을 활용한 버그 바운티 분류 워크플로우 검토를 통해 유효한 보고서가 잘못 닫히는 것을 방지합니다.
  • 승인된 콘텐츠에 대한 기능 플래그 검토자 교육.

장기적인

  • 모든 기능 플래그가 변경될 때마다 모든 기능 플래그 구성에서 PII 패턴(이메일 주소, 토큰, API 키)을 자동으로 스캔하고, 위반 시 즉시 블록 조치를 적용합니다.
  • HackerOne의 모든 분류 결정을 검토하기 위한 자동화 프로세스 및 도구.
  • 프론트엔드 플래그와 백엔드 플래그를 분리하기 위해 프록시 또는 기술적 조치를 구현하십시오.

연구자에 대한 노트

ClickUp은 이 사실을 공개한 연구원(아이디: impulsive / @weezerOSINT)과 연락을 취한 후, 책임감 있게 대응하며 요청받은 모든 정보를 제공했습니다.

impulsive / @weezerOSINT라는 닉네임을 사용하는 해당 연구원은 정해진 절차(HackerOne을 통해, 이후 security@ClickUp.com 및 당사 CEO에게 직접 이메일을 발송)에 따라 보고했으며, 당사가 연락을 취했을 때 건설적인 태도로 대응했습니다. 그러나 당사의 내부 프로세스상 해당 보고서와 관련 에스컬레이션 사항을 제때 파악하지 못했습니다.

해당 연구원과 협업한 후, ClickUp은 4월 28일 1시 47분(UTC)에 다음과 같은 메시지를 받았습니다. “[ClickUp] 팀 여러분, 정말 감사합니다. 이 문제를 이렇게 신속하게 처리해 주셔서 대단히 고맙습니다. 흔히 볼 수 있는 일이 아니어서 더욱 큰 의미가 있습니다.”

ClickUp은 해당 연구자의 발견에 대해 버그 바운티를 지급합니다. 다른 연구자분들도 저희 버그 바운티 프로그램에 참여하시거나, 취약점 공개 프로그램을 통해 책임감 있게 보고해 주시거나, security@clickup.com으로 직접 이메일을 보내주시기 바랍니다.

요약

이번 인시던트로 유출된 데이터는 893개의 이메일 주소로 그 범위가 제한되었습니다. 앞서 언급한 단 한 명의 고객을 제외하고는, 어떤 고객의 작업 공간 콘텐츠, 비밀번호 또는 결제 정보도 영향을 받지 않았습니다. 당사는 해당 고객과 직접 협력하여 키가 부적절하게 접근되지 않았는지 확인하고 있습니다.

고객 여러분께 이번 일로 인해 큰 불편을 드려 진심으로 사과드리며, 앞으로는 이와 같은 일이 다시는 발생하지 않도록 최선을 다하겠습니다.

새로운 정보가 확인되는 대로 이 게시물을 업데이트하겠습니다. 궁금한 점이 있으시면 보안@ClickUp.com으로 문의해 주십시오.