HackCert
Intermediate 11 min read May 25, 2026

GraphQL Security: আধুনিক GraphQL API-এর সম্ভাব্য নিরাপত্তা দুর্বলতা এবং সমাধান!

GraphQL API-এর প্রধান নিরাপত্তা ঝুঁকি, OWASP API Top 10 অনুসারে আক্রমণ ভেক্টর এবং কার্যকর প্রতিরক্ষা কৌশলের পূর্ণাঙ্গ গাইড।

Imran Hossain Chowdhury
API Security Researcher
share
GraphQL Security: আধুনিক GraphQL API-এর সম্ভাব্য নিরাপত্তা দুর্বলতা এবং সমাধান!
Overview

REST API যখন প্রায় দুই দশক ধরে ওয়েব আর্কিটেকচারের রাজত্ব করছিল, ঠিক তখনই ২০১৫ সালে Facebook GraphQL-এর ওপেন সোর্স ঘোষণা দিয়ে আধুনিক API উন্নয়নে এক নতুন যুগের সূচনা করে। ক্লায়েন্ট-ড্রিভেন ডেটা ফেচিং, Strong Type System, এবং Single Endpoint Architecture—এই বৈশিষ্ট্যগুলো GitHub, Shopify, Airbnb, Coursera, Twitter-এর মতো প্ল্যাটফর্মকে দ্রুত GraphQL-এ স্থানান্তরিত করতে উৎসাহিত করেছে। কিন্তু এই জনপ্রিয়তা একটি বাস্তবতা সামনে এনেছে: GraphQL-এর নিরাপত্তা REST-এর চেয়ে মৌলিকভাবে ভিন্ন। যে নমনীয়তা GraphQL-কে শক্তিশালী করে তোলে, সেই একই নমনীয়তা আক্রমণকারীদের জন্য একটি বিশাল Attack Surface তৈরি করে। ২০২৩ সালের OWASP API Security Top 10-এ GraphQL-নির্দিষ্ট দুর্বলতাগুলো স্পষ্টভাবে উল্লেখ করা হয়েছে, এবং Salt Security-র গবেষণা অনুযায়ী ৪১% প্রতিষ্ঠান গত বছর GraphQL-সম্পর্কিত নিরাপত্তা ইনসিডেন্ট অনুভব করেছে।

GraphQL আর্কিটেকচারের নিরাপত্তা প্রভাব

GraphQL-এর স্থাপত্য REST থেকে কয়েকটি গুরুত্বপূর্ণ দিক থেকে আলাদা। প্রথমত, এটি একটি Single Endpoint (সাধারণত /graphql) ব্যবহার করে, যেখানে সব ধরনের অপারেশন—Query, Mutation, Subscription—POST রিকোয়েস্টের মাধ্যমে পরিচালিত হয়। ফলে URL-ভিত্তিক Access Control এবং WAF Pattern ম্যাচিং কাজ করে না।

দ্বিতীয়ত, GraphQL-এ ক্লায়েন্ট নির্দিষ্ট করে কোন ফিল্ড সে চায়। এটি Over-Fetching এবং Under-Fetching সমস্যা সমাধান করলেও, Server-Side কে প্রতিটি Field-Level Authorization করতে বাধ্য করে। REST-এ একটি Endpoint একটি Object সম্পূর্ণভাবে দেয়; GraphQL-এ একটি Object-এর কোন কোন ফিল্ড ক্লায়েন্ট দেখতে পারবে তা ক্ষেত্রভিত্তিক।

তৃতীয়ত, GraphQL Schema একটি Strong Typed কাঠামো, যা Introspection-এর মাধ্যমে ক্লায়েন্ট জানতে পারে কোন Type, Field, Argument এবং Mutation আছে। এই Self-Documentation ফিচার ডেভেলপারদের জন্য আশীর্বাদ হলেও, আক্রমণকারীদের জন্য একটি Treasure Map।

চতুর্থত, Nested Query-র মাধ্যমে এক রিকোয়েস্টে একাধিক সম্পর্কিত Object ফেচ করা যায়। user → posts → comments → author → posts ধরনের চেইন তৈরি করা সম্ভব, যা সঠিকভাবে নিয়ন্ত্রিত না হলে Exponential Resource Consumption ঘটাতে পারে।

প্রধান GraphQL নিরাপত্তা দুর্বলতা

GraphQL API-এর প্রথম এবং সবচেয়ে সাধারণ দুর্বলতা হলো Excessive Introspection Exposure। ডিফল্টভাবে অনেক GraphQL সার্ভার Production-এ Introspection চালু রাখে। __schema এবং __type কোয়েরি দিয়ে আক্রমণকারীরা সম্পূর্ণ API Schema ডাউনলোড করতে পারে—Hidden Mutation, Admin Field, এবং Internal Type সহ। যদি Introspection বন্ধও থাকে, Field Suggestion Attack-এর মাধ্যমে আক্রমণকারীরা Typo Suggestion ব্যবহার করে Field Name অনুমান করতে পারে।

দ্বিতীয় দুর্বলতা হলো Broken Object Level Authorization (BOLA/IDOR)। ধরা যাক একটি কোয়েরি getUser(id: ID!)। যদি Resolver-এ অথরাইজেশন চেক না থাকে, তবে আক্রমণকারী যেকোনো User ID দিয়ে যে কারো প্রোফাইল দেখতে পারে। এটি API Security-এর সবচেয়ে ঘন ঘন দেখা সমস্যা।

তৃতীয় দুর্বলতা হলো Broken Function Level Authorization। অনেক সময় Admin-Level Mutation যেমন deleteAllUsers বা updateUserRole Schema-এ উন্মুক্ত থাকে এবং Authorization শুধু UI-তে চেক হয়। ক্লায়েন্ট সরাসরি GraphQL Endpoint-এ এই Mutation কল করলে Privilege Escalation ঘটে।

চতুর্থ দুর্বলতা হলো Resource Exhaustion এবং DoS। গভীর Nested Query, Aliasing Abuse, Batching Abuse, এবং Recursive Fragment-এর মাধ্যমে একক রিকোয়েস্টেই সার্ভার ক্র্যাশ করানো সম্ভব। কোনো প্রকার Complexity Analysis ছাড়া GraphQL API খোলা থাকলে এটি একটি সাধারণ আক্রমণ।

পঞ্চম দুর্বলতা হলো Information Disclosure via Error Messages। বিকাশের সময় Verbose Error Message চালু রাখা হয়, যা Production-এ গেলে Stack Trace, Database Query, Internal File Path, এবং SQL Error Detail প্রকাশ করে। এটি Reconnaissance-এ সাহায্য করে।

ষষ্ঠ দুর্বলতা হলো Injection Vulnerability। GraphQL Type Safety SQL Injection প্রতিরোধ করে না; যদি Resolver-এ ক্লায়েন্ট ইনপুট সরাসরি SQL বা NoSQL কোয়েরিতে concat করা হয়, তবে Classic Injection সম্ভব। GraphQL ভেতরে JSON-Parameter NoSQL Injection বিশেষভাবে দেখা যায়।

সপ্তম দুর্বলতা হলো Improper Asset Management। পুরাতন /graphql/v1, /api/graphql, কিংবা Staging Environment Endpoint যেগুলো পাবলিকলি অ্যাক্সেসযোগ্য থাকে, সেগুলোতে প্রায়ই নিরাপত্তা নিয়ন্ত্রণ দুর্বল।

অষ্টম দুর্বলতা হলো Unrestricted File Upload। GraphQL Mutation দিয়ে ফাইল আপলোড সমর্থিত (multipart/form-data), কিন্তু MIME Type, Extension, Size, এবং Content যাচাই না হলে Web Shell Upload থেকে শুরু করে XSS পর্যন্ত সম্ভব।

Introspection Attack-এর গভীর বিশ্লেষণ

Introspection হলো GraphQL-এর Built-in ফিচার, যা Apollo Studio, GraphiQL, এবং অন্যান্য টুলকে Schema Documentation তৈরি করতে দেয়। কিন্তু আক্রমণকারীর জন্য এটি একটি স্বপ্নের উৎস।

একটি সাধারণ Introspection কোয়েরি { __schema { types { name fields { name type { name } } } } } চালালে পুরো API Schema পাওয়া যায়। আক্রমণকারী এর থেকে Hidden Mutation যেমন deleteAccount, Admin-Only Type যেমন InternalUser, এবং সংবেদনশীল Field যেমন passwordHash, creditCardNumber, apiKey খুঁজে পেতে পারে।

InQL, GraphQL Voyager, GraphQL Cop-এর মতো টুল স্বয়ংক্রিয়ভাবে Schema পার্স করে এবং সম্ভাব্য সংবেদনশীল ফিল্ড হাইলাইট করে। Burp Suite-এর InQL Extension Pentest প্রক্রিয়াকে ব্যাপকভাবে সহজ করে দেয়।

Introspection বন্ধ থাকলেও Suggestion-Based Schema Discovery সম্ভব। GraphQL সার্ভার "Did you mean...?" Error দেয় যখন একটি ভুল Field Name দেওয়া হয়। আক্রমণকারীরা Wordlist থেকে সম্ভাব্য নাম দিয়ে এই Suggestion ব্যবহার করে Schema পুনর্গঠন করতে পারে। Clairvoyance এবং GraphQLer-এর মতো টুল এই কাজ স্বয়ংক্রিয় করে।

DoS এবং Performance Attack

GraphQL-এর সবচেয়ে আলোচিত নিরাপত্তা ঝুঁকি হলো Denial of Service। কয়েকটি প্রধান Vector রয়েছে।

Deep Recursion Attack-এ আক্রমণকারী একটি Cyclic Type Relationship কাজে লাগায়। ধরা যাক User Type-এ friends: [User] ফিল্ড আছে। তাহলে user { friends { friends { friends { ... } } } } এমন ১০০ লেভেলের Query সার্ভারকে অসীম রিকার্সিভ Resolver Call-এ বাধ্য করে।

Aliasing Attack-এ আক্রমণকারী একই ফিল্ড অনেক Alias-এ পুনরাবৃত্তি করে: a:expensiveOp b:expensiveOp c:expensiveOp ...। সার্ভার প্রতিটি Alias-এর জন্য আলাদা Resolver চালায়।

Batching Attack-এ একক HTTP রিকোয়েস্টে শত শত স্বতন্ত্র Operation Array আকারে পাঠানো হয়, যা Rate Limiter-কে বাইপাস করে এবং সার্ভার ক্ষমতা সমাপ্ত করে।

Field Duplication Attack-এ একটি Type-এ একই ফিল্ড বহুবার রিকোয়েস্ট করা হয় (GraphQL Spec অনুযায়ী এটি Merge হওয়ার কথা, কিন্তু কিছু Implementation যথাযথভাবে করে না)।

Directive Overload-এ @skip এবং @include Directive বহুবার ব্যবহার করে Parser-কে চাপে ফেলা যায়।

বাস্তব উদাহরণ ও Bug Bounty

GraphQL Security-তে বহু বিখ্যাত কেস রয়েছে। HackerOne-এর Public Disclosure-এ Shopify, GitHub, GitLab, Twitter-এর জন্য একাধিক GraphQL Bug Report পাওয়া যায়।

২০১৯ সালে গবেষক Aaron Esau Apollo Server-এ একটি Field Suggestion Vulnerability খুঁজে বের করেন, যেখানে Introspection Disabled থাকা সত্ত্বেও সম্পূর্ণ Schema পুনর্গঠন করা সম্ভব ছিল। ২০২০ সালে GitHub-এর GraphQL API-তে IDOR দুর্বলতা পাওয়া যায়, যেখানে Repository Webhook Secret প্রকাশ পেত।

Facebook-এর Bug Bounty Program-এ Authorization Bypass-এর জন্য একাধিক উচ্চমূল্যের রিপোর্ট পেআউট হয়েছে। একটি বিখ্যাত কেসে গবেষক Stephen Sclafani Facebook-এর GraphQL API থেকে অন্য ব্যবহারকারীর Photo Album অ্যাক্সেস করতে সক্ষম হয়েছিলেন।

Shopify-তে এক গবেষক $২৫,০০০ পেয়েছিলেন এমন একটি Bug রিপোর্ট করার জন্য যেখানে Internal Admin GraphQL Mutation-এ অননুমোদিত অ্যাক্সেস ছিল। GitLab-এ Email Confirmation Token-এর Batching-ভিত্তিক Brute Force Vulnerability $৩০,০০০-এর Bounty পেয়েছিল।

প্রতিরোধ ও প্রতিকার

GraphQL API সুরক্ষিত করতে বহুস্তরীয় কৌশল প্রয়োজন। প্রথমত, Production-এ Introspection বন্ধ করুন। Apollo Server-এ introspection: false, GraphQL Yoga-তে graphiql: false সেট করুন। তবে এটি সর্বশেষ সুরক্ষা নয়—Field Suggestion Bypass সম্ভব, তাই অন্য নিয়ন্ত্রণ আবশ্যক।

দ্বিতীয়ত, Disable Field Suggestions। Apollo Server-এ Custom Validation Rule দিয়ে noDuplicatedFields, noSchemaIntrospection, এবং Error Format Customization করে Suggestion Block করা যায়।

তৃতীয়ত, Query Complexity Analysis প্রয়োগ করুন। graphql-cost-analysis বা graphql-query-complexity দিয়ে প্রতিটি Field-এ একটি Cost সেট করুন। কোয়েরির মোট Cost একটি সীমার বেশি হলে Reject করুন।

চতুর্থত, Query Depth Limit সেট করুন। graphql-depth-limit দিয়ে সর্বোচ্চ Nesting Level (সাধারণত ৫-৭) নির্ধারণ করুন। Recursive Cycle Detection প্রয়োগ করে Infinite Loop প্রতিরোধ করুন।

পঞ্চমত, Persisted Queries (Trusted Documents) ব্যবহার করুন। Production-এ ক্লায়েন্ট পূর্ব-অনুমোদিত Query-র Hash পাঠাবে; সার্ভার Whitelist থেকে Match করে Execute করবে। এতে Arbitrary Query Block হয়ে যায় এবং DoS, Information Disclosure উভয়ই প্রতিরোধ হয়।

ষষ্ঠত, Field-Level Authorization প্রয়োগ করুন। graphql-shield, graphql-armor, বা Custom Directive ব্যবহার করে প্রতিটি Sensitive Field-এ Permission Check বাধ্যতামূলক করুন। Object-Level Authorization-এ Ownership Check অপরিহার্য—Resolver-এ if (user.id !== requestedUserId && !user.isAdmin) throw new ForbiddenError() প্যাটার্ন ব্যবহার করুন।

সপ্তমত, Rate Limiting Multi-Layer-এ প্রয়োগ করুন: IP-Based, User-Based, এবং Operation-Based। বিশেষ সংবেদনশীল Mutation (login, register, sendOtp) এর জন্য Strict Limit সেট করুন।

অষ্টমত, Error Handling সাবধানে করুন। Production-এ Stack Trace, Database Error, এবং File Path প্রকাশ করবেন না। Apollo Server-এ formatError ফাংশন কাস্টমাইজ করে শুধুমাত্র সাধারণ Error Message ফেরত দিন।

নবমত, Input Validation কঠোরভাবে প্রয়োগ করুন। Scalar Type যাচাই, String Length Limit, এবং Regex Validation যুক্ত করুন। Custom Scalar যেমন EmailAddress, URL, UUID ব্যবহার করুন।

দশমত, ORM/Database Query-তে Parameterized Query ব্যবহার করুন। Prisma, TypeORM, Sequelize-এর মতো ORM SQL Injection প্রতিরোধে কার্যকর, কিন্তু Raw Query এড়াতে হবে।

একাদশত, Monitoring এবং Observability নিশ্চিত করুন। Apollo Studio, GraphQL Hive, Inigo-এর মতো প্ল্যাটফর্ম প্রতিটি Operation লগ করে এবং Anomaly Detection সাহায্য করে। SIEM-এ GraphQL-Specific Alert সেট করুন।

দ্বাদশত, নিয়মিত Security Testing করুন। GraphQL Cop, InQL, GraphQL Armor, এবং Custom Pentest টুল ব্যবহার করে নিজের API-এর দুর্বলতা যাচাই করুন। OWASP-এর GraphQL Cheat Sheet একটি চমৎকার রেফারেন্স।

Key Takeaways

GraphQL আধুনিক API ডিজাইনের জন্য একটি শক্তিশালী এবং নমনীয় প্রযুক্তি, কিন্তু সেই শক্তি সঠিক নিরাপত্তা কাঠামো ছাড়া দ্রুত দুর্বলতায় পরিণত হয়। REST API-র চেয়ে GraphQL-এর Attack Surface ভিন্ন প্রকৃতির—Schema Disclosure, Deep Query DoS, Field-Level Authorization Bypass, Batching Abuse, এবং Cyclic Recursion এই API-এর জন্য বিশেষ ঝুঁকি। OWASP API Security Top 10-কে গাইড হিসেবে নিয়ে Persisted Query, Query Complexity Analysis, Depth Limit, Field-Level Authorization, এবং Production-এ Introspection Disable—এই পাঁচটি মৌলিক পদক্ষেপ অধিকাংশ GraphQL ঝুঁকি কমিয়ে আনে। Apollo Server, GraphQL Yoga, Hot Chocolate, Hasura-এর মতো আধুনিক GraphQL ফ্রেমওয়ার্কে Built-in সুরক্ষা ফিচার ক্রমশ বাড়ছে, কিন্তু সঠিক কনফিগারেশন এবং Defense-in-Depth এখনও Developer-এর দায়িত্ব। GraphQL Security একটি বিকাশমান শৃঙ্খলা, এবং প্রতিটি API Engineer, Security Researcher, এবং DevSecOps Professional-এর জন্য এই দক্ষতা অর্জন এখন অপরিহার্য।

আপনার জ্ঞান যাচাই করতে প্রস্তুত? আজই HackCert-এ GraphQL Security MCQ Quiz-টি দিন!

Related articles

back to all articles