공식 Cursor 보안 문서에서 공개된 코드 검색 로직

AI 기술 자료9개월 전에 게시 됨 AI 공유 서클
3.3K 00

인프라 보안

당사는 중요도 순으로 나열된 다음 하위 프로세서에 의존합니다. 코드 데이터는 다음을 지원하기 위해 서버에 업로드됩니다. 커서 및 모든 AI 기능( AI 요청 구성 요소), 개인정보 보호 모드에서는 사용자의 코드 데이터가 유지되지 않습니다(자세한 내용은 다음을 참조하세요. 개인 정보 보호 모드 보장 (일부).

개인정보 보호 모드가 활성화되어 있습니다(개인정보 보호 모드가 코드 데이터 전송에 미치는 영향을 보려면 클릭하세요).

  • AWS 대부분의 서버는 미국에 있으며, 지연 시간에 민감한 일부 서버는 아시아(도쿄)와 유럽(런던)의 AWS 리전에 있습니다.
  • 불꽃놀이 코드 데이터 참조: 당사는 미국, 아시아(도쿄), 유럽(런던)에 있는 Fireworks 서버에서 사용자 지정 모델을 호스팅합니다. 개인정보 보호 모드가 활성화되어 있지 않은 경우 모델 추론 속도를 높이기 위해 일부 코드 데이터를 저장할 수 있습니다.
  • OpenAI 코드 데이터 보기: 당사는 AI 응답을 제공하기 위해 OpenAI의 많은 모델을 사용합니다. 채팅에서 Anthropic의 (또는 다른) 모델을 선택한 경우에도 요청이 OpenAI로 전송될 수 있습니다(예: 요약 등).당사는 OpenAI와 데이터 보유 계약을 체결하지 않았습니다.
  • 인류학 코드 데이터 보기: 우리는 많은 인류학 당사는 Anthropic과 데이터 보존 계약을 체결하지 않았습니다. 채팅에서 OpenAI(또는 기타) 모델을 선택한 경우에도 요청이 Anthropic에 전송될 수 있습니다(예: 요약) 당사는 Anthropic과 데이터 보유에 대한 계약을 체결하지 않았습니다.
  • 구글 클라우드 버텍스 API 코드 데이터 보기: Google Cloud에서 제공하는 일부 코드 데이터에 의존합니다. 쌍둥이자리 모델을 사용하여 AI 응답을 제공할 수 있습니다. 채팅에서 OpenAI(또는 다른) 모델을 선택한 경우에도 요청은 Google Cloud Vertex API로 전송될 수 있습니다(예: 요약 등).
  • 터보퍼퍼 난독화된 코드 데이터 저장: 색인된 코드베이스의 임베딩 및 임베딩과 관련된 메타데이터(난독화된 파일명)는 미국에 위치한 Google 클라우드의 Turbopuffer에 저장됩니다. 난독화된 코드 데이터에 대한 자세한 정보는 다음에서 확인할 수 있습니다. 터보퍼퍼 보안 페이지 자세히 알아보세요. 사용자는 코드베이스 인덱싱을 비활성화할 수 있으며, 자세한 내용은 이 문서의 코드베이스 색인 Part.
  • Exa 노래로 응답 SerpApi 웹 검색 기능에 대해서는 검색 요청(코드 데이터에서 비롯될 수 있음): 웹 검색 기능을 참조하세요. 검색 요청은 코드 데이터에서 발생할 수 있습니다(예: 채팅에서 "@web"을 사용하는 경우 별도의 언어 모델이 메시지, 세션 기록 및 현재 문서를 기반으로 검색할 내용을 결정하고 Exa/SerpApi는 생성된 검색 쿼리를 보게 됩니다).
  • MongoDB 보이지 않는 코드 데이터: 개인정보 보호 모드를 활성화하지 않은 사용자를 위해 일부 분석 데이터를 저장하는 데 MongoDB를 사용합니다.
    • 데이터독 코드 데이터에 대한 액세스 권한 없음: 로깅 및 모니터링에 Datadog을 사용합니다. 에서 볼 수 있듯이 개인 정보 보호 모드 보증 섹션 개인정보 보호 모드 사용자와 관련된 로그에는 다음과 같이 코드 데이터가 포함되어 있지 않습니다.
  • 데이터브릭 코드 데이터에 대한 액세스 권한 없음: 당사는 일부 사용자 지정 모델을 학습하기 위해 Databricks MosaicML을 사용합니다. 개인정보 보호 모델 사용자 데이터는 Databricks에 전달되지 않습니다.
  • 파운드리 코드 데이터에 액세스하지 않음: 일부 사용자 지정 모델을 학습하기 위해 Foundry를 사용합니다. 개인정보 보호 모드 사용자 데이터는 Foundry에 전달되지 않습니다.
  • Slack 코드 데이터에 대한 접근 금지: Slack은 내부 커뮤니케이션 도구로 사용합니다. 내부 채팅에서 비공개 사용자가 아닌 사용자를 위한 힌트 스니펫이 디버깅 목적으로 전송될 수 있습니다.
  • Google 워크스페이스 코드 데이터에 대한 액세스 권한 없음: 공동 작업을 위해 Google Workspace를 사용합니다. 내부 이메일에서 비공개 사용자가 아닌 사용자를 위한 힌트 스니펫이 디버깅을 위해 전송될 수 있습니다.
  • 솔방울 코드 데이터에 액세스할 수 없음: 색인된 문서의 임베디드 및 메타데이터는 Pinecone에 저장되며, 이러한 문서는 공개 웹에서 가져옵니다. 현재 이러한 문서를 Turbopuffer로 마이그레이션하고 있습니다.
  • 진폭 코드 데이터에 대한 액세스 불가: 일부 데이터 분석에 Amplitude를 사용하며, Amplitude에는 코드 데이터가 저장되지 않고 '커서 탭 요청 횟수'와 같은 이벤트 데이터만 기록됩니다.
  • 해시코프 코드 데이터에 대한 액세스 권한 없음: 인프라 관리를 위해 해시코프 테라폼을 사용합니다.
  • 스트라이프 코드화된 데이터에 대한 액세스 금지: 청구서 처리를 위해 Stripe을 사용하며, Stripe은 귀하의 개인 데이터(이름, 신용카드, 주소)를 저장합니다.
  • Vercel 코드 데이터에 대한 액세스 권한 없음: Vercel을 사용하여 사이트를 배포합니다. 사이트가 코드 데이터에 액세스할 수 없습니다.
  • WorkOS 코드 데이터에 대한 액세스 권한 없음: WorkOS를 사용하여 인증을 처리합니다. WorkOS는 일부 개인 데이터(이름, 이메일 주소)를 저장할 수 있습니다.

당사의 어떤 인프라도 중국에 위치해 있지 않습니다. 당사는 어떠한 중국 기업도 직접적으로 하위 처리업체로 사용하지 않으며, 당사가 아는 한 어떠한 하위 처리업체도 사용하지 않습니다.

당사는 인프라 액세스 권한을 할당할 때 최소 권한 원칙을 따르고 AWS에 다단계 인증을 구현합니다. 네트워크 수준 제어와 비밀 관리를 통해 리소스 액세스를 제한합니다.

클라이언트 보안

Cursor는 Microsoft에서 유지 관리하는 오픈 소스 프로젝트입니다. Visual Studio 코드 (VS 코드)의 한 지사입니다. GitHub 보안 페이지 를 통해 보안 권고사항의 릴리스에 대해 알려드립니다. VS Code의 주요 릴리스가 나올 때마다 업스트림에 게시합니다. ‘microsoft/vscode’ 코드 베이스가 커서에 병합됩니다. 앱에서 "커서 > 커서 정보"를 클릭하면 현재 사용 중인 커서의 기반이 되는 VS 코드 버전을 확인할 수 있습니다. 업스트림 VS 코드에 심각한 보안 패치가 있는 경우 다음 병합 전에 해당 패치를 선택하여 즉시 릴리스합니다.

당사는 다음을 사용합니다. ToDesktop 를 사용하여 앱을 배포하고 자동 업데이트를 수행합니다. 널리 사용되는 몇 가지 애플리케이션(예 리니어 노래로 응답 ClickUp) 또한 플랫폼을 신뢰합니다.

저희 애플리케이션은 백엔드와 통신하기 위해 다음 도메인으로 요청을 보냅니다. 엔터프라이즈 프록시 환경을 사용하는 경우 이러한 도메인을 화이트리스트에 추가하여 커서가 제대로 작동하는지 확인하세요.

  • ‘api2.cursor.sh’대부분의 API 요청에 사용됩니다.
  • ‘api3.cursor.sh’: 커서 탭 요청의 경우(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’위치에 따라 커서 탭 요청에 사용됩니다(HTTP/2만 해당).
  • ‘marketplace.cursorapi.com’(수학.) 속‘cursor-cdn.com’: 확장 프로그램 마켓플레이스에서 확장 프로그램을 다운로드하는 데 사용됩니다.
  • ‘download.todesktop.com’: 업데이트 확인 및 다운로드용.

VS 코드와 다른 한 가지 보안 기능에 주목하세요:

  1. 작업 공간 신뢰 커서에서는 기본적으로 비활성화되어 있습니다. 설정할 수 있습니다. ‘security.workspace.trust.enabled’ 로 설정 ‘true’ 를 클릭하여 활성화합니다. 워크스페이스 트러스트의 '제한 모드'와 커서의 '개인정보 보호 모드'의 혼동을 피하고, 트러스트 속성이 복잡하고 이해하기 어렵기 때문에(예: 워크스페이스 트러스트를 사용 설정하더라도 악성 확장 프로그램으로부터는 보호되지 않고 악성 폴더로부터만 보호됨) 기본적으로 비활성화되어 있습니다. 워크스페이스 트러스트를 기본적으로 사용 설정해야 하는지 여부에 대한 커뮤니티의 피드백을 환영합니다.

AI 요청

기능을 제공하기 위해 Cursor는 서버에 AI 요청을 합니다. 이 요청은 다양한 시나리오에서 발생합니다. 예를 들어, 채팅에서 질문을 할 때 AI 요청을 보내거나, 사용자가 입력할 때마다 AI 요청을 보내 커서 탭이 사용자에게 제안을 할 수 있도록 하며, 백그라운드에서 AI 요청을 보내 컨텍스트를 구축하거나 오류를 찾아서 경고할 수도 있습니다.

AI 요청에는 일반적으로 최근에 본 문서, 대화 로그, 언어 서버 정보를 기반으로 한 관련 코드 스니펫과 같은 컨텍스트 정보가 포함됩니다. 이 코드 데이터는 AWS 기반 인프라로 전송된 다음 적절한 언어 모델 추론 제공업체(Fireworks/OpenAI/Anthropic/Google)로 전달됩니다. 설정에서 자체 OpenAI API 키를 구성하더라도 요청은 항상 AWS의 인프라로 먼저 전달된다는 점에 유의하세요.

현재로서는 큐 빌드가 서버에서 이루어지고 우수한 사용자 경험을 제공하기 위해서는 Fireworks의 사용자 지정 모델이 중요하기 때문에 Cursor 앱에서 OpenAI/Azure/Anthropic의 엔터프라이즈 배포에 직접 연결하는 것은 아직 지원하지 않습니다. 아직 자체 호스팅 서버 배포 옵션은 제공하지 않습니다.

Cursor에서 생성된 모든 코드의 소유권은 회원님에게 있습니다.

코드베이스 색인

커서를 사용하면 코드베이스를 의미론적으로 색인화할 수 있으므로 전체 코드베이스의 컨텍스트를 통해 질문에 답하고 기존 구현을 참조하여 더 나은 품질의 코드를 작성할 수 있습니다. 코드베이스 인덱싱은 기본적으로 활성화되어 있지만 부트스트랩 프로세스나 설정에서 해제할 수 있습니다.

코드베이스 인덱싱 기능은 다음과 같이 작동합니다. 활성화하면 커서에서 열어둔 폴더를 스캔하여 모든 파일의 해시에 대한 머클 트리를 계산합니다.‘.gitignore’ 어쩌면 ‘.cursorignore’ 머클 트리에 지정된 파일 및 하위 디렉터리는 무시됩니다. 그런 다음 머클 트리가 서버에 동기화됩니다. 10분마다 해시가 일치하는지 확인하고 머클 트리를 사용하여 변경된 파일을 식별하고 해당 파일만 업로드합니다.

서버에서 파일을 청크하고 임베딩한 후 임베딩된 파일을 터보퍼퍼 에 저장합니다. 파일 경로별로 벡터 검색 결과를 필터링할 수 있도록 각 벡터에 대해 난독화된 상대 파일 경로와 청크에 해당하는 줄 범위를 저장합니다. 또한 동일한 코드베이스를 한 번 더 빠르게 색인할 수 있도록 AWS 캐시에서 청크의 해시를 기준으로 임베딩을 색인합니다(특히 팀에 유용합니다).

추론 단계에서는 임베딩을 계산하고, 터보퍼퍼가 가장 가까운 이웃 검색을 수행하고, 난독화된 파일 경로와 줄 범위를 클라이언트로 다시 보내고, 이러한 파일 청크를 클라이언트에서 로컬로 읽도록 합니다. 그런 다음 이 블록을 다시 서버로 전송하여 사용자의 질문에 답합니다. 즉, 일반 텍스트 코드는 서버나 Turbopuffer에 저장되지 않습니다.

몇 가지 참고 사항:

  • 비록 ‘.cursorignore’ 파일은 색인되지 않도록 설정할 수 있지만, 최근에 파일을 본 후 채팅에서 질문한 경우와 같이 여전히 AI 요청에 포함될 수 있습니다. 다음 사항을 추가하는 것을 고려 중입니다. ‘.cursorban’ 파일에 대한 요청에서 파일이 전송되지 않도록 하려는 시나리오를 처리할 수 있습니다. 이 기능에 관심이 있으시면 포럼에 글을 올리거나 hi@cursor.com 문의하기.
  • 파일 경로 난독화 세부 정보: 경로가 통과됩니다. ‘/’ 노래로 응답 ‘.’ 클라이언트에 저장된 키와 결정론적 6바이트의 짧은 난수를 사용하여 각 조각을 분할하고 암호화합니다. 이렇게 하면 디렉토리 계층 구조에 대한 일부 정보가 유출되고 난수 충돌이 발생하지만 대부분의 정보는 숨겨집니다.
  • 임베딩 반전: 학계 연구에 따르면 일부 경우 임베딩을 반전시키는 것이 가능하다는 사실이 밝혀졌습니다. 현재 공격은 모델에 액세스하여 짧은 문자열을 큰 벡터에 임베딩하는 방식이므로, 이러한 맥락에서 이 공격을 수행하기는 더 어렵다고 생각합니다. 그러나 공격자가 벡터 데이터베이스에 침입할 경우, 인덱싱된 코드베이스에 대한 지식이 있을 수 있습니다.
  • Git 리포지토리에서 코드베이스 인덱싱이 활성화되면 Git 기록도 인덱싱됩니다. 특히 커밋 SHA, 부모 정보, 난독화된 파일 이름(위와 동일)을 저장합니다. 동일한 Git 리포지토리 및 팀 내에서 데이터 구조를 공유할 수 있도록 파일 이름 난독화의 키는 가장 최근 커밋의 해시에서 파생됩니다. 커밋 메시지와 파일 내용 또는 차이점은 인덱싱되지 않습니다.
  • 인덱싱 기능은 일반적으로 부하가 높기 때문에 많은 요청이 실패할 수 있습니다. 즉, 파일이 완전히 색인되기 전에 여러 번 업로드해야 하는 경우도 있습니다. 이 문제의 한 가지 징후는 다음과 같습니다. ‘repo42.cursor.sh’ 의 네트워크 트래픽을 처리하며 예상치를 초과하는 대역폭 사용량을 볼 수 있습니다.
© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...