아티클

Vercel 환경 프론트엔드 코드 내 Secret 노출사례 연구: AWS, Stripe, Github Key가 노출됨

Vercel 환경 연구에서 AWS/Stripe 키 등 중요 시크릿이 프론트엔드 코드에 노출된 것을 발견했습니다. 관련 위험과 원인, 예방책을 확인하세요.

1. 서론: 개발 속도의 이면 – Vercel 환경의 Secret 노출 위험

Vercel: 현대 웹 개발의 핵심 동력

Vercel과 같은 플랫폼은 프론트엔드를 손쉽게 빌드하고 배포하도록 지원하며 개발 속도와 편의성을 극대화합니다. 서버리스 함수, 엣지 네트워크, Git 통합 등 강력한 기능으로 개발자 경험(DX)을 개선하고, 복잡한 인프라 관리를 추상화하여 개발자가 핵심 로직 구현에 집중하도록 돕습니다. Git 커밋만으로 빌드 및 배포가 자동으로 이루어져 아이디어를 빠르게 서비스로 구현할 수 있습니다.

개발 속도 vs. 보안 규율: 위험한 불균형

Vercel 등이 추구하는 개발 및 배포 속도 극대화는 개발자 경험 향상에 기여하지만, 보안 검토나 신중한 설정 확인 절차를 간소화하려는 압력으로 작용할 수 있습니다. 속도 우선주의는 보안보다 기능 출시를 중시하는 문화를 조성할 수 있으며, 플랫폼의 장점이 역설적으로 보안 사고의 간접적 원인이 될 수 있습니다.

치명적 실수: 프론트엔드에 숨겨진 Secret의 위험성

이러한 편의성 이면에는 AWS Secret Key, Stripe Secret Key, 데이터베이스 비밀번호, GitHub 개인 접근 토큰(PAT) 등 민감한 자격 증명 정보('Secret')가 개발자의 실수나 지식 부족으로 프론트엔드 JavaScript 번들에 포함되어 노출되는 심각한 보안 위험이 존재합니다. 사용자 브라우저로 다운로드되는 프론트엔드 코드는 사실상 공개 정보이며, 여기에 Secret을 포함하는 것은 NHI OWASP Top 10의 '시크릿 유출'에 해당하는 매우 위험한 행위입니다.

유출된 Secret은 공격자에게 시스템 및 데이터 무단 접근 권한을 부여하여 데이터 유출/조작, 금전적 손실, API 서비스 남용 등 심각한 결과를 초래할 수 있습니다. 

Vercel 환경에서의 Secret 노출 실태 정량화

본 연구는 Vercel에서 호스팅되는 환경에서 실제로 얼마나 많은 위험한 Secret이 노출되고 있는지 정량적으로 파악하고자 수행되었습니다. 실제 운영 중인 사이트를 대상으로 대규모 식별 및 필터링 과정을 거쳐 프론트엔드 코드를 심층 분석한 결과, 악용 가능한 AWS 및 Stripe Secret 등 다양한 유형의 Secret이 상당수 노출된 것을 발견했습니다. 본 보고서는 연구 방법론, 발견된 Secret 노출 수치와 유형, 잠재적 위험, 그리고 문제 해결 및 예방을 위한 실질적인 방안을 공유합니다.

Next.js 환경 변수 규칙과 Vercel 자동 배포의 결합 위험

Vercel의 빠른 개발 속도는 환경 변수 처리와 같이 세밀한 설정과 정확한 이해가 필요한 부분에서 실수를 유발하기 쉽습니다. 특히 Next.js는 클라이언트 측 노출 방지를 위해 환경 변수 이름 앞에 NEXT_PUBLIC_ 접두사 규칙을 사용합니다. 개발자가 이 규칙을 오용하여 서버 전용 Secret(예: AWS Secret Key)에 실수로 NEXT_PUBLIC_ 접두사를 붙이면, Vercel 빌드 시 해당 Secret의 실제 값이 클라이언트 JavaScript 번들에 포함되어 즉시 운영 환경에 배포될 위험이 크게 증가합니다. 편리한 자동 배포 시스템과 환경 변수 규칙이 결합될 때, 개발자의 부주의나 설정 오류는 심각한 Secret 유출 사고로 이어질 수 있으며, 이는 플랫폼과 프레임워크의 특정 기능들이 상호작용하며 의도치 않은 위험을 증폭시키는 시스템적 위험 요소가 존재함을 보여줍니다.

다이어그램: NEXT_PUBLIC_ 접두사는 API 키를 노출시켜 해커에게 취약하게 만듭니다.

2. 공격 표면 분석: Vercel 호스팅 식별 및 실제 운영 환경 필터링

공유 인프라의 익명성과 탐색의 어려움

Vercel과 같은 플랫폼은 애니캐스트(Anycast) IP 주소 등 공유 인프라를 광범위하게 사용하므로, 특정 웹사이트나 전체 호스팅 목록을 찾아내기 어렵습니다. 예를 들어, Vercel의 대표 IP 주소 76.76.21.21에는 수십만 개의 도메인이 호스팅될 수 있습니다. 복잡한 DNS 라우팅과 IP 주소 할당은 플랫폼 내부적으로 관리되어 단일 IP 정보만으로는 식별이 어렵습니다.

탐색 방법론: OSINT 기법의 복합적 활용

Vercel에 호스팅된 사이트들을 대규모로 식별하기 위해 공개 출처 정보 수집(OSINT) 기법들을 복합적으로 활용했습니다. 

첫째, Vercel 사용 IP 주소(예: 76.76.21.21, 76.76.21.0/24)를 시작점으로 IPinfo.io, MxToolbox 등 도구를 사용해 매핑된 도메인 목록을 대량 수집했습니다. 

76.76.21.21 IP 조회 결과: 위치, ASN, 회사(Vercel), 태그 표시.

둘째, 이렇게 얻은 도메인 기반으로 SecurityTrails, OWASP Amass, Subfinder, crt.sh 등 다양한 도구를 활용해 서브도메인 탐색을 광범위하게 수행했습니다. 이 도구들은 인증서 투명성 로그, DNS 레코드, 웹 아카이브 등 다양한 출처 정보를 활용합니다. 

SecurityTrails 76.76.21.21 리버스 IP 조회: 호스팅된 도메인 및 공급자 목록.

마지막으로, 수집된 목록에서 Vercel의 특징적인 CNAME 레코드(cname.vercel-dns.com)나 특정 A 레코드(예: 76.76.21.21)를 확인하고, 추가로 HTTP 응답 헤더나 소스코드에서 Vercel 또는 Next.js 흔적을 탐색하여 정확성을 높였습니다..

결과: 4만 개 잠재 호스트 식별 및 6천여개 실 서비스 분석 대상 필터링

초기에는 약 40,000개의 잠재적 호스트 목록을 식별했으나, 만료된 도메인, 중단된 프로젝트, 임시 프리뷰 배포, 잘못된 DNS 설정 등 실제 운영되지 않거나 분석 불가능한 대상이 다수 포함되어 있었습니다. 연구 결과의 정확성과 실질적인 위험 평가를 위해, 이 중 실제로 도메인이 유효하고, 웹 서버가 응답하는 약 6,657개의 활성 도메인을 최종 분석 대상으로 필터링했습니다.

공격자의 시선으로, 공유 인프라는 대량 탐색의 기회

본 연구에서 사용된 OSINT 기법들은 실제 공격자들이 목표 시스템 정찰에 사용하는 표준 방법입니다. Vercel과 같은 PaaS 플랫폼의 공유 IP나 표준 DNS 패턴(cname.vercel-dns.com)은 역설적으로 공격자들에게 대량의 잠재적 공격 대상을 쉽게 발견할 기회를 제공합니다. 공격자들은 자동화된 도구를 사용해 이러한 특성을 활용하여 Vercel 호스팅 웹사이트를 대규모로 식별하고, 그중 Secret 유출과 같은 취약점을 가진 활성 타겟을 효율적으로 찾아낼 수 있습니다. 플랫폼의 효율성을 위한 아키텍처 설계 자체가 오히려 매력적인 대규모 공격 벡터 탐색 공간이 되는 것입니다.

3. JavaScript 번들 내 숨겨진 Secret 탐지 기법과 정확성의 중요성

JavaScript 번들 분석 과정

필터링된 6,657개의 활성 서비스들에 대해, 최종 사용자 브라우저에 전달되는 프론트엔드 JavaScript 파일들을 다운로드하여 심층 분석했습니다. 웹사이트를 자동으로 방문하여 .js 파일 링크를 추출하고 다운로드했으며, 동적으로 로드되는 콘텐츠까지 포함하기 위해 SeleniumBase 라이브러리와 Chrome DevTools Protocol (CDP) 모드를 활용한 브라우저 자동화를 수행했습니다.

아래는 CDP 모드를 통한 Script 파일들과 document 파일들의 내용을 읽는 예제 코드 입니다.

자바스크립트 코드: case 문 내 fetch 요청에 Etherscan API 키가 하드코딩되어 노출됨.

탐지 기법: 단순 패턴 매칭의 한계와 검증 기반 접근 방식

과거에는 주로 정규 표현식(regex) 기반 패턴 매칭으로 알려진 Secret 형식(AWS 키, Stripe 키 등)을 탐지했습니다. 하지만 이 방식은 오탐(false positive) 비율이 매우 높아 실제 Secret이 아닌 문자열(Git 커밋 해시, UUID 등)을 잘못 탐지하는 문제가 심각합니다. 이는 경고 피로(alert fatigue)를 유발하여 실제 위협을 놓치게 만들 수 있습니다.

본 연구에서는 단순 패턴 매칭을 넘어, Cremit의 CLI 도구 등을 활용하여 발견된 잠재적 Secret 문자열의 유효성(validity)행동(Behavior) 가능성을 확인하는 검증 기반 접근 방식을 채택했습니다. 이는 정교한 패턴 매칭, 엔트로피 분석, 컨텍스트 분석뿐만 아니라, 발견된 키 후보를 사용하여 실제 서비스(AWS, Stripe 등) API를 안전하게 호출하여 유효성 및 권한 범위를 확인하는 능동적 검증(active validation)을 포함할 수 있습니다. 예를 들어, AWS 키 후보 발견 시 AWS STS API(GetAccessKeyInfo, GetCallerIdentity)를 호출하여 유효성 및 권한을 확인합니다. 이를 통해 실제 악용 가능한 유효한 Secret만을 정확하게 식별하여 보고함으로써, 불필요한 오탐으로 인한 시간 낭비와 피로도를 줄이고 실제 위험에 집중할 수 있습니다.

Secret 스캔 기술은 단순 탐지(detection)에서 검증(validation) 및 컨텍스트 분석으로 진화하고 있습니다. 빠른 개발 환경과 공격자들의 신속한 악용 시도를 고려할 때, 빠르고 정확하게 '실제 위험'만을 식별하는 능력이 중요하며, 유효성/권한 검증은 Secret 스캔 솔루션의 핵심 가치를 '찾는 것'에서 '검증하고 우선순위를 정하는 것'으로 변화시키고 있습니다.

활용 도구 및 기술

Secret 탐지에는 Gitleaks, Yelp/detect-secrets, TruffleHog, Semgrep 등 다양한 오픈소스 및 상용 도구가 활용될 수 있습니다. GitHub, GitLab 등도 자체 Secret 스캔 기능을 제공합니다. JS Snitch와 같은 도구는 원격 JavaScript 스캔에 특화되어 있습니다. 이러한 도구들은 종종 CI/CD 파이프라인이나 Git 사전 커밋 후크(pre-commit hook)에 통합되어 예방적인 조치로 활용됩니다. 본 연구에서는 특정 도구 의존보다는 다양한 탐지 원리(패턴 매칭, 엔트로피, 키워드)와 검증 기법을 종합적으로 고려하고, 대용량 처리와 프로그래밍한 접근을 위해 Cremit의 서비스와 CLI 도구를 같이 활용했습니다.

정확한 Secret 탐지는 운영 효율성과 보안 대응 속도에 직접적인 영향을 미칩니다. 오탐 처리에 시간을 허비하는 동안 실제 유출된 키가 공격자에 의해 악용될 수 있습니다. 유효성 검증을 통해 실제 위험만을 정확하게 식별하는 능력은 제한된 시간 내 효과적인 위협 대응을 위한 필수 요소입니다.

4. 연구 결과: Vercel 환경에서의 Secret 노출 현황 분석

발견: 6,657개 중 0.45%에서 실제 Secret 유출 확인

실제 운영 중인 6,657개 Vercel 호스팅된 서비스들을 분석 결과, 약 0.45%에 해당하는 사이트(30개)에서 실제 운영 환경 사용 또는 민감 데이터 접근 권한을 가진 유효한 Secret 키가 프론트엔드 코드 내에 노출된 것을 확인했습니다.

이 0.45% 비율은 몇 가지 중요한 의미를 가집니다. 첫째, 실제 운영 중인 활성 서비스를 대상으로 한 현실적인 위험을 반영합니다. 둘째, 분석된 샘플 내(전체 Vercel 70만개가 넘는 호스트 사이트가 아닌)에서만 30개 웹사이트가 심각한 보안 위험에 노출되어 있다는 것을 의미합니다. 셋째, 각 유출 사례는 잠재적으로 상당한 금전적 손실, 데이터 유출, 서비스 중단 등 심각한 보안 사고로 이어질 수 있어 발생 시 영향이 매우 클 수 있습니다. 마지막으로, 사용한 탐지/검증 방법론을 고려할 때 실제 노출 규모는 더 클 수 있는 보수적인 추정치입니다. 발생 빈도는 낮아 보일 수 있으나, 각 유출의 잠재적 파급력을 고려할 때 간과할 수 없는 위험입니다.

노출된 Secret 유형과 심각성

분석 과정에서 발견된 Secret의 종류는 매우 다양했으며, 각 Secret이 가지는 잠재적 위험성의 수준 또한 천차만별이었습니다. 발견된 Secret 유형은 크게 상대적으로 가치가 낮은 유틸리티성 API 키와 높은 가치의 중요 자격 증명으로 분류할 수 있습니다.

상대적으로 가치가 낮은 유틸리티성 API 키에는 날씨 정보 제공 API(예: OpenWeatherMap), IP 주소 기반 위치 정보 API(예: IPinfo.io), 블록체인 데이터 조회 API(예: Etherscan API) 등이 포함됩니다. 이러한 키들의 유출은 주로 해당 서드파티 서비스의 사용량 제한 초과로 인한 일시적인 서비스 장애를 유발하거나, 사용량 기반 과금 정책을 사용하는 경우 약간의 추가 비용 발생 문제로 이어질 수 있습니다. 데이터 유출이나 시스템 장악과 같은 심각한 보안 위험으로 직접 연결될 가능성은 상대적으로 낮지만, 서비스 가용성에 영향을 줄 수 있으므로 여전히 관리가 필요합니다. 

자바스크립트 코드: 하드코딩된 GitHub PAT(개인용 액세스 토큰)가 변수에 할당됨.

반면, 높은 가치의 중요 자격 증명에는 GitHub 토큰, AWS Secret Access Key, Stripe Secret Key (sk_live_...) 또는 Restricted Key (rk_live_...) 등이 해당하며, 이는 핵심적인 위험 요소입니다. GitHub 토큰은 개인 또는 조직의 코드 저장소 접근 권한을 부여하여 소스 코드 유출, 악성 코드 삽입을 통한 공급망 공격, CI/CD 파이프라인 조작 등 심각한 지적 재산 손실 및 추가 보안 침해로 이어질 수 있습니다. 

자바스크립트 코드: 하드코딩된 GitHub PAT(개인용 액세스 토큰)가 변수에 할당됨.

AWS Secret Access Key는 클라우드 인프라 자원(EC2, S3, RDS 등)에 대한 프로그래밍 방식 접근 권한을 제공하며, 유출된 키의 IAM 권한 범위에 따라 단순 S3 접근부터 전체 클라우드 계정 관리 권한 탈취까지 가능하여 상당한 금전적 손실(예: 암호화폐 채굴 악용)과 데이터 유출 또는 파괴를 초래할 수 있습니다. 

자바스크립트 코드: 소스에 하드코딩된 AWS 자격 증명(액세스 키 ID 및 비밀 액세스 키) 표시.

Stripe Secret Key 또는 Restricted Key는 Stripe 계정을 통해 직접적인 금융 거래(결제, 환불)를 수행하고 민감한 고객 PII 및 결제 데이터에 접근할 수 있는 강력한 권한을 부여합니다. 유출 시 사기 거래를 통한 자금 탈취, 고객 데이터 대량 유출(법적 책임, 신뢰도 하락), 서비스 중단 등 비즈니스 운영에 치명적인 금전적, 법적, 평판상의 손해를 입힐 수 있습니다. 특히, 권한 범위를 제한하여 생성된 Restricted Key(rk_live_)라 할지라도 여전히 민감한 작업 수행이 가능하여 프론트엔드 노출 시 매우 위험합니다. 

리액트 코드: 노출된 Stripe 비밀 라이브 키(sk_live_...)로 초기화 수행.

이러한 '높은 가치의 중요 자격 증명'들은 식별자 역할을 하는 AWS Access Key ID (AKIA...)나 프론트엔드용 Stripe Publishable Key (pk_live_...)와는 근본적으로 다른 차원의 위험성을 가집니다. 본 연구는 서버 측에서만 사용되어야 하는 AWS Secret Access Key나 Stripe Secret/Restricted Key 유출을 심각하게 다룹니다.

표 4.1: 발견된 Secret 유형 요약 

 

카테고리

Secret 유형 예시

잠재적 영향

연구에서 발견됨

저가치/유틸리티

OpenWeatherMap API Key

날씨 API 서비스 사용량 초과/차단, 약간의 비용 발생

7개 발견

저가치/유틸리티

IPinfo.io API Key

IP 위치 정보 API 서비스 사용량 초과/차단, 약간의 비용 발생

3개 발견

저가치/유틸리티

Etherscan API Key

블록체인 데이터 조회 API 사용량 초과/차단

1개 발견

고가치/중요

GitHub Token

소스코드 유출/조작, CI/CD 파이프라인 침해

22개 발견

고가치/중요

AWS Secret Access Key

클라우드 인프라 장악, 데이터 유출/파괴, 상당한 비용 발생

4개 발견

고가치/중요

Stripe Secret Key (sk_live_)

금융 사기, 고객 PII 유출, 자금 탈취, 서비스 중단

2개 발견

 

'고가치/중요' 자격 증명의 발견은 심각한 보안 관리 개선 필요성을 나타냅니다.

위험의 일상화? 보안 인식 부족과 구조적 문제의 증거

프론트엔드에서 실제 운영 환경 Secret, 특히 핵심 자격 증명이 발견된다는 사실은 일부 개발팀/조직 내 기본적인 보안 원칙이 심각하게 간과되고 있음을 시사합니다. 이는 개인의 실수를 넘어 조직적인 인식 부족이나 관리 미흡의 증거일 수 있습니다. AWS, Stripe 등 서비스 제공 업체들은 공식 문서에서 클라이언트 측 코드에 민감 키 포함 금지를 명확히 경고함에도 실수가 발생하는 것은 개발 속도 우선 문화, 교육 및 인식 부족, 부실한 검토 프로세스, 자동화된 안전장치 부재, 개발자 경험(DX)의 역설 등 구조적인 문제들이 존재할 가능성을 시사합니다.

결국, 프론트엔드 Secret 노출은 개인 부주의를 넘어 조직의 보안 문화, 개발 프로세스, 교육, 기술적 안전장치 등 여러 요소가 복합적으로 작용한 결과일 가능성이 높으며, '보안은 모두의 책임' 원칙이 제대로 실현되지 못하고 있음을 보여줄 수 있습니다.

5. 유출된 Secret의 파괴력: 실제 비즈니스에 미치는 영향

API 키 유출 위험: AWS (시스템 다운), Stripe (사기), GitHub (데이터/코드 손실).

유출된 Stripe Secret (sk_live)

유출된 Stripe Secret/Restricted Key는 즉각적이고 심각한 피해를 입힐 수 있습니다. 공격자는 탈취한 키로 Stripe API를 호출하여 직접적인 금전 탈취(사기성 결제 생성, 반복 요금 부과, 무단 환불 처리, 은행 계좌 정보 변경 시도 등 , 민감 데이터 유출(고객 PII 대량 유출로 인한 법적 책임 및 신뢰도 손상, 그리고 서비스 조작 및 중단(상품 정보 임의 조작, 웹사이트 운영 방해, Stripe 계정 정지)과 같은 다양한 악의적인 활동을 수행할 수 있습니다.

유출된 AWS Secret Access Key의 광범위한 위협

유출된 AWS Secret Access Key의 피해 범위와 심각성은 해당 키에 연결된 IAM 사용자/역할 권한에 따라 달라집니다. 최소 권한 원칙이 지켜지면 피해가 제한될 수 있으나, 관리자 수준 권한이면 거의 모든 종류의 피해가 가능합니다.

공격자는 키 탈취 후 sts:GetCallerIdentity 등으로 권한을 파악하는 정찰 활동을 수행한 뒤, 파악된 권한을 바탕으로 상당한 금전적 손실 유발(고성능 EC2 대량 실행을 통한 암호화폐 채굴, 핵심 데이터 유출, 변조, 파괴(S3, RDS, DynamoDB 데이터 유출/수정/삭제, 추가 침투 및 권한 상승(Lateral Movement & Privilege Escalation을 통한 접근 권한 확장 및 지속적 접근 경로 확보), 그리고 인프라 설정 변경(보안 그룹 규칙 변경, VPC 구성 변경, Lambda 코드 수정 등 과 같은 다양한 악의적 활동을 시도할 수 있습니다.

공격자들은 노출된 AWS 키를 매우 빠르게(때로는 몇 분 내) 자동으로 탐지하여 악용합니다. AWS의 경고 시스템이 있지만, 그 전에 피해가 발생할 수 있습니다.

클라우드 환경: 피해 범위의 증폭

AWS, Stripe 등 클라우드 서비스 API 키 유출은 단일 기능 마비 이상입니다. 클라우드 환경은 수많은 서비스(컴퓨팅, 스토리지, DB 등)와 데이터가 긴밀히 연결되어 있어, 하나의 고수준 권한 자격 증명(Secret Key) 탈취 시 해당 계정 아래 거의 모든 자산이 동시 위험에 처합니다. 이는 전통적 온프레미스 환경보다 "폭발 반경(blast radius)"이 훨씬 큽니다.

유출된 AWS 키 하나로 EC2, S3, RDS, Lambda, VPC, IAM 등 다수 서비스 접근/조작이 가능하며, Stripe Secret Key는 결제, 고객 정보, 상품, 구독, 정산 등 광범위한 금융/비즈니스 기능 접근에 사용될 수 있습니다. 공격자들은 초기 접근 후 정찰(Reconnaissance), 측면 이동(Lateral Movement), 권한 상승(Privilege Escalation)을 통해 점차 접근 범위를 확장하여 환경 전체 장악이나 최대 피해를 목표로 합니다. 따라서 클라우드 환경 Secret 키 유출은 기업 운영에 심각한 차질을 줄 수 있는 잠재적 위험으로 인식하고, 개별 자격 증명 보호를 넘어 전체 시스템 상호 연결성을 고려한 '시스템적 방어' 관점에서 접근해야 합니다.

6. 왜 민감 정보는 프론트엔드로 유출되는가?

프론트엔드 Secret 노출 사고는 단일 원인보다는 다양한 기술적, 절차적, 문화적 요인이 복합적으로 작용한 결과일 수 있습니다. 주요 원인으로는 환경 변수 관리의 실패, 복잡한 빌드 프로세스에 대한 무관심, Git 커밋 실수, 보안 인식 부족, 그리고 프레임워크 자체의 함정 등이 있습니다.

환경 변수 관리 실패는 가장 흔한 직접적 원인 중 하나입니다. Next.js의 NEXT_PUBLIC_ 접두사 규칙을 오용하여 서버 전용 Secret에 실수로 이 접두사를 붙이면 실제 값이 클라이언트 번들에 포함됩니다 

또한, 구 버전 Next.js의 next.config.js 설정 오류나, Secret이 포함된 .env 파일을 .gitignore 누락으로 Git에 커밋하는 관리 부실, 그리고 환경 변수 자체의 부적절한 Secret 관리 방식(평문 저장, 노출 가능성, 체계적 관리 어려움)도 원인이 됩니다.

안전하지 않은 Next.js 구성: 모든 process.env 변수를 클라이언트 측에 노출.

복잡한 빌드 프로세스와 그에 대한 무관심도 문제를 일으킵니다. 빌드 도구가 환경 변수 참조를 실제 값으로 대체하는 과정(Inlining)에서 서버 전용 Secret이 클라이언트 번들에 하드코딩될 수 있으며, 코드 제거(Code Elimination) 기능이 완벽하게 작동하지 않아 서버 전용 코드가 클라이언트 번들에 남아 유출될 수도 있습니다.

Git 커밋 실수는 Secret이 포함된 파일을 Git 저장소(특히 공개 저장소)에 직접 커밋하는 명백한 원인입니다. .gitignore 설정 오류나 누락이 주된 이유지만, 비공개 저장소도 접근 권한 관리 부실 시 위험합니다. 공격자들은 자동화된 도구로 GitHub 등을 스캔하여 유출된 Secret을 빠르게 탐색하고 악용합니다.

기술적인 실수 외에도, 개발자나 관련 담당자의 근본적인 보안 인식 부족이 Secret 유출의 원인이 되는 경우가 많습니다. 프론트엔드 코드의 본질적인 공개성을 간과하거나, 사용 중인 프레임워크/플랫폼의 안전한 Secret 관리 방법에 대한 이해가 부족하거나, "프론트엔드는 어차피..."라는 안일한 태도로 보안보다 편의성을 우선시하는 경향이 있습니다.

Next.js와 같은 최신 풀스택 프레임워크가 제공하는 고급 기능들은 클라이언트와 서버 코드의 경계를 유연하게 만들지만, 개발자가 실행 컨텍스트(클라이언트, 서버, 빌드 시점)를 명확히 이해하지 못하면 혼란을 야기하고 보안 실수로 이어질 수 있습니다. 서버에서만 실행되어야 할 Secret 처리 로직을 실수로 클라이언트 컴포넌트에 작성하거나, 잘못된 데이터 페칭 전략을 사용하는 경우가 이에 해당합니다. 프레임워크의 추상화 기능이 오히려 기본적인 보안 원칙을 간과하게 만들 수 있으므로, 동작 방식과 실행 컨텍스트의 정확한 이해가 필수적입니다.

특히 NEXT_PUBLIC_ 접두사 규칙은 원래 통제된 정보 노출을 위해 설계되었지만, 개발자가 민감한 Secret을 클라이언트에서 직접 사용해야 한다고 잘못 판단하고 이 접두사를 붙이면, 해당 Secret 값이 그대로 공개되어 유출 사고의 주범이 되는 역설적인 상황이 발생합니다. 편리함을 위해 만들어진 기능이 오용될 때 심각한 보안 취약점을 만드는 것입니다.

7. 방어 전략: Secret 노출 방지를 위한 다층적 접근법

프론트엔드 Secret 노출이라는 심각한 보안 위협을 방지하고 안전한 웹 애플리케이션을 구축하기 위해서는 단일 해결책에 의존하기보다는, 아키텍처 설계부터 코드 작성, 빌드/배포 파이프라인, 운영 환경 설정, 지속적인 모니터링에 이르기까지 다층적인 방어 전략을 수립하고 실행해야 합니다.

가장 기본적이고 절대적으로 지켜야 할 철칙은 Secret은 서버에만 보관하는 것입니다. AWS Secret Access Key, Stripe Secret/Restricted Key, DB 비밀번호 등 민감 자격 증명은 절대로 프론트엔드 코드에 포함되거나 클라이언트가 직접 접근 가능한 형태로 노출되어서는 안 됩니다. 모든 민감 정보 처리 및 외부 서비스 인증은 신뢰할 수 있는 서버 측 환경(백엔드 API, 서버리스 함수 등)에서 수행되어야 합니다.

안전한 환경 변수 관리 또한 중요합니다. 서버 전용 변수와 클라이언트 노출 가능 변수를 명확히 구분하고, Next.js의 NEXT_PUBLIC_와 같은 접두사는 Google Analytics ID처럼 비민감 설정값에만 매우 제한적으로 사용해야 합니다. Vercel 플랫폼 사용 시에는 대시보드/CLI를 통한 환경 변수 관리가 권장되며, 프로덕션/프리뷰/개발 환경별 분리 설정 기능을 활용하고, 중요 Secret에는 "민감(Sensitive)" 옵션을 활성화하는 것이 좋습니다. 또한, Secret 포함 가능성이 있는 .env 파일은 반드시 .gitignore에 추가하여 커밋을 방지해야 합니다.

아키텍처 수준에서는 Backend-for-Frontend (BFF) 또는 API 프록시 패턴을 도입하는 것이 근본적인 해결책이 될 수 있습니다.

BFF(Backend for Frontend) 패턴 설명 순서도: 클라이언트 -> BFF 서버 -> 백엔드.

이 패턴에서는 프론트엔드가 직접 외부 API를 호출하는 대신 전용 백엔드 서버(BFF)와 통신합니다. 모든 민감 Secret은 BFF 내부에 안전하게 보관되며, 외부 서비스 호출은 BFF가 대신 수행합니다. 이를 통해 Secret을 프론트엔드로부터 완전히 격리하고, API 응답을 최적화하며, 관심사를 분리하여 개발 효율성을 높일 수 있습니다.

환경 변수를 주입하는 방식과 관련하여, 빌드 시점 주입의 위험성을 인지하고 필요시 런타임 처리를 고려해야 합니다. NEXT_PUBLIC_ 등을 통한 주입은 빌드 시점에 값이 결정되어 코드에 하드코딩되므로 빌드 후 변경이 불가능합니다. 스테이징/프로덕션 환경에서 동일 빌드 결과물을 사용하며 환경별 다른 설정 적용이 필요하다면, 서버 측 런타임 환경 변수 사용, 동적 설정 로딩, 커스텀 서버 또는 초기화 로더 구현 등 런타임 처리 방식을 고려해야 합니다. 요구사항, 배포 전략, 민감도를 고려하여 가장 적합한 방식을 신중하게 선택해야 합니다.

더 높은 수준의 보안과 관리 효율성을 위해서는 전문 Secret 관리 솔루션의 도입을 적극적으로 고려해야 합니다. HashiCorp Vault, AWS Secrets Manager, Google Cloud Secret Manager, Azure Key Vault, Doppler, Infisical 등 다양한 솔루션은 Secret의 중앙 집중 관리, 강력한 접근 제어(RBAC), 자동 순환(Rotation), 상세 감사 로그, 저장 시 암호화, "Secret Zero" 문제 해결 지원, 플랫폼/도구 통합 등 강력한 기능을 제공하여 환경 변수 방식의 한계를 보완하고 보안 태세를 강화하는 데 도움을 줍니다.

마지막으로, 사람의 실수를 보완하기 위해 자동화된 Secret 스캔을 도입하고 구성 관리에 주의를 기울여야 합니다. Gitleaks, detect-secrets, TruffleHog 등 스캔 도구를 CI/CD 파이프라인에 통합하여 빌드/배포 전 단계에서 Secret 탐지 시 프로세스를 실패시키고, 개발자 로컬 환경에 사전 커밋 후크(Pre-commit Hooks)를 설정하여 커밋/푸시를 원천 방지하는 것이 효과적입니다. 

이때 오탐 비율이 낮은 정확성 중심의 도구(예: 유효성 검증 기능이 있는 Cremit)를 선택하는 것이 중요합니다. 또한, GitHub/GitLab 등의 내장 스캔 기능 활성화 및 GitGuardian과 같은 전문 모니터링 서비스를 활용하여 지속적으로 저장소를 모니터링하는 것도 좋은 방법입니다. Vercel 등 플랫폼 설정 옵션을 정확히 이해하고 신중하게 구성하는 것 역시 필수적입니다.

대시보드 UI: 필터, 마스킹된 세부 정보, 상태와 함께 탐지된 비밀 목록 표시.

결론적으로, 효과적인 Secret 관리는 안전한 아키텍처 설계, 신중한 환경 변수 및 구성 관리, 전문 솔루션 활용 및 플랫폼 설정 주의, 자동화된 검증 통합, 지속적인 개발자 교육 등 다층적인 접근 방식을 종합적으로 적용할 때 비로소 달성 가능합니다.

8. 결론: Non-Human Identity(NHI) 보안 관리의 시급성

프론트엔드 Secret 유출: 이론이 아닌 현실적 위협

본 연구는 Vercel에서 호스팅 하는 서비스들의 약 0.37%에서 검증된 Secret 유출 발견을 통해, 프론트엔드 Secret 노출이 더 이상 이론적 가능성이나 드문 사례가 아님을 정량적으로 보여주었습니다. 특히 SPA, Vercel, Next.js 등 현대적 개발 도구/플랫폼의 편리함 이면에는 환경 변수 관리 복잡성, 빌드 프로세스 함정, 클라이언트/서버 경계 모호성 등 개발자가 의도치 않게 심각한 보안 실수를 저지를 수 있는 새로운 위험 요인이 내재되어 있음을 확인했습니다.

노출된 Secret은 단순 문자열이 아닌 Non-Human Identity(NHI)

연구에서 발견된 AWS Secret Access Key, Stripe API Key, GitHub PAT 등은 단순 데이터 조각이 아닌, 시스템, 애플리케이션, 스크립트 등 '기계'/'소프트웨어'가 다른 시스템과 상호작용 시 자신을 인증하고 권한을 부여받는 Non-Human Identity (NHI), 즉 기계 정체성입니다. 사람 사용자 계정처럼 NHI에도 특정 역할과 권한이 부여됩니다.

따라서 NHI(Secret) 유출은 정보 노출을 넘어, 해당 정체성에 부여된 모든 권한과 능력이 공격자에게 탈취될 수 있음을 의미합니다. 이는 기업 핵심 클라우드 인프라, 금융 시스템, 소스 코드, 민감 데이터 등에 대한 무단 접근, 조작, 파괴로 직접 이어질 수 있는 매우 심각한 보안 위협입니다. 단 하나의 강력한 NHI 탈취로 기업 전체 운영이 마비되거나 상당한 손실을 입을 수 있습니다.

NHI 보안: 현대 개발 환경의 필수 불가결 요소

프론트엔드 코드와 같이 부적절한 위치에 NHI(Secret)가 노출되는 현상은 개발 프로세스와 배포 파이프라인 전반에 걸쳐 NHI 관리가 제대로 이루어지지 않고 있음을 보여주는 단적인 예입니다. 많은 조직이 개발 속도와 기능 구현 편의성에 집중한 나머지, 애플리케이션과 인프라를 연결하는 수많은 NHI의 생성부터 저장, 최소 권한 부여, 유효기간 관리/순환, 폐기에 이르는 전체 라이프사이클 관리에 소홀해지기 쉽습니다.

안전한 소프트웨어 공급망과 견고한 클라우드 네이티브 환경 구축을 위해서는 코드 자체 보안성 확보와 더불어, 이를 실행하고 서비스들을 연결하는 수많은 NHI에 대한 철저하고 체계적인 보안 관리 체계 구축이 필수적입니다. 개발 초기부터 배포, 운영, 폐기까지 모든 NHI를 식별, 분류, 보호하고 사용 현황과 활동 내역을 지속적으로 모니터링 및 감사해야 합니다. 클라우드 환경과 자동화 확산으로 NHI 수가 기하급수적으로 늘어나고 있으며, 이들을 인간 사용자 계정만큼, 혹은 그 이상으로 철저히 관리하는 것이 현대 보안 패러다임의 핵심 과제입니다.

Cremit과 같은 솔루션은 코드 저장소, 구성 파일 등 환경 전반에 흩어진 NHI(Secret)를 정확하게 탐지하고, 유효성/권한 검증으로 오탐을 최소화하며, 중앙 집중적인 가시성과 관리 기능을 제공하여 의도치 않은 NHI 노출 위험을 효과적으로 관리하고 안전한 개발/운영 환경 유지에 기여합니다.

궁극적으로, 현대 애플리케이션과 클라우드 인프라의 전반적인 보안 수준은 Non-Human Identity를 얼마나 효과적으로 식별, 관리, 보호하는지에 크게 좌우됩니다. 본 연구 결과가 개발 커뮤니티와 기업들에게 NHI 보안의 중요성을 새롭게 인식시키고, 보다 안전한 개발 문화와 프로세스 구축, 관련 솔루션 도입 검토의 계기가 되기를 바랍니다.

AI 기반 인사이트를 활용하여 Non-Human Identity 위험을 완벽하게 관리하세요.

기본적인 데이터를 넘어, Non-Human Identity 위험을 선제적으로 완벽하게 관리하고 완화하는 데 필요한 실행 가능한 AI 기반 인사이트를 확보하세요.

Cremit NHI 대시보드: 출처 (GitHub) 및 이유 (이메일, 키) 별 비밀 및 민감한 데이터

Blog

더 많은 뉴스 및 업데이트 살펴보기

최신 사이버 위협과 주요 업계 보안 트렌드에 대한 최신 정보를 확인하세요.

Vercel 환경 프론트엔드 코드 내 Secret 노출사례 연구: AWS, Stripe, Github Key가 노출됨
Vercel 환경 연구에서 AWS/Stripe 키 등 중요 시크릿이 프론트엔드 코드에 노출된 것을 발견했습니다. 관련 위험과 원인, 예방책을 확인하세요.
OWASP NHI5:2025 과도한 권한 분석
OWASP NHI5: NHI 및 AI의 과도한 권한 심층 분석. 원인, 위험, 탐지 방법 및 CIEM, PaC, JIT 액세스와 같은 완화 전략을 알아보세요.
Lifecycle 관리를 넘어서: NHI 보안을 위해 지속적인 Secret 탐지가 필수적인 이유
비밀번호 순환과 같은 기존의 NHI(비인간 신원) 관리 방식만으로는 부족합니다. 현대 인프라 보안을 위해 선제적이고 지속적인 비밀 정보 탐지가 왜 필수적인지 확인해보세요.
OWASP NHI4:2025 불안전한 인증
OWASP NHI4: 안전하지 않은 인증 심층 분석. NHI의 위험성, 주요 취약점, 그리고 제로 트러스트(Zero Trust)가 시스템 보호에 어떻게 도움이 되는지 알아보세요.
배포 파이프라인 보안: 시크릿 탐지의 역할
소프트웨어 파이프라인에서 비밀 유출을 방지하세요. 비밀 감지가 어떻게 보안을 강화하고, 자격 증명 노출을 막고, CI/CD 워크플로우를 보호하는지 알아보세요. 민감한 데이터를 안전하게 유지하기 위한 모범 사례와 도구를 살펴보세요.
확장되는 AI 세계 탐색: MCP, A2A, 그리고 비인간 신원 보안의 중요성에 대한 심층 이해
AI 프로토콜 MCP와 A2A를 살펴보고, AI 에이전트의 잠재적 보안 위험과 점점 더 중요해지는 비인간 신원(NHI) 보안의 필요성을 알아보세요.
Secret 확산 방지: 효과적인 Secret 탐지를 위한 Shift Left 접근법
유출된 시크릿은 빠른 개발 환경에 위협이 됩니다. 시프트 레프트(Shift Left) 보안이 DevOps에 조기 시크릿 탐지를 통합하여 보안 침해를 막고 비용을 절감하는 방법을 알아보세요.
숨겨진 위험: S3 버킷의 시크릿(Secret) 탐지가 중요한 이유
S3 버킷에서 민감 정보를 탐지하기 위한 핵심 전략을 알아보세요. 노출된 NHI 자격 증명의 위험성과 선제적 스캔이 왜 필수적인지 이해하세요.
데이터 유출 비용 증가: Secret 탐지가 사이버 보안을 강화하는 방법
데이터 유출로 인한 증가하는 금융적 영향, secret 탐지의 핵심 역할, 그리고 민감한 데이터와 비즈니스 운영을 보호하기 위한 사이버 보안 전략을 알아보세요. 데이터 보안 위반의 비용이 계속 상승함에 따라 조직은 효과적인 비밀 탐지 도구를 통해 중요 정보를 안전하게 보호해야 합니다.
인간 대 비인간 인증 정보: 주요 차별점
인간과 비인간(Non-human) 디지털 정체성 간의 중요한 차이점을 탐구하고, 숨겨진 보안 위험을 드러내며 시크릿(Secret) 탐지의 중요성을 알아봅니다.
tj-actions/changed-files 침해 사건 - NHI 보안을 중심으로
tj-actions/changed-files 침해 사건은 CI/CD에서 비인간 신원(NHI)에 대한 위험을 노출시킵니다. 공격자가 어떻게 secret 탈취했는지, 그리고 선제적 조치로 NHI 보안을 강화하는 방법을 알아보세요.
코드의 이면: 숨겨진 Secret 식별을 위한 모범 사례
최신 Secret 탐지 기법으로 코드 보안을 강화하세요. 클라우드 환경에서 API 키, 토큰, 인증서를 안전하게 보호하는 전문가 전략을 만나보세요. 효율적인 코드 검사 및 자동화된 시크릿 관리로 개발 라이프사이클 보안을 높이세요.
OWASP NHI1:2025 - 부적절한 오프보딩: 알아보기
부적절한 오프보딩은 이러한 자격 증명을 노출시켜 취약점을 만듭니다. 주요 문제로는 공격 표면 확대, 마이크로서비스 및 AI 사용 증가로 인한 NHI 확산, 분산 관리, 프로덕션 시스템 중단 가능성 및 규정 준수 문제가 있습니다.
무분별한 확산을 막으세요: Cremit의 AWS S3 비인간 인증 정보 탐지 기능 소개신원 (NHI) 탐지 기능 도입
Cremit의 새로운 기능으로 AWS S3에서 비인간 신원를 감지하고 관리하세요. 가시성을 확보하고, 위험을 줄이고, 버킷을 보호하세요.
자체구축 vs. 구매: Secret 탐지를 위한 올바른 선택
Secret 탐지 솔루션 구축 시 자체 개발을 진행할지, 아니면 상용 솔루션을 도입할지 결정하기 어려우신가요? 전문가 가이드를 통해 내부 개발에 투입되는 리소스와 시간, 제공되는 기능의 범위, 그리고 상용 보안 플랫폼 도입을 통해 얻을 수 있는 비즈니스 가치(ROI)를 면밀히 비교 평가하여 조직에 가장 적합한 솔루션을 선택하세요.
바이비트 해킹 사건 분석: 암호화폐 거래소 보안, 어떻게 강화해야 할까요?
바이비트 해킹! 14억 달러 암호화폐 탈취 사건 발생! Safe{Wallet} 취약점 악용, API 키 유출, AWS S3 버킷 침해 가능성... 암호화폐 거래소 보안, 지금 바로 점검하세요!
OWASP NHI2:2025 Secret 유출 - 위험 제대로 파악하고 안전하게 관리하기
NHI2 Secret 유출 사고의 잠재적 위협: API 키, 자격 증명 노출로 야기되는 다양한 위협을 인지하고, 무단 접근, 주요 데이터 유출, 시스템 마비 등의 심각한 결과를 초래할 수 있는 리스크를 사전에 방어하고 예방하기 위한 실질적인 방법을 배우고, 선제적인 보안 전략을 수립하세요.
OWASP NHI3:2025 위협 3 - 취약한 3rd Party NHI 이해하기
취약한 서드파티 비인간 신원(NHI3:2025)이 초래하는 심각한 보안 위험을 인지하고, 공급망 공격을 포함한 다양한 위협에 노출될 수 있는 귀사의 조직을 이 OWASP Top 10 위협으로부터 안전하게 보호하기 위한 포괄적인 보안 대책과 효과적인 전략을 배우고, 견고한 보안 환경을 구축하세요.
Nebula SaaS 버전을 출시합니다
정교한 UI/UX, 세분화된 액세스 제어, 감사 로그, 모든 규모의 팀을 위한 확장 가능한 계획을 포함하여 Nebula 정식 버전의 다양한 기능과 특장점을 자세히 살펴보세요.
Nebula 공개: 오픈소스 MA-ABE 시크릿 볼트
Nebula 개발자와 팀을 위해 세분화된 접근 제어, 향상된 보안, 그리고 시크릿 관리를 제공하는 오픈소스 MA-ABE 시크릿 볼트입니다.
조직 내 비인간 ID 보호를 위한 6가지 필수 실천 방안
인프라 보호를 위한 사전 예방적 조치: 안전한 저장소 설계, 엄격한 접근 제어 구현, 그리고 주기적인 갱신을 포함하는 6가지 모범 사례를 숙지하여 API 키, 비밀번호, 암호화 키와 같은 중요한 자산을 안전하게 관리하고, 보안 사고를 미연에 방지하는 방법을 배우세요.
Vigilant Ally: Github에 노출된 Secret 조치하기
Vigilant Ally 이니셔티브는 개발자들이 GitHub에서 API 키, 토큰, 그리고 중요한 자격 증명을 안전하게 관리하도록 적극적으로 지원하여, 보안 취약점을 사전에 예방하고 안전한 코딩 환경을 조성하며, 효과적인 비밀 관리 전략을 통해 소프트웨어 개발 라이프사이클 전반의 보안을 강화하는 데 기여합니다.
프론트엔드 코드에 숨어있는 크리덴셜 유출 위협
API 키 및 토큰과 같은 자격 증명(크리덴셜)이 접근 제어에 왜 중요하며, 이것이 노출될 경우 어떤 위험이 있는지 알아보고 애플리케이션과 시스템을 효과적으로 보호하세요.
Cremit, AWS SaaS 스포트라이트 프로그램에 합류
Cremit은 AWS SaaS 스포트라이트 프로그램에 참여하여 멘토링과 협업을 통해 심도 있는 통찰력을 확보하고, 최첨단 AI 기반 보안 솔루션 개발에 박차를 가하며, 클라우드 보안 분야의 혁신을 주도하는 데 중요한 발걸음을 내딛습니다.
크리밋의 새로운 Secret, NHI 탐색 엔진을 소개합니다!
Cremit Platform은 클라우드 도구 전반에서 노출된 자격 증명과 민감한 데이터를 탐지하고, 자동화된 검증 및 경고 기능을 제공하며, AI 기반 스캔을 통해 보안을 강화합니다.
OWASP NHI Top 10 위협 이해하기
NHI OWASP Top 10은 API, 서비스 계정, 키와 같은 비인간 식별 정보에 대한 10가지 주요 위험을 나타냅니다. 여기에는 취약한 인증, 과도한 권한을 가진 ID, 하드 코드된 Secret, 안전하지 못한 키 저장 등이 포함됩니다.
DevSecOps의 시작, Cremit
DevSecOps는 개발 과정에 보안을 통합하여, 자격 증명 확인부터 시작하여 취약점을 조기에 탐지하고 해결하며 규정 준수를 개선함으로써 전반적인 안전성을 지속적으로 향상시킵니다.
고객 인터뷰: ENlighten에서 얻은 인사이트
Cremit의 고객인 한국 최고의 에너지 IT 플랫폼인 ENlighten의 여진석 님과 자격 증명과 비밀을 어떻게 안전하게 관리하는지 인터뷰했습니다. 엔라이튼의 보안 접근 방식을 소개합니다.
Secret Detection이란?
오늘날 클라우드 환경에서 민감한 정보 보호는 조직의 최우선 과제입니다. Secret Detection은 핵심 도구인데, 정확히 무엇이며 클라우드 시대에 왜 필수적일까요?
마이크로소프트 Credential 유출 사고
마이크로소프트 직원의 실수로 촉발된 대규모 정보 유출 사건: 민감한 비밀 정보와 38테라바이트에 달하는 방대한 데이터가 노출된 원인을 철저히 규명하고, 이 사건을 통해 조직이 얻을 수 있는 중요한 교훈과 재발 방지를 위한 효과적인 보안 강화 방안을 모색해 보세요.
Secret 확산과 Non Human Identity: 증가하는 보안 문제
관리되지 않는 비인간 인증정보(NHI) 확산이 심각한 보안 초래하는 방식과, Cremit의 탐지 도구가 자격 증명 노출로부터 귀사를 보호하는 방법에 대해 자세히 알아보세요.