Cara Mengeksploitasi Titik Akhir GrapQL: interospeksi, kueri & mutasi



GraphQL telah menjadi pilihan yang semakin populer dalam pengembangan aplikasi web modern. Dalam GraphQL, titik akhir (endpoint) berperan sebagai tempat pengiriman permintaan pengguna dan mendapatkan tanggapan dari server API. Namun, titik akhir GraphQL masih dapat mengalami kelemahan keamanan yang dapat dioptimalkan oleh penyerang. Dalam artikel ini, kita akan membahas cara mengeksploitasi titik akhir GraphQL termasuk introspeksi, kueri, mutasi, dan alat-alat yang dapat membantu mengoptimalkan kelemahan titik akhir GraphQL.

Introspeksi

Introspeksi adalah teknik yang digunakan untuk memperoleh deskripsi dari skema GraphQL saat runtime. Introspeksi pada GraphQL dapat dilakukan dengan menggunakan kueri introspeksi. Sebuah contoh kueri introspeksi adalah:



{__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name description locations args{...InputValue}}}}fragment FullType on __Type{kind name description fields(includeDeprecated:true){name description args{...InputValue}type{...TypeRef}isDeprecated deprecationReason}inputFields{...InputValue}interfaces{...TypeRef}enumValues(includeDeprecated:true){name description isDeprecated deprecationReason}possibleTypes{...TypeRef}}fragment InputValue on __InputValue{name description type{...TypeRef}defaultValue}fragment TypeRef on __Type{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}}


Ketika kueri ini dikirim ke titik akhir GraphQL, server akan memberikan struktur skema GraphQL. Dengan introspeksi, penyerang dapat mengetahui field dan jenis argumen yang dapat digunakan, sehingga kelemahan dapat dioptimalkan.

Kueri

Kueri adalah sebuah metode dalam GraphQL untuk meminta data dari titik akhir. Meskipun kueri adalah sebuah metode yang aman, namun kueri juga dapat mengalami kelemahan, terutama ketika dikirimkan oleh pengguna yang tidak berwenang. Kueri dapat dimanfaatkan oleh penyerang untuk menyusup dan mengambil informasi yang tidak seharusnya dapat diakses.

Contoh kelemahan kueri di GraphQL adalah ketika kita menggunakan kueri untuk mendapatkan informasi pengguna seperti berikut:



query {
 currentUser(internalId: 1337) {
   role
   name
   email
   token
 }
}


Dalam kueri ini, internalId digunakan untuk memvalidasi pengguna saat mengambil role, name, email, dan token. Namun, mengganti nilai internalId dengan nilai lain dapat memungkinkan penyerang untuk mengambil informasi pengguna lain.

Selain itu, dengan introspeksi atau teknik fuzzing, penyerang juga dapat menemukan objek lain seperti objek "pengguna" di dalam kueri yang dapat digunakan untuk mengambil informasi tambahan.

Mutasi

Mutasi dalam GraphQL digunakan untuk mengubah data pada server. Meskipun mutasi juga merupakan metode yang aman, namun beberapa kasus mutasi dapat mengandung kelemahan jika tidak diatur dengan baik. Sebagai contoh, ketika sebuah aplikasi web mengandung mutasi "registerAccount" yang mengharuskan pengguna untuk memasukkan nilai nickname, email, dan password. Jika pengembang yang tidak berpengalaman tidak menambahkan validasi yang cukup, penyerang dapat memperoleh akses untuk memasukkan nilai "peran" pada bidang yang kembali oleh GraphQL untuk objek "pengguna" setelah mutasi selesai.

Contoh mutasi yang dapat dimanfaatkan oleh penyerang adalah:

mutation {
 registerAccount(nickname:"hacker", email:"hacktheplanet@seribuakal.or.id",
   password:"StrongP@ssword!", role:"Admin") {
   token {
     accessToken
   }
   user {
     email
     nickname
     role
   } 
 }
}


Dalam contoh ini, pengembang tidak menambahkan validasi yang cukup serta tidak membuat batasan penggunaan bidang "peran" yang diberikan oleh server setelah mutasi berhasil. Hal ini memungkinan penyerang dapat memasukkan nilai "peran" pada bidang tersebut.

Alat

Ada beberapa alat yang dapat digunakan untuk mengeksploitasi titik akhir GraphQL, seperti:

Dalam pengembangan aplikasi web, penting bagi pengembang untuk mempertimbangkan keamanan untuk setiap aspek pengembangan termasuk titik akhir GraphQL. Dengan memahami kelemahan yang mungkin terjadi pada titik akhir GraphQL dan dengan menggunakan alat-alat yang tepat, pengembang dapat memperkuat keamanan aplikasi web dengan titik akhir GraphQL.

0 Komentar