Vercel Security
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Vercel에서 팀은 클라이언트에 속한 전체 환경이며, 프로젝트는 애플리케이션입니다.
Vercel의 보안 강화를 검토하려면 Viewer 역할 권한이 있는 사용자에게 요청하거나, 프로젝트를 확인하기 위해 최소한 프로젝트 뷰어 권한이 필요합니다(팀 구성도 확인할 필요가 없는 경우).
목적: 프로젝트 이름, 프레임워크 및 빌드 구성과 같은 기본 프로젝트 설정을 관리합니다.
전송
잘못된 구성: 프로젝트를 다른 팀으로 전송할 수 있습니다.
위험: 공격자가 프로젝트를 훔칠 수 있습니다.
프로젝트 삭제
잘못된 구성: 프로젝트를 삭제할 수 있습니다.
위험: 프로젝트 삭제
목적: 사용자 정의 도메인, DNS 설정 및 SSL 구성을 관리합니다.
DNS 구성 오류
잘못된 구성: 악성 서버를 가리키는 잘못된 DNS 레코드(A, CNAME).
위험: 도메인 탈취, 트래픽 가로채기 및 피싱 공격.
SSL/TLS 인증서 관리
잘못된 구성: 약하거나 만료된 SSL/TLS 인증서 사용.
위험: 중간자(MITM) 공격에 취약해져 데이터 무결성과 기밀성이 손상될 수 있습니다.
DNSSEC 구현
잘못된 구성: DNSSEC를 활성화하지 않거나 잘못된 DNSSEC 설정.
위험: DNS 스푸핑 및 캐시 오염 공격에 대한 취약성 증가.
도메인별 사용되는 환경
잘못된 구성: 프로덕션에서 도메인에 사용되는 환경을 변경합니다.
위험: 프로덕션에서 사용해서는 안 되는 잠재적인 비밀이나 기능이 노출될 수 있습니다.
목적: 특정 설정 및 변수를 가진 다양한 환경(개발, 미리보기, 프로덕션)을 정의합니다.
환경 격리
잘못된 구성: 환경 간에 환경 변수를 공유합니다.
위험: 프로덕션 비밀이 개발 또는 미리보기 환경으로 유출되어 노출이 증가합니다.
민감한 환경에 대한 접근
잘못된 구성: 프로덕션 환경에 대한 광범위한 접근을 허용합니다.
위험: 무단 변경 또는 라이브 애플리케이션에 대한 접근으로 인해 잠재적인 다운타임이나 데이터 유출이 발생할 수 있습니다.
목적: 애플리케이션에서 사용하는 환경별 변수 및 비밀을 관리합니다.
민감한 변수 노출
잘못된 구성: 민감한 변수를 NEXT_PUBLIC_
로 접두어를 붙여 클라이언트 측에서 접근 가능하게 만듭니다.
위험: API 키, 데이터베이스 자격 증명 또는 기타 민감한 데이터가 공개되어 데이터 유출로 이어질 수 있습니다.
민감한 비활성화
잘못된 구성: 비활성화된 경우(기본값) 생성된 비밀의 값을 읽을 수 있습니다.
위험: 민감한 정보의 우발적 노출 또는 무단 접근 가능성이 증가합니다.
공유 환경 변수
잘못된 구성: 팀 수준에서 설정된 환경 변수로, 민감한 정보를 포함할 수 있습니다.
위험: 민감한 정보의 우발적 노출 또는 무단 접근 가능성이 증가합니다.
목적: Git 리포지토리 통합, 브랜치 보호 및 배포 트리거를 구성합니다.
무시된 빌드 단계 (TODO)
잘못된 구성: 이 옵션은 새로운 커밋이 GitHub에 푸시될 때 실행될 bash 스크립트/명령을 구성할 수 있는 것처럼 보이며, 이는 RCE를 허용할 수 있습니다.
위험: TBD
목적: 프로젝트 기능을 향상시키기 위해 타사 서비스 및 도구를 연결합니다.
불안전한 타사 통합
잘못된 구성: 신뢰할 수 없거나 불안전한 타사 서비스와 통합합니다.
위험: 취약점, 데이터 유출 또는 손상된 통합을 통한 백도어 도입.
과도한 권한 부여 통합
잘못된 구성: 통합 서비스에 과도한 권한을 부여합니다.
위험: 프로젝트 리소스에 대한 무단 접근, 데이터 조작 또는 서비스 중단.
통합 모니터링 부족
잘못된 구성: 타사 통합을 모니터링하거나 감사하지 않습니다.
위험: 손상된 통합의 지연된 탐지로 인해 보안 위반의 잠재적 영향이 증가합니다.
목적: 다양한 보호 메커니즘을 통해 배포를 안전하게 하고, 누가 환경에 접근하고 배포할 수 있는지를 제어합니다.
Vercel 인증
잘못된 구성: 인증을 비활성화하거나 팀원 확인을 시행하지 않습니다.
위험: 무단 사용자가 배포에 접근할 수 있어 데이터 유출 또는 애플리케이션 오용으로 이어질 수 있습니다.
자동화를 위한 보호 우회
잘못된 구성: 우회 비밀을 공개적으로 노출하거나 약한 비밀을 사용합니다.
위험: 공격자가 배포 보호를 우회하여 보호된 배포에 접근하고 조작할 수 있습니다.
공유 가능한 링크
잘못된 구성: 링크를 무차별적으로 공유하거나 오래된 링크를 취소하지 않습니다.
위험: 보호된 배포에 대한 무단 접근, 인증 및 IP 제한 우회.
OPTIONS 허용 목록
잘못된 구성: 지나치게 광범위한 경로 또는 민감한 엔드포인트를 허용 목록에 추가합니다.
위험: 공격자가 보호되지 않은 경로를 악용하여 무단 작업을 수행하거나 보안 검사를 우회할 수 있습니다.
비밀번호 보호
잘못된 구성: 약한 비밀번호를 사용하거나 안전하지 않게 공유합니다.
위험: 비밀번호가 추측되거나 유출될 경우 배포에 대한 무단 접근이 발생할 수 있습니다.
참고: Pro 플랜에서 고급 배포 보호의 일환으로 추가 $150/월에 제공됩니다.
배포 보호 예외
잘못된 구성: 실수로 프로덕션 또는 민감한 도메인을 예외 목록에 추가합니다.
위험: 중요한 배포가 공개되어 데이터 유출 또는 무단 접근이 발생할 수 있습니다.
참고: Pro 플랜에서 고급 배포 보호의 일환으로 추가 $150/월에 제공됩니다.
신뢰할 수 있는 IP
잘못된 구성: IP 주소 또는 CIDR 범위를 잘못 지정합니다.
위험: 정당한 사용자가 차단되거나 무단 IP가 접근할 수 있습니다.
참고: Enterprise 플랜에서 제공됩니다.
목적: 런타임 설정, 메모리 할당 및 보안 정책을 포함한 서버리스 함수를 구성합니다.
없음
목적: 성능을 최적화하고 데이터 저장을 제어하기 위해 캐싱 전략 및 설정을 관리합니다.
캐시 삭제
잘못된 구성: 모든 캐시를 삭제할 수 있습니다.
위험: 무단 사용자가 캐시를 삭제하여 잠재적인 서비스 거부(DoS)를 초래할 수 있습니다.
목적: 지정된 간격으로 자동화된 작업 및 스크립트를 예약합니다.
크론 작업 비활성화
잘못된 구성: 코드 내에서 선언된 크론 작업을 비활성화할 수 있습니다.
위험: 서비스 중단 가능성(크론 작업의 목적에 따라 다름)
목적: 모니터링 및 감사를 위해 애플리케이션 로그를 캡처하고 저장하기 위해 외부 로깅 서비스를 구성합니다.
없음 (팀 설정에서 관리됨)
목적: 프로젝트 접근, 소스 보호 및 기타에 영향을 미치는 다양한 보안 관련 설정의 중앙 허브입니다.
빌드 로그 및 소스 보호
잘못된 구성: 보호를 비활성화하거나 /logs
및 /src
경로를 공개적으로 노출합니다.
위험: 빌드 로그 및 소스 코드에 대한 무단 접근으로 인해 정보 유출 및 잠재적 취약점 악용이 발생할 수 있습니다.
Git 포크 보호
잘못된 구성: 적절한 검토 없이 무단 풀 요청을 허용합니다.
위험: 악성 코드가 코드베이스에 병합되어 취약점이나 백도어가 도입될 수 있습니다.
OIDC 연합을 통한 안전한 백엔드 접근
잘못된 구성: OIDC 매개변수를 잘못 설정하거나 안전하지 않은 발급자 URL을 사용합니다.
위험: 결함 있는 인증 흐름을 통해 백엔드 서비스에 대한 무단 접근이 발생할 수 있습니다.
배포 보존 정책
잘못된 구성: 보존 기간을 너무 짧게 설정(배포 기록 손실)하거나 너무 길게 설정(불필요한 데이터 보존)합니다.
위험: 필요할 때 롤백을 수행할 수 없거나 이전 배포로부터 데이터 노출 위험이 증가합니다.
최근 삭제된 배포
잘못된 구성: 삭제된 배포를 모니터링하지 않거나 자동 삭제에만 의존합니다.
위험: 중요한 배포 기록 손실로 인해 감사 및 롤백이 방해받을 수 있습니다.
목적: 구성 조정 및 보안을 강화하기 위한 추가 프로젝트 설정에 접근합니다.
디렉토리 목록
잘못된 구성: 디렉토리 목록을 활성화하면 사용자가 인덱스 파일 없이 디렉토리 내용을 볼 수 있습니다.
위험: 민감한 파일, 애플리케이션 구조 및 공격의 잠재적 진입점이 노출됩니다.
공격 도전 모드 활성화
잘못된 구성: 이를 활성화하면 DoS에 대한 웹 애플리케이션의 방어력이 향상되지만 사용성의 대가가 따릅니다.
위험: 잠재적인 사용자 경험 문제.
잘못된 구성: 트래픽을 차단/차단할 수 있습니다.
위험: 악성 트래픽을 허용하거나 정상 트래픽을 차단하여 잠재적인 DoS를 초래할 수 있습니다.
잘못된 구성: 애플리케이션의 전체 소스 코드를 읽을 수 있는 접근을 허용합니다.
위험: 민감한 정보의 잠재적 노출
잘못된 구성: 이 보호는 클라이언트와 서버 애플리케이션이 항상 동일한 버전을 사용하도록 보장하여 클라이언트가 서버와 다른 버전을 사용하는 비동기화를 방지합니다.
위험: 이를 비활성화하면 향후 새로운 배포에서 DoS 문제가 발생할 수 있습니다.
전송
잘못된 구성: 모든 프로젝트를 다른 팀으로 전송할 수 있습니다.
위험: 공격자가 프로젝트를 훔칠 수 있습니다.
프로젝트 삭제
잘못된 구성: 모든 프로젝트와 함께 팀을 삭제할 수 있습니다.
위험: 프로젝트 삭제
속도 통찰력 비용 한도
잘못된 구성: 공격자가 이 숫자를 증가시킬 수 있습니다.
위험: 비용 증가
구성원 추가
잘못된 구성: 공격자가 자신이 제어하는 계정을 초대하여 지속성을 유지할 수 있습니다.
위험: 공격자 지속성
역할
잘못된 구성: 필요하지 않은 사람에게 너무 많은 권한을 부여하면 Vercel 구성의 위험이 증가합니다. https://vercel.com/docs/accounts/team-members-and-roles/access-roles에서 가능한 모든 역할을 확인하세요.
위험: Vercel 팀의 노출 증가
Vercel의 접근 그룹은 미리 정의된 역할 할당이 있는 프로젝트 및 팀 구성원의 모음으로, 여러 프로젝트에 걸쳐 중앙 집중식 및 간소화된 접근 관리를 가능하게 합니다.
잠재적 잘못된 구성:
과도한 권한 부여 구성원: 필요 이상으로 많은 권한이 있는 역할을 할당하여 무단 접근 또는 행동을 초래합니다.
부적절한 역할 할당: 팀 구성원의 책임과 일치하지 않는 역할을 잘못 할당하여 권한 상승을 초래합니다.
프로젝트 분리 부족: 민감한 프로젝트를 분리하지 않아 의도한 것보다 더 넓은 접근을 허용합니다.
불충분한 그룹 관리: 접근 그룹을 정기적으로 검토하거나 업데이트하지 않아 구식 또는 부적절한 접근 권한이 발생합니다.
일관되지 않은 역할 정의: 서로 다른 접근 그룹 간에 일관되지 않거나 불명확한 역할 정의를 사용하여 혼란과 보안 격차를 초래합니다.
타사에 대한 로그 드레인:
잘못된 구성: 공격자가 로그를 훔치기 위해 로그 드레인을 구성할 수 있습니다.
위험: 부분적인 지속성
팀 이메일 도메인: 구성된 경우, 이 설정은 지정된 도메인(예: mydomain.com
)으로 끝나는 이메일 주소를 가진 Vercel 개인 계정을 자동으로 초대하여 가입 시 및 대시보드에서 팀에 참여하도록 합니다.
잘못된 구성:
잘못된 이메일 도메인 또는 잘못 철자된 도메인을 팀 이메일 도메인 설정에 지정합니다.
회사 전용 도메인 대신 일반 이메일 도메인(예: gmail.com
, hotmail.com
)을 사용합니다.
위험:
무단 접근: 의도하지 않은 도메인의 이메일 주소를 가진 사용자가 팀에 참여하라는 초대를 받을 수 있습니다.
데이터 노출: 민감한 프로젝트 정보가 무단 개인에게 노출될 수 있습니다.
보호된 Git 범위: 보호된 범위에서 다른 Vercel 팀이 리포지토리를 배포하지 못하도록 팀에 최대 5개의 Git 범위를 추가할 수 있습니다. 여러 팀이 동일한 범위를 지정할 수 있어 두 팀 모두 접근할 수 있습니다.
잘못된 구성: 보호된 목록에 중요한 Git 범위를 추가하지 않습니다.
위험:
무단 배포: 다른 팀이 귀하의 조직 Git 범위에서 무단으로 리포지토리를 배포할 수 있습니다.
지적 재산 노출: 독점 코드가 배포되어 팀 외부에서 접근될 수 있습니다.
환경 변수 정책: 팀의 환경 변수를 생성 및 편집하기 위한 정책을 시행합니다. 특히 모든 환경 변수가 Vercel의 배포 시스템에 의해 복호화될 수 있는 민감한 환경 변수로 생성되도록 강제할 수 있습니다.
잘못된 구성: 민감한 환경 변수의 강제를 비활성화합니다.
위험:
비밀 노출: 환경 변수가 무단 팀 구성원에 의해 조회되거나 편집될 수 있습니다.
데이터 유출: API 키 및 자격 증명과 같은 민감한 정보가 유출될 수 있습니다.
감사 로그: 팀 활동의 내보내기를 최대 90일 동안 제공합니다. 감사 로그는 팀 구성원이 수행한 작업을 모니터링하고 추적하는 데 도움이 됩니다.
잘못된 구성: 무단 팀 구성원에게 감사 로그에 대한 접근을 부여합니다.
위험:
개인 정보 침해: 민감한 사용자 활동 및 데이터 노출.
로그 변조: 악의적인 행위자가 자신의 흔적을 감추기 위해 로그를 변경하거나 삭제할 수 있습니다.
SAML 단일 로그인: 팀을 위한 SAML 인증 및 디렉토리 동기화를 사용자 정의할 수 있으며, 중앙 집중식 인증 및 사용자 관리를 위해 ID 공급자(IdP)와 통합할 수 있습니다.
잘못된 구성: 공격자가 SAML 매개변수(예: 엔터티 ID, SSO URL 또는 인증서 지문)를 설정하여 팀을 백도어할 수 있습니다.
위험: 지속성 유지
IP 주소 가시성: 특정 데이터 보호 법률에 따라 개인 정보로 간주될 수 있는 IP 주소가 모니터링 쿼리 및 로그 드레인에 표시되는지 여부를 제어합니다.
잘못된 구성: 필요 없이 IP 주소 가시성을 활성화합니다.
위험:
개인 정보 침해: GDPR과 같은 데이터 보호 규정 준수 실패.
법적 결과: 개인 데이터 처리 부주의로 인한 잠재적 벌금 및 처벌.
IP 차단: Vercel이 요청을 차단해야 하는 IP 주소 및 CIDR 범위를 구성할 수 있습니다. 차단된 요청은 청구에 기여하지 않습니다.
잘못된 구성: 공격자가 악성 트래픽을 허용하거나 정상 트래픽을 차단하도록 악용할 수 있습니다.
위험:
정당한 사용자에 대한 서비스 거부: 유효한 사용자 또는 파트너의 접근 차단.
운영 중단: 특정 지역 또는 클라이언트에 대한 서비스 가용성 손실.
Vercel 안전한 컴퓨팅은 Vercel 함수와 백엔드 환경(예: 데이터베이스) 간의 안전하고 개인적인 연결을 가능하게 하여 전용 IP 주소가 있는 격리된 네트워크를 설정합니다. 이를 통해 백엔드 서비스를 공개적으로 노출할 필요가 없어 보안, 규정 준수 및 개인 정보 보호가 향상됩니다.
잘못된 AWS 리전 선택
잘못된 구성: 백엔드 서비스의 리전과 일치하지 않는 안전한 컴퓨팅 네트워크를 위한 AWS 리전을 선택합니다.
위험: 지연 증가, 데이터 거주지 준수 문제 및 성능 저하.
CIDR 블록 중복
잘못된 구성: 기존 VPC 또는 다른 네트워크와 중복되는 CIDR 블록을 선택합니다.
위험: 네트워크 충돌로 인해 연결 실패, 무단 접근 또는 네트워크 간 데이터 유출이 발생할 수 있습니다.
부적절한 VPC 피어링 구성
잘못된 구성: VPC 피어링을 잘못 설정합니다(예: 잘못된 VPC ID, 불완전한 라우트 테이블 업데이트).
위험: 백엔드 인프라에 대한 무단 접근, 안전한 연결 실패 및 잠재적 데이터 유출.
과도한 프로젝트 할당
잘못된 구성: 적절한 격리 없이 여러 프로젝트를 단일 안전한 컴퓨팅 네트워크에 할당합니다.
위험: 공유 IP 노출로 인해 공격 표면이 증가하여 손상된 프로젝트가 다른 프로젝트에 영향을 미칠 수 있습니다.
부적절한 IP 주소 관리
잘못된 구성: 전용 IP 주소를 적절하게 관리하거나 회전하지 않습니다.
위험: IP 스푸핑, 추적 취약점 및 IP가 악성 활동과 연관될 경우 블랙리스트에 오를 수 있습니다.
불필요하게 빌드 컨테이너 포함
잘못된 구성: 빌드 중 백엔드 접근이 필요하지 않을 때 빌드 컨테이너를 안전한 컴퓨팅 네트워크에 추가합니다.
위험: 공격 표면이 확대되고 프로비저닝 지연이 증가하며 네트워크 자원이 불필요하게 소비됩니다.
우회 비밀을 안전하게 처리하지 않음
잘못된 구성: 배포 보호를 우회하는 데 사용되는 비밀을 노출하거나 잘못 처리합니다.
위험: 보호된 배포에 대한 무단 접근이 발생하여 공격자가 악성 코드를 조작하거나 배포할 수 있습니다.
리전 장애 조치 구성 무시
잘못된 구성: 수동 장애 조치 리전을 설정하지 않거나 장애 조치 설정을 잘못 구성합니다.
위험: 기본 리전 장애 발생 시 서비스 중단으로 인해 가용성이 감소하고 데이터 불일치가 발생할 수 있습니다.
VPC 피어링 연결 한도 초과
잘못된 구성: 허용된 한도(예: 50개 연결 초과)보다 더 많은 VPC 피어링 연결을 설정하려고 시도합니다.
위험: 필요한 백엔드 서비스에 안전하게 연결할 수 없어 배포 실패 및 운영 중단이 발생할 수 있습니다.
불안전한 네트워크 설정
잘못된 구성: 약한 방화벽 규칙, 암호화 부족 또는 안전한 컴퓨팅 네트워크 내에서 부적절한 네트워크 분할.
위험: 데이터 가로채기, 백엔드 서비스에 대한 무단 접근 및 공격에 대한 취약성 증가.
목적: 모든 프로젝트에서 사용하는 환경별 변수 및 비밀을 관리합니다.
민감한 변수 노출
잘못된 구성: 민감한 변수를 NEXT_PUBLIC_
로 접두어를 붙여 클라이언트 측에서 접근 가능하게 만듭니다.
위험: API 키, 데이터베이스 자격 증명 또는 기타 민감한 데이터가 공개되어 데이터 유출로 이어질 수 있습니다.
민감한 비활성화
잘못된 구성: 비활성화된 경우(기본값) 생성된 비밀의 값을 읽을 수 있습니다.
위험: 민감한 정보의 우발적 노출 또는 무단 접근 가능성이 증가합니다.