দুটি অ্যাকাউন্ট দিয়ে API-র authorization bug পরীক্ষা

বেশিরভাগ গুরুতর API bug কে কী করতে পারে তা নিয়ে। সহজ matrix ও দুটি অ্যাকাউন্ট দিয়ে সাবধানে পরীক্ষা করুন এবং পরিষ্কারভাবে প্রমাণ করুন।

দুটি user অ্যাকাউন্ট ও অনুমোদিত কাজের ছক

API অনেক অপারেশন খোলা রাখে, আর সবচেয়ে মূল্যবান bug সাধারণত authorization নিয়ে: server কি যাচাই করে এই user এই object-এ এই কাজ করতে পারে কি না। Scanner জানে না কী অনুমোদিত হওয়া উচিত, তাই সাবধান হাতে পরীক্ষা তাদের ফসকানো জিনিস ধরে।

যা দরকার

  • আপনার বানানো দুটি সাধারণ test অ্যাকাউন্ট (A ও B বলুন), একই role-এর।
  • অ্যাপে role থাকলে প্রতিটির জন্য একটি করে অ্যাকাউন্ট (যেমন user ও admin), শুধু যেখানে প্রোগ্রাম বানানোর অনুমতি দেয়।
  • Request রেকর্ড ও replay করতে proxy (যেমন Burp)।
  • লিখিত অনুমতি: API scope-এ আছে।

Permission matrix বানান

কাজ ও কার অনুমতি থাকা উচিত তার একটি ছক করুন।

কাজ বেনামী User A (নিজের object) User A (B-র object) Admin
Invoice দেখা না হ্যাঁ না হ্যাঁ
Profile edit না হ্যাঁ না হ্যাঁ
সব user-এর তালিকা না না না হ্যাঁ

না চিহ্নিত ঘরগুলোই আপনার পরীক্ষা। প্রতিটির জন্য server-কে অবশ্যই প্রত্যাখ্যান করতে হবে।

দুটি মূল যাচাই

১. Object-level authorization (BOLA / IDOR)। A কি B-র ID ব্যবহার করে B-র object পড়তে বা বদলাতে পারে?

  1. B হিসেবে একটি object বানিয়ে তার ID লিখে রাখুন।
  2. A হিসেবে B-র ID-র জন্য request পাঠান (দেখা, আপডেট, মোছা)।
  3. প্রত্যাশিত: 403 বা 404। Bug: B-র data-সহ 200, বা সফল বদল।

২. Function-level authorization। সাধারণ user কি admin ফাংশন ডাকতে পারে? আপনার পাওয়া API path দেখুন (JavaScript পড়া দেখুন), সাধারণ user-এর token দিয়ে admin-গুলো চেষ্টা করুন এবং দেখুন server প্রত্যাখ্যান করে কি না।

আরও যা যাচাই করবেন

  • Authentication ছাড়া access: token সরিয়ে request আবার পাঠান।
  • একই path-এ ভিন্ন HTTP method (GET অনুমোদিত কিন্তু DELETE অসুরক্ষিত)।
  • Mass assignment: API কি request body-তে role বা isAdmin-এর মতো বাড়তি ফিল্ড নিয়ে প্রয়োগ করে?
  • নতুন যাচাই এড়াতে পারে এমন API-র পুরোনো সংস্করণ।
  • শুধু URL-এ নয়, body ও header-এও ID।
  • পরোক্ষ রেফারেন্স: অন্য user-এর data ফেরত দেওয়া list endpoint, export ও report।

Repeater ব্যবহার ও তুলনা

User A হিসেবে একটি request রেকর্ড করুন। Repeater-এ B-র identifier বা token বসিয়ে পাঠান, এবং প্রত্যাশিত উত্তরের সাথে তুলনা করুন। একবারে একটি জিনিস বদলান, যাতে বোঝেন কী কারণে ফল।

নিরাপদ proof

  • দেখান আপনার নিজের অ্যাকাউন্ট A আপনার নিজের অ্যাকাউন্ট B-র data দেখেছে, আসল গ্রাহকের নয়।
  • কোনো পরীক্ষা আসল user-দের প্রকাশ করতে পারলে (যেমন ক্রমিক ID) enumerate করবেন না। একটি উদাহরণে প্রমাণ করে report করুন।
  • Report-এর জন্য request ও response (সংবেদনশীল মান সরিয়ে) রাখুন।
  • যে data আপনার নয় তা কখনো বদলাবেন বা মুছবেন না।

Report করা

কোন নিয়ম ভাঙা হয়েছে বলুন ("invoice শুধু তার মালিকের দেখার কথা"), সঠিক request দিন, অপ্রত্যাশিত response দেখান, প্রভাব বলুন এবং সমাধান (server-side মালিকানা যাচাই) প্রস্তাব করুন। আমাদের report লেখার গাইড দেখুন।

মূল কথা: দুটি অ্যাকাউন্ট ও permission matrix ব্যবহার করুন, একবারে একটি বদল দিয়ে object-level ও function-level access পরীক্ষা করুন, আর শুধু নিজের test data দিয়ে প্রমাণ করুন।


বাগ বাউন্টি সিরিজ, পর্ব ২ (recon ও টুল): 5 নম্বর (মোট 5)। আগের লেখা: Web archive ও public উৎস: ভুলে যাওয়া পেজ সঠিকভাবে খোঁজা.

আরও পড়ুন

Web archive ও public উৎস: ভুলে যাওয়া পেজ সঠিকভাবে খোঁজা

সাইট বদলায়, কিন্তু অতীত archive-এ থাকে। Public archive ও খোলা উৎস target বুঝতে কীভাবে সাহায্য করে এবং সীমারেখা কোথায়, জানুন।

বাগ বাউন্টি•২ মিনিটে পড়া

Burp Suite-এর গোড়া: proxy, repeater ও নিরাপদ পরীক্ষার ধারা

Burp Suite আপনার browser-এর পাঠানো request দেখতে ও বদলাতে দেয়। মূল টুল এবং আপনাকে scope-এ রাখে এমন শান্ত কাজের ধারা শিখুন।

বাগ বাউন্টি•২ মিনিটে পড়া

ওয়েব অ্যাপ কীভাবে চলে বুঝতে তার JavaScript পড়া

Front end বলে দেয় back end কীভাবে কাজ করে। Bundle করা JavaScript শান্তভাবে পড়া শিখুন এবং এটি অ্যাপের ডিজাইন সম্পর্কে কী দেখাতে পারে, জানুন।

বাগ বাউন্টি•২ মিনিটে পড়া