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

발행: (2026년 1월 14일 오후 01:26 GMT+9)
3 min read
원문: 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인 사용자를 삭제합니다.

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

Back to Blog

관련 글

더 보기 »

Node.js 및 Express.js를 활용한 API 설계 모범 사례

소개: 대부분의 API가 규모를 확장하기 전에 실패하는 이유 🚨 오늘 작동하는 API를 만들 수 있지만… 내일은 여전히 ​​깨진 시스템을 구축하고 있을 수 있습니다. 많은 API가 실패하는 이유는…