FixVibe

// 디스커버리 / 스포트라이트

GraphQL 인트로스펙션 노출

프로덕션의 인트로스펙션은 공격자에게 전체 타입 시스템을 그대로 넘겨주는 거예요.

What it is

GraphQL introspection is the spec's most developer-friendly feature and one of its most defender-unfriendly defaults. Send a query asking the server to describe itself, and a fully-introspected GraphQL endpoint dutifully returns every type, every field name and type, every argument, and (in many configs) every directive comment. It's how GraphiQL, Apollo Sandbox, and every modern GraphQL client tool work. It's also how attackers map your API in seconds. Apollo Server 4 disables introspection by default in production, but plenty of older deployments and self-rolled GraphQL servers still ship with it on, and the line between 'we want devs to use the explorer' and 'we exposed the entire data model to the internet' is one configuration flag.

How it happens

One introspection query returns the complete type system. From that single response, the attacker reconstructs every query, mutation, subscription, the arguments each takes, and the relationships between types. Tools like graphql-voyager render the result as an interactive map. Combined with permissive resolvers (no per-query authorization), introspection is the input that makes targeted enumeration trivial. Even with strict authorization, knowing internal types like `_AdminInternal` or fields like `mfaSecret` is information the attacker shouldn't have.

What an attacker gets

Recon impact dominates — knowing the schema converts blind probing into surgical queries. Combined with authorization bugs (resolver-level IDOR, missing field-level auth), introspection is the recipe for efficient mass data extraction. Schema disclosure also reveals product roadmap details (unreleased fields and types) and internal naming conventions that may inform social engineering.

// what fixvibe reports

What FixVibe reports

Runs on every URL scan: paste your app's URL, nothing to install. The free preview shows your top findings; Hobby and above unlock the full report. Each finding shows the affected URL or host, its severity and fix steps you can paste into your AI coding tool.

How to fix it

Disable introspection in production. Apollo Server 4: `introspection: false` in config (already the default for production builds). Yoga: `useDisableIntrospection` plugin. Hot Chocolate (.NET): `.AddIntrospection(false)`. Hasura: set `HASURA_GRAPHQL_ENABLE_TELEMETRY=false` plus the per-role schema introspection toggle. Don't rely on rate-limiting introspection — one query is enough. For developer access, host a documentation site that's authenticated separately, or use schema diffing in CI to detect changes without exposing the full schema at runtime. As a defense-in-depth layer, also disable field-suggestion responses (most servers offer a flag for 'Did you mean X?' messages) since those leak schema details even when introspection is off.

// 내 앱에서 직접 실행해보세요

FixVibe가 지켜보는 동안 계속 배포하세요.

Paste your app's URL for a free preview. Nothing to install.

디스커버리
133
이 카테고리에서 실행되는 테스트
모듈
16
전용 디스커버리 검사
every URL scan
230+
passive checks on each scan
Scan your URL free →

// 최신 체크 · 실용적인 수정 · 자신 있게 배포

GraphQL 인트로스펙션 노출: what it is and how to fix it · FixVibe