Tutorial Audit Keamanan API GraphQL: Cegah Kebocoran Data Sensitif
Poin Kunci Artikel Ini:
- Introspection merupakan fitur bawaan GraphQL yang memungkinkan klien meminta dokumentasi lengkap mengenai struktur skema server melalui meta-field dan .
- Sebaliknya, pada GraphQL API dengan Introspection aktif, seluruh permukaan serangan (attack surface) langsung terekspos secara detail.
- Lakukan pemindaian direktori atau analisis lalu lintas HTTP pada nama rute umum berikut:Kirimkan HTTP GET request dengan parameter kueri sederhana .
Ancaman Keamanan dan Celah Risiko Introspection pada GraphQL API
GraphQL mengubah arsitektur komunikasi data dengan mengonsolidasikan seluruh transaksi ke dalam satu endpoint tunggal, seperti /graphql. Berbeda dari REST API yang memisahkan resource ke banyak rute HTTP spesifik (seperti GET /users/100 atau POST /orders), GraphQL mengeksekusi seluruh kueri melalui HTTP POST menggunakan Schema Definition Language (SDL). Klien mendefinisikan bentuk data yang dibutuhkan, dan GraphQL execution engine melakukan kalkulasi Abstrak Syntax Tree (AST) untuk memanggil resolver yang sesuai. Fleksibilitas ini memangkas masalah over-fetching dan under-fetching, namun menciptakan lanskap kerentanan keamanan baru jika tidak dikonfigurasi secara ketat.
Titik lemah yang paling sering dieksploitasi pada tahap awal serangan adalah Introspection System. Introspection merupakan fitur bawaan GraphQL yang memungkinkan klien meminta dokumentasi lengkap mengenai struktur skema server melalui meta-field __schema dan __type. Di lingkungan development atau staging, fitur ini sangat penting untuk mendukung fitur auto-completion pada IDE API seperti GraphQL Playground, GraphiQL, atau Postman. Namun, jika fitur ini dibiarkan aktif di lingkungan produksi (production), penyerang dapat mengekstraksi seluruh cetak biru (blueprint) backend aplikasi hanya dengan satu kueri dasar.
Perbedaan Surface Area Attack: REST vs GraphQL
Pada REST API, penyerang harus melakukan fuzzing direktori, merekayasa parameter URL, atau memetakan rute satu per satu. Sebaliknya, pada GraphQL API dengan Introspection aktif, seluruh permukaan serangan (attack surface) langsung terekspos secara detail. Penyerang mendapatkan peta lengkap mengenai:
- Seluruh tipe data kustom (Custom Object Types), Interfaces, dan Unions.
- Daftar nama kueri (Queries), mutasi (Mutations), dan langganan data (Subscriptions).
- Argumen yang diterima oleh setiap field beserta tipe data parameternya (misalnya
String!,Int, atauBoolean). - Field internal atau kustom yang ditandai deprecated namun masih mengeksekusi logika backend.
Dampak Risiko Fitur Introspection Aktif di Production
- Pemaparan Sifat Data Internal: Penyerang dapat melihat field sensitif yang tersembunyi di antarmuka publik, seperti
passwordHash,twoFactorSecret,stripeCustomerId,ssn, atauisSystemAdmin. - Eliminasi Tahap Fuzzing: Penyerang tidak lagi membutuhkan pencarian manual parameter kueri. Setiap fungsi mutasi seperti
updateUserRole(userId: ID!, role: String!)langsung teridentifikasi beserta struktur argumen yang dibutuhkan. - Fasilitasi Serangan BOLA dan BOPLA: Informasi tipe data yang detail mempercepat validasi celah Broken Object Level Authorization (BOLA) dan Broken Object Property Level Authorization (BOPLA) di tingkat field resolver.
Berikut adalah payload kueri Introspection standar yang digunakan untuk mengekstraksi seluruh skema GraphQL:
query IntrospectionQuery {
__schema {
queryType { name }
mutationType { name }
subscriptionType { name }
types {
name
kind
description
fields(includeDeprecated: true) {
name
args {
name
type { name kind ofType { name kind } }
}
type { name kind ofType { name kind } }
}
}
}
}Metodologi Testing Vulnerability dengan Burp Suite dan InQL Extension
Pelaksanaan audit keamanan pada API GraphQL memerlukan alat intercepting proxy yang mampu mengurai payload JSON kompleks. Burp Suite yang dipadukan dengan ekstensi InQL (GraphQL Scanner) memberikan alur kerja otomatis untuk menganalisis skema, membangun kueri uji, dan mengeksploitasi celah otorisasi.
Langkah 1: Endpoint Reconnaissance dan Fingerprinting
Langkah awal audit adalah mendeteksi lokasi endpoint GraphQL yang aktif. Lakukan pemindaian direktori atau analisis lalu lintas HTTP pada nama rute umum berikut:
POST /graphqlGET /graphql?query={__typename}POST /api/graphqlPOST /v1/graphqlPOST /v2/graphqlPOST /queryPOST /api/v1/altair
Kirimkan HTTP GET request dengan parameter kueri sederhana ?query={__typename}. Jika server mengembalikan respon {"data": {"__typename": "Query


