보안

Last updated

사용자의 소스 코드와 개발 환경을 안전하게 보호하는 것은 Cursor에 매우 중요합니다. 이 페이지에서는 Cursor가 보안을 어떻게 관리하고 있는지 설명합니다.

발견하신 잠재적 취약점이 있다면 security-reports@cursor.com으로 이메일을 보내 주세요.

보안 관련 문의가 있다면 언제든지 security@cursor.com으로 연락해 주세요.

Cursor를 신뢰하고 사용하는 대형 조직들이 이미 여럿 있지만, 저희 제품은 여전히 성장 중이며 보안 수준 또한 계속 강화하고 있다는 점을 유념해 주세요. 매우 민감한 환경에서 일하고 계시다면 Cursor(또는 다른 AI 도구)를 사용할 때 각별히 주의하셔야 합니다. 이 페이지가 저희의 현재 진행 상황을 이해하고, 적절한 위험 평가를 내리는 데 도움이 되기를 바랍니다.

인증 및 제3자 평가

Cursor는 SOC 2 Type II 인증을 획득했습니다. 보고서 사본을 요청하려면 trust.cursor.com을 방문하세요.

Cursor는 신뢰할 수 있는 제3자에 의한 연 1회 이상 정기적인 침투 테스트 실시를 약속합니다. 최신 보고서의 요약본(Executive Summary)을 요청하려면 trust.cursor.com을 방문하세요.

인프라 보안

당사는 아래의 서브프로세서를 사용하며, 대략 중요도가 높은 순으로 나열되어 있습니다. Cursor의 모든 AI 기능을 제공하기 위해 코드 데이터는 당사 서버로 전송된다는 점에 유의해 주세요(AI Requests 섹션 참조). 또한 프라이버시 모드(레거시)를 사용하는 사용자의 코드 데이터는 어떠한 형태로도 저장되지 않습니다(Privacy Mode Guarantee 섹션 참조).

각 모드가 데이터 전송 및 저장 방식에 어떤 영향을 미치는지 확인해 보세요:

Explore how each mode affects how data is sent and stored.
  • AWSSees and stores code data: Our infrastructure is primarily hosted on AWS. Our primary servers are in the US, with some latency critical services in Europe and Singapore.
  • CloudflareSees code data: We use Cloudflare as a reverse proxy in front of parts of our API and website in order to improve performance and security.
  • Microsoft AzureSees code data: Some secondary infrastructure is hosted on Microsoft Azure. All of our Azure servers are in the US.
  • Google Cloud Platform (GCP)Sees code data: Some secondary infrastructure is hosted on Google Cloud Platform (GCP). All of our GCP servers are in the US.
  • FireworksSees code data: Our custom models are hosted with Fireworks, on servers in the US, Europe, or Japan. We have a zero data retention agreement with Fireworks for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Fireworks may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Fireworks does not reuse the data for any other purpose.
  • BasetenSees code data: Our custom models are hosted with Baseten, on servers in the US and Canada. We have a zero data retention agreement with Baseten for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Baseten may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Baseten does not reuse the data for any other purpose.
  • TogetherSees code data: Our custom models are hosted with Together, on servers in the US. We have a zero data retention agreement with Together for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Together may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Together does not reuse the data for any other purpose.
  • OpenAISees code data: We rely on OpenAI's models to provide AI responses. In Privacy Mode and Privacy Mode (Legacy), we have a zero data retention agreement with OpenAI. Additionally, requests may be sent to OpenAI for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. For users that created their account after October 15, 2025, in Share Data mode, prompts and limited telemetry may also be shared with OpenAI when directly using their models.
  • AnthropicSees code data: We rely on many of Anthropic's models to give AI responses. Additionally, requests may be sent to Anthropic for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. We have a zero data retention agreement with Anthropic.
  • Google Cloud Vertex APISees code data: We rely on some Gemini models offered over Google Cloud's Vertex API to give AI responses. Requests may be sent to Google Cloud Vertex API for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. We have a zero data retention agreement with Vertex.
  • xAISees code data: We rely on some Grok models offered over the xAI API to give AI responses. We have a zero data retention agreement with xAI.
  • TurbopufferStores obfuscated code data: Embeddings of indexed codebases, as well as metadata associated with the embeddings (obfuscated file names), are stored with Turbopuffer on Google Cloud's servers in the US. You can read more on the Turbopuffer security page. Users can disable codebase indexing; read more about it in the Codebase Indexing section of this document.
  • ExaSee search requests (potentially derived from code data): Used for web search functionality. Search requests are potentially derived from code data (e.g., when using "@web" in the chat, a separate language model will look at your message, conversation history and current file to determine what to search for, and Exa/SerpApi will see the resulting search query).

*Cursor는 모델 차단 목록을 준수하며, 차단 목록에 있는 모델로는 어떤 요청도 보내지 않습니다.

당사의 인프라는 중국 내에 전혀 존재하지 않습니다. 우리는 중국 회사를 서브프로세서로 직접 사용하지 않으며, 당사가 파악하기로 당사의 서브프로세서들도 중국 회사를 사용하지 않습니다.

우리는 최소 권한 원칙에 따라 팀 구성원에게 인프라 접근 권한을 부여합니다. AWS에는 다중 요소 인증(MFA)을 적용하고 있습니다. 또한 네트워크 수준 제어와 시크릿을 모두 사용해 리소스 접근을 제한합니다.

클라이언트 보안

Cursor는 Microsoft가 유지 관리하는 오픈 소스 Visual Studio Code(VS Code)를 포크한 에디터입니다. Microsoft는 GitHub 보안 페이지에 보안 권고를 게시합니다. 주요 VS Code 릴리스가 두 번 나올 때마다 한 번씩, 업스트림 'microsoft/vscode' 코드베이스를 Cursor에 병합합니다. 앱에서 "Cursor > About Cursor"를 클릭하면, 사용 중인 Cursor 버전이 어떤 VS Code 버전을 기반으로 하는지 확인할 수 있습니다. 업스트림 VS Code에 심각도가 높은 보안 관련 패치가 있을 경우, 우리는 다음 병합 전에 해당 수정 사항을 체리픽(cherry-pick)하여 즉시 릴리스합니다.

우리 앱은 백엔드와 통신하기 위해 다음 도메인들로 요청을 보냅니다. 사내 프록시 뒤에 있는 환경이라면, Cursor가 정상적으로 동작하도록 아래 도메인들을 허용 목록에 추가해 주세요.

  • 'api2.cursor.sh': 대부분의 API 요청에 사용됩니다.

  • 'api5.cursor.sh': Cursor의 에이전트 요청에 사용됩니다.

  • 'api3.cursor.sh': Cursor Tab 요청에 사용됩니다(HTTP/2 전용).

  • 'repo42.cursor.sh': 코드베이스 인덱싱에 사용됩니다(HTTP/2 전용).

  • 'api4.cursor.sh', 'us-asia.gcpp.cursor.sh', 'us-eu.gcpp.cursor.sh', 'us-only.gcpp.cursor.sh': 위치에 따라 Cursor Tab 요청에 사용됩니다(HTTP/2 전용).

  • 'adminportal42.cursor.sh': SSO 및 도메인 검증 구성에 사용됩니다.

  • 'marketplace.cursorapi.com', 'cursor-cdn.com', 'downloads.cursor.com', 'anysphere-binaries.s3.us-east-1.amazonaws.com': 클라이언트 업데이트 및 마켓플레이스에서 확장 기능을 다운로드하는 데 사용됩니다.

VS Code와 비교했을 때 보안 측면에서 다른 점 두 가지는 다음과 같습니다.

  1. Workspace Trust는 Cursor에서 기본적으로 비활성화되어 있습니다. Cursor 설정에서 'security.workspace.trust.enabled''true'로 설정하면 활성화할 수 있습니다. 기본적으로 비활성화되어 있는 이유는 Workspace Trust의 "Restricted Mode"와 Cursor의 "Privacy Mode"가 혼동될 수 있고, Workspace Trust의 신뢰 속성이 미묘하고 이해하기 어렵기 때문입니다(예를 들어 Workspace Trust를 활성화해도 악성 확장 기능으로부터는 보호되지 않고, 악성 폴더로부터만 보호됩니다). 기본값을 활성화로 바꿔야 할지에 대해서는 커뮤니티 피드백에 열려 있습니다.

  2. 확장 기능 코드 서명: Cursor는 마켓플레이스에서 다운로드한 확장 기능의 서명을 검증하지 않습니다. VS Code는 최근에 이를 수행하기 시작했습니다. 구체적으로, 'extensions.verifySignature' 설정은 Cursor에서는 기본값이 'false'이고 VS Code에서는 'true'입니다. Cursor에서 이 값을 'true'로 설정하면, 확장 기능을 다운로드할 때마다 서명 검증에 실패했다는 팝업이 표시됩니다. 우리는 중기적으로 확장 기능 서명 검증을 지원하는 것을 목표로 하고 있습니다.

AI 요청

기능을 제공하기 위해 Cursor는 서버로 AI 요청을 전송합니다. 이는 여러 가지 상황에서 발생합니다. 예를 들어, 채팅에서 질문을 할 때 AI 요청을 보내고, Cursor Tab이 제안을 할 수 있도록 모든 키 입력마다 AI 요청을 보내며, 컨텍스트를 구성하거나 버그를 찾아 보여주기 위해 백그라운드에서 AI 요청을 보낼 수도 있습니다.

AI 요청에는 일반적으로 최근에 본 파일, 대화 내역, 그리고 언어 서버 정보를 기반으로 한 관련 코드 조각과 같은 컨텍스트가 포함됩니다. 이 코드 데이터는 AWS 상의 당사 인프라로 전송된 후, 적절한 언어 모델 추론 제공자(Fireworks/OpenAI/Anthropic/Google)로 전달됩니다. 설정에서 OpenAI용 개인 API 키를 구성한 경우에도 요청은 항상 먼저 AWS 상의 당사 인프라를 거친다는 점에 유의해 주세요.

현재 Cursor 앱에서 고객사의 OpenAI/Azure/Anthropic 기업용 배포 환경으로 직접 라우팅하는 기능은 제공하지 않습니다. 이는 프롬프트를 구성하는 작업이 당사 서버에서 이뤄지며, Fireworks 상의 커스텀 모델이 우수한 사용자 경험을 제공하는 데 매우 중요하기 때문입니다. 아직은 셀프 호스팅 서버 배포 옵션을 제공하지 않습니다.

코드베이스 인덱싱

Cursor는 코드베이스를 의미적으로 인덱싱할 수 있게 해 주며, 이를 통해 전체 코드 문맥을 활용해 질문에 답하고 기존 구현을 참고하여 더 나은 코드를 작성할 수 있습니다. 코드베이스 인덱싱은 기본적으로 활성화되어 있지만, 설정에서 끌 수 있습니다.

코드베이스 인덱싱 기능은 다음과 같이 동작합니다. 활성화되면, Cursor에서 열어 둔 폴더를 스캔하고 모든 파일 해시로 Merkle 트리를 계산합니다. '.gitignore' 또는 '.cursorignore'에 지정된 파일과 하위 디렉터리는 무시됩니다. 그런 다음 Merkle 트리를 서버와 동기화합니다. 매 10분마다 해시 불일치를 확인하고, Merkle 트리를 사용해 어떤 파일이 변경되었는지 파악한 뒤 해당 파일만 업로드합니다.

서버에서는 파일을 청크로 나누고 임베딩을 생성한 후, 해당 임베딩을 Turbopuffer에 저장합니다. 파일 경로로 벡터 검색 결과를 필터링할 수 있도록, 각 벡터마다 난독화된 상대 파일 경로와 해당 청크가 대응하는 줄 범위를 함께 저장합니다. 또한 청크의 해시를 기준으로 AWS 캐시에 임베딩을 저장하여, 동일한 코드베이스를 두 번째로 인덱싱할 때 훨씬 더 빠르게 진행되도록 합니다(팀에 특히 유용합니다).

추론 시점에는 임베딩을 계산하고, Turbopuffer가 최근접 이웃 검색을 수행한 뒤, 난독화된 파일 경로와 줄 범위를 클라이언트로 다시 보냅니다. 클라이언트는 이 정보를 사용해 해당 파일 청크를 로컬에서 읽어 옵니다. 그런 다음 이 청크들을 다시 서버로 보내 사용자의 질문에 답변합니다. 이는 프라이버시 모드 사용자의 경우, 평문 코드가 당사 서버나 Turbopuffer에 저장되지 않음을 의미합니다.

몇 가지 참고 사항:

  • 코드베이스에서 특정 파일이 Cursor 서버로 전송되거나 AI 요청에 포함되지 않도록 차단하려면, 제외하려는 파일과 디렉터리를 나열한 '.cursorignore' 파일을 코드베이스에 추가하세요. Cursor는 이러한 파일이 어떤 요청에도 포함되지 않도록 최선을 다해 노출을 방지합니다.

  • 파일 경로 난독화 상세: 경로를 '/''.' 기준으로 분할한 뒤, 각 세그먼트를 클라이언트에 저장된 비밀 키와 결정적인 짧은 6바이트 nonce로 암호화합니다. 이 방식은 디렉터리 계층 구조에 대한 일부 정보를 노출하고 일부 nonce 충돌도 발생할 수 있지만, 대부분의 정보를 숨겨 줍니다.

  • 임베딩 역추론: 학술 연구에 따르면, 일부 경우에는 임베딩을 역추론하는 것이 가능합니다. 현재 알려진 공격은 모델에 접근할 수 있고 짧은 문자열을 큰 벡터에 임베딩하는 것에 의존하므로, 여기에서 동일한 공격을 수행하는 것은 다소 어렵다고 보고 있습니다. 그렇다 하더라도, 벡터 데이터베이스가 침해될 경우 공격자가 인덱싱된 코드베이스에 대한 일부 정보를 알아낼 가능성은 분명히 존재합니다.

  • Git 리포지토리에서 코드베이스 인덱싱이 활성화되어 있는 경우, Git 히스토리도 인덱싱합니다. 구체적으로는 커밋 SHA, 부모 정보, 그리고 난독화된 파일 이름(위와 동일한 방식)을 저장합니다. 같은 Git 리포지토리 및 같은 팀 내 사용자 간에 이 데이터 구조를 공유할 수 있도록, 파일 이름 난독화를 위한 비밀 키는 최근 커밋 내용의 해시로부터 도출됩니다. 커밋 메시지와 파일 내용 또는 diff는 인덱싱하지 않습니다.

  • 인덱싱 기능에는 종종 부하가 많이 걸려 많은 요청이 실패할 수 있습니다. 이는 일부 파일이 완전히 인덱싱되기 전에 여러 번 업로드되어야 할 수도 있음을 의미합니다. 예를 들어 'repo42.cursor.sh'로의 네트워크 트래픽을 확인해 보면, 예상보다 더 많은 대역폭 사용량이 보일 수 있습니다.

프라이버시 모드 보장

프라이버시 모드는 설정에서 또는 팀 관리자를 통해 활성화할 수 있습니다. 프라이버시 모드가 활성화되면, 코드 데이터가 모델 제공자에 의해 저장되거나 학습에 사용되지 않는다는 것을 보장합니다. 프라이버시 모드는 누구나(무료 또는 Pro 사용자) 활성화할 수 있으며, 기본적으로 팀에 속한 모든 사용자에게는 강제로 활성화됩니다.

우리는 프라이버시 모드 보장을 매우 중요하게 생각합니다. 전체 Cursor 사용자 중 50% 이상이 프라이버시 모드를 활성화한 상태입니다.

우리 서버로의 각 요청에는 사용자가 프라이버시 모드인지 여부를 나타내는 불리언 값을 담은 'x-ghost-mode' 헤더가 포함됩니다. 프라이버시 모드 사용자를 실수로 비‑프라이버시 모드 사용자로 처리하는 일을 막기 위해, 헤더가 누락된 경우에는 항상 사용자가 프라이버시 모드라고 가정합니다.

우리 서버로 들어오는 모든 요청은 먼저 프록시에 도달하며, 프록시는 어떤 논리적 서비스가 요청을 처리할지 결정합니다(예: "chat service" 또는 "Cursor Tab service"). 각 논리적 서비스는 거의 동일한 두 개의 복제본으로 구성됩니다. 하나는 프라이버시 모드 요청을 처리하고, 다른 하나는 비‑프라이버시 모드 요청을 처리합니다. 프록시는 'x-ghost-mode' 헤더 값을 확인해 적절한 복제본으로 요청을 전달합니다. 각 복제본도 이중 확인을 위해 헤더를 다시 검사합니다. 기본적으로 프라이버시 모드 복제본에서의 모든 로그 함수는 no-op이며, 'infoUnrestricted'처럼 접미사가 붙은 경우에만 예외적으로 동작합니다. 이때에도 잠재적인 코드 데이터나 프롬프트가 첨부되지 않도록 매우 신중하게 검토합니다. 백그라운드 작업을 생성하는 요청의 경우에도, 프라이버시 모드와 비‑프라이버시 모드 각각에 대해 병렬 큐와 워커 복제본을 동일하게 운영합니다. 이러한 병렬 인프라를 통해, 우리는 프라이버시 모드 보장과 우발적인 실수나 버그에 대한 내구성에 대해 높은 신뢰를 가지고 있습니다.

팀 단위 프라이버시 모드 강제 적용을 위해, 각 클라이언트는 5분마다 서버에 ping을 보내 사용자가 프라이버시 모드를 강제하는 팀에 속해 있는지 확인합니다. 그렇다면 클라이언트의 프라이버시 모드 설정을 덮어씁니다. 클라이언트의 프라이버시 모드 ping이 어떤 이유로든 실패하는 경우를 방지하기 위해, 서버는 요청 처리의 hot path에서도 사용자가 프라이버시 모드를 강제하는 팀의 구성원인지 확인하고, 그렇다면 헤더 값이 다르더라도 해당 요청을 프라이버시 모드로 간주합니다. 지연 시간에 민감한 서비스에서는 이 값을 5분 동안 캐시하며, 캐시 미스가 발생하면 사용자가 프라이버시 모드라고 가정합니다. 종합하면, 사용자가 팀에 가입하면 늦어도 가입 후 5분 이내에는 프라이버시 모드가 보장된다는 의미입니다.

계정 삭제

Settings 대시보드에서 언제든지 계정을 삭제할 수 있습니다(“Advanced”를 클릭한 다음 “Delete Account”를 선택). 이렇게 하면 인덱싱된 코드베이스를 포함해 계정과 연결된 모든 데이터가 삭제됩니다. 저희는 30일 이내에 데이터가 완전히 삭제됨을 보장합니다(데이터는 즉시 삭제되지만, 일부 데이터베이스와 클라우드 스토리지에는 최대 30일 동안 유지되는 백업이 남아 있을 수 있습니다).

또한 사용자의 데이터가 모델 학습에 사용된 경우(이는 해당 시점에 프라이버시 모드를 사용 중이지 않았을 때에만 발생합니다), 이미 학습을 마친 기존 모델이 즉시 재학습되지는 않는다는 점에 유의하세요. 다만 이후 새로 학습되는 모델은 삭제된 사용자 데이터를 학습에 사용하지 않습니다.

취약점 공개

Cursor에서 취약점을 발견했다고 생각하시는 경우, security-reports@cursor.com으로 보고서를 제출해 주세요.

저희는 취약점 제보를 영업일 기준 5일 이내에 확인 및 회신하고, 가능한 한 신속하게 대응할 것을 약속드립니다. 중대한 보안 사고가 발생하는 경우 모든 사용자에게 이메일로 공지드립니다.

Cursor · 보안