실험: 비공개 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
- My account 페이지를 열고 임의의 자격 증명으로 로그인을 시도합니다.
- 로그인 요청은
username과password를 포함한 GraphQL 뮤테이션을 담은 POST/graphql요청입니다. - 뮤테이션은 인증에 실패하지만, 요청은 여전히 GraphQL 서버에 도달합니다.
Introspection
서버에 인트로스펙션이 활성화되어 있어 전체 스키마를 발견할 수 있습니다.
- 프록시(예: Burp Suite)에서 로그인 뮤테이션을 가로채세요.
- 가로챈 요청을 Repeater에 보냅니다.
- 요청 본문에서 오른쪽 클릭 → GraphQL → Set introspection query를 선택합니다.
- 요청을 전송합니다. 응답에 전체 스키마가 반환됩니다.
Tip: InQL 브라우저 확장 프로그램을 사용하면 스키마를 더 편리하게 볼 수 있습니다.
Exploiting the Vulnerability
getUser 쿼리에는 민감한 필드(username, password)가 포함되어 있습니다. 이를 조회하는 쿼리를 작성합니다:
query {
getUser(id: 1) {
username
password
}
}
이 쿼리를 /graphql 엔드포인트에 전송합니다(예: Repeater 또는 GraphQL 클라이언트를 사용). 응답에 관리자의 사용자 이름과 비밀번호가 드러납니다.
Solution
- 유출된 자격 증명을 사용해 관리자로 로그인합니다.
- 사용자 이름이 carlos인 사용자를 삭제합니다.
이제 랩이 완료된 것으로 표시됩니다.