실험: 비공개 GraphQL 필드의 우연한 노출

발행: (2026년 1월 14일 오후 01:26 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

Lab Overview

이 랩의 사용자 관리 기능은 GraphQL 엔드포인트에 의해 구동됩니다. 접근 제어 취약점으로 인해 API가 개인 인증 정보 필드를 노출합니다. 목표는 관리자로 로그인하고 사용자 이름 carlos를 삭제하는 것입니다.

Lab link:

Accessing the GraphQL Endpoint

  1. My account 페이지를 열고 임의의 자격 증명으로 로그인을 시도합니다.
  2. 로그인 요청은 usernamepassword를 포함한 GraphQL 뮤테이션을 담은 POST /graphql 요청입니다.
  3. 뮤테이션은 인증에 실패하지만, 요청은 여전히 GraphQL 서버에 도달합니다.

Introspection

서버에 인트로스펙션이 활성화되어 있어 전체 스키마를 발견할 수 있습니다.

  1. 프록시(예: Burp Suite)에서 로그인 뮤테이션을 가로채세요.
  2. 가로챈 요청을 Repeater에 보냅니다.
  3. 요청 본문에서 오른쪽 클릭 → GraphQL → Set introspection query를 선택합니다.
  4. 요청을 전송합니다. 응답에 전체 스키마가 반환됩니다.

Tip: InQL 브라우저 확장 프로그램을 사용하면 스키마를 더 편리하게 볼 수 있습니다.

Exploiting the Vulnerability

getUser 쿼리에는 민감한 필드(username, password)가 포함되어 있습니다. 이를 조회하는 쿼리를 작성합니다:

query {
  getUser(id: 1) {
    username
    password
  }
}

이 쿼리를 /graphql 엔드포인트에 전송합니다(예: Repeater 또는 GraphQL 클라이언트를 사용). 응답에 관리자의 사용자 이름과 비밀번호가 드러납니다.

Solution

  1. 유출된 자격 증명을 사용해 관리자로 로그인합니다.
  2. 사용자 이름이 carlos인 사용자를 삭제합니다.

이제 랩이 완료된 것으로 표시됩니다.

0 조회
Back to Blog

관련 글

더 보기 »

graphql-complexity-validation 소개

✨ 특징 - 런타임 의존성 없음 - 완전 타입 지정된 TypeScript - fragments 및 inline fragments 지원 - 기본적으로 Introspection 무시 지원 대상: - Apollo…