5백만 앱이 밝혀낸 JavaScript 비밀

발행: (2026년 2월 17일 오후 11:40 GMT+9)
12 분 소요

Source: Bleeping Computer

침입자 검색 스크린샷

개요

유출된 API 키는 새로운 것이 아니지만, 프론트엔드 코드에서 문제의 규모는 대부분 미지의 영역이었습니다—지금까지.
Intruder’s 연구팀은 새로운 비밀 탐지 방법을 구축하고 5 million 개의 애플리케이션을 스캔했으며, 특히 JavaScript 번들에 숨겨진 비밀을 찾았습니다.

우리가 발견한 내용은 업계가 싱글 페이지 애플리케이션을 보호하는 방식에 큰 격차가 있음을 보여줍니다.

Source: https://www.intruder.io/research/secrets-detection-javascript?utm_source=bleepingcomputer&utm_medium=p_referral&utm_campaign=global%7Cfixed%7Csecrets_detection

42,000개의 비밀이 눈에 보이는 곳에 숨겨져 있음

우리의 새로운 탐지 방법을 대규모로 적용한 결과는 충격적이었습니다. 출력 파일만 해도 > 100 MB의 평문 데이터가 생성되었으며, 334가지 비밀 유형에 걸쳐 42 000개가 넘는 노출 토큰이 포함되어 있었습니다.

이것들은 저가의 테스트 키나 사용되지 않는 토큰이 아니었습니다. 우리는 프로덕션 코드에 삽입된 활성화된 중요한 자격 증명을 발견했으며, 이는 대부분의 조직이 의존하는 보안 제어를 효과적으로 우회했습니다.

아래는 우리가 발견한 가장 중요한 위험 요소들의 요약입니다.

코드‑레포지토리 토큰

가장 큰 영향을 미친 노출은 GitHubGitLab과 같은 코드‑레포지토리 플랫폼용 토큰이었습니다. 총 688개의 토큰을 찾았으며, 그 중 다수는 아직 활성화되어 전체 레포지토리 접근 권한을 부여하고 있었습니다.

예시: JavaScript 파일에 하드코딩된 GitLab 개인 액세스 토큰. 이 토큰은 조직 내 모든 비공개 레포지토리에 접근할 수 있도록 범위가 설정되어 있었으며, 하위 서비스(AWS, SSH 등)의 CI/CD 파이프라인 비밀도 포함하고 있었습니다.

GitLab personal‑access token embedded in JavaScript

프로젝트‑관리 API 키

또 다른 중요한 노출은 Linear라는 프로젝트‑관리 도구의 API 키가 프런트‑엔드 코드에 직접 삽입된 경우였습니다.

Linear API key exposed in front‑end code

이 토큰은 조직 전체 Linear 인스턴스에 대한 무제한 접근을 허용했으며, 내부 티켓, 프로젝트 및 하위 SaaS 서비스와의 연결까지 모두 제어할 수 있었습니다.

기타 노출된 비밀

다양한 추가 서비스에서도 비밀이 발견되었습니다:

  • CAD 소프트웨어 API – 사용자 데이터, 프로젝트 메타데이터 및 건축 설계(병원 포함) 접근 권한.
  • 이메일 플랫폼 – 메일링 리스트, 캠페인 및 구독자 데이터 접근 권한.
  • 채팅/자동화 플랫폼용 웹훅 – 활성화된 Slack 213개, Microsoft Teams 2개, Discord 1개, Zapier 웹훅 98개.
  • PDF 변환기 – 서드파티 문서 생성 도구 접근 권한.
  • 세일즈 인텔리전스 및 분석 플랫폼 – 수집된 기업 및 연락처 데이터 접근 권한.
  • 링크 단축기 – 짧은 링크를 생성하고 열거할 수 있는 권한.

핵심 요점: 소스 코드, 특히 프런트‑엔드 자산에 삽입된 비밀은 거대한 공격 표면을 형성합니다. 정기적인 자동 스캔, 비밀 관리 정책, 그리고 엄격한 CI/CD 위생 관리가 이러한 노출을 방지하는 데 필수적입니다.

Source:

왜 이러한 비밀이 놓치고 있을까?

전통적인 스캐너는 JavaScript를 “읽지 못한다”

애플리케이션 비밀을 자동으로 탐지하는 전통적인 접근 방식은 다음과 같습니다:

  1. 알려진 경로 집합을 검색한다.
  2. 정규 표현식을 적용해 알려진 비밀 형식을 매칭한다.

이 방법도 유용하지만 명확한 한계가 있으며, 특히 스캐너가 애플리케이션을 스파이더링하거나 인증을 해야 하는 경우와 같은 누출 유형을 모두 탐지하지 못합니다.

예시: Nuclei의 GitLab 개인 액세스 토큰 템플릿

스캐너에 기본 URL(예: https://portal.intruder.io/)을 제공하면 템플릿은:

  1. https://portal.intruder.io/에 HTTP GET 요청을 보낸다.
  2. 직접적인 응답만 검사하고, JavaScript 파일과 같은 다른 페이지 및 리소스는 무시한다.
  3. GitLab 개인 액세스 토큰 패턴을 식별하려 시도한다.
  4. 발견되면 GitLab 공개 API에 후속 요청을 보내 토큰이 활성 상태인지 확인한다.
  5. 활성이라면 이슈를 생성한다.

이 흐름은 템플릿이 비밀이 노출되는 일반적인 경로를 많이 정의했을 때는 잘 작동합니다. 하지만 이는 인프라 스캐너의 전형적인 동작 방식이며, 헤드리스 브라우저를 실행하지 않습니다. 따라서 브라우저가 요청할 리소스—예를 들어 JavaScript 번들 https://portal.intruder.io/assets/index-DzChsIZu.js—는 전혀 가져오지 못합니다.

“빌드 프로세스”의 사각지대

정적 애플리케이션 보안 테스트(SAST) 도구는 소스 코드를 분석해 취약점을 식별하며, 비밀이 프로덕션에 도달하기 전에 감지하는 주요 방법입니다. 하드코딩된 자격 증명을 잡아내는 데 뛰어납니다.

하지만 우리는 SAST가 전체 그림을 커버하지 못한다는 것을 발견했습니다. JavaScript 번들에 삽입된 일부 비밀은 정적 분석으로는 탐지할 수 없는 틈새를 통해 빠져나갑니다.

DAST의 딜레마

동적 애플리케이션 보안 테스트(DAST) 도구는 일반적으로 애플리케이션 스캔에 더 강력합니다. DAST는 다음을 수행할 수 있습니다:

  • 전체 사이트를 스파이더링한다.
  • 인증을 지원한다.
  • 애플리케이션 레이어의 다양한 취약점을 탐지한다.

이론적으로는 DAST가 프런트엔드에서 비밀을 탐지하는 자연스러운 선택이 될 수 있습니다. JavaScript 파일을 가져와 비밀을 스캔할 수 있기 때문입니다. 하지만 실제로는:

  • DAST는 비용이 많이 들고 광범위한 설정이 필요하다.
  • 일반적으로 소수의 고가치 애플리케이션에만 적용된다.
  • 많은 조직이 방대한 디지털 자산 전체에 대해 모든 애플리케이션에 DAST 스캐너를 설정하지 않는다.
  • 일부 DAST 도구는 전용 커맨드라인 비밀 스캐너가 제공하는 포괄적인 정규 표현식 세트를 갖추고 있지 않다.

결과적인 격차

다음 요소들의 조합이 비밀이 탐지되지 않은 채 남아 있는 명확한 사각지대를 만들고 있습니다:

  • JavaScript 자산을 가져오지 않는 전통적인 인프라 스캐너, 그리고
  • 번들된 코드에 대한 제한된 SAST 커버리지, 그리고
  • 드물게 혹은 설정이 부족한 DAST 배포

이 격차를 해소하려면, 전체 규모 DAST의 비용과 복잡성을 감당하지 않으면서도 JavaScript 번들을 효율적으로 분석할 수 있는 솔루션이 필요합니다.

Source:

비밀을 비밀로 유지하세요

Shift‑left 제어는 중요합니다. SAST, 리포지토리 스캔, IDE 가드레일은 실제 문제를 잡아내고 전체 노출 클래스를 방지합니다. 하지만 이 연구가 보여주듯, 이들은 비밀이 프로덕션에 도달할 수 있는 모든 경로를 커버하지는 못합니다.

빌드 및 배포 과정에서 도입된 비밀은 이러한 방어 수단을 우회하여 프런트‑엔드 코드에 남게 될 수 있습니다—Shift‑left 제어가 이미 실행된 뒤에도 말이죠. 자동화와 AI‑생성 코드가 보편화될수록 이 문제는 더욱 커질 것입니다.

그래서 싱글‑페이지‑애플리케이션(SPA) 스파이더링이 필요합니다. 비밀이 프로덕션에 도달하기 전에 잡아내기 위해서죠. 우리는 Intruder에 자동화된 SPA 비밀 탐지를 구축하여 팀이 실제로 이를 포착할 수 있게 했습니다.

Learn more

저자

Ben Marr – Security Engineer, Intruder

Ben은 Intruder에서 보안 엔지니어로 근무하며 공격적 보안 스캔을 자동화하고 보안 연구를 수행합니다. 그의 배경에는 OSWE 인증 침투 테스트와 PHP 소프트웨어 엔지니어링이 포함됩니다.

Sponsored and written by Intruder.

0 조회
Back to Blog

관련 글

더 보기 »