একজন নিরাপত্তা গবেষক ২৪টি ওপেন-সোর্স MCP (Model-Control-Protocol) সার্ভার প্রজেক্ট স্ক্যান করে একটি মারাত্মক স্যান্ডবক্স কমান্ড-ইনজেকশন ত্রুটি খুঁজে পেয়েছেন, যার CVSS স্কোর ৯.৮। এই বাগটি একটি মিড-টিয়ার AI-এজেন্ট ফ্রেমওয়ার্ক AgenticX-এ বিদ্যমান এবং এটি একজন আক্রমণকারীকে সার্ভার চালানোর জন্য ব্যবহৃত Docker কন্টেইনারে যেকোনো শেল কমান্ড ইনজেক্ট করার সুযোগ দেয়।

কেন MCP সার্ভার গুরুত্বপূর্ণ

MCP হলো সেই সংযোগকারী যা স্বায়ত্তশাসিত AI এজেন্টদের বাহ্যিক টুল—যেমন ফাইল, ডেটাবেস, ব্রাউজার ইত্যাদির সাথে কথা বলতে সাহায্য করে। ডেভেলপাররা তাদের অ্যাপ্লিকেশনে একটি MCP সার্ভার যুক্ত করেন যাতে একটি ল্যাঙ্গুয়েজ মডেল বাস্তব জগতের রিসোর্স পড়া, লেখা এবং সেগুলোর ওপর কাজ করার ক্ষমতা পায়। প্রোটোকলটি নিজেই হালকা এবং ব্যাপকভাবে গৃহীত, তবে প্রতিটি প্রজেক্টের মেইনটেইনারদের চারপাশের কোড সুরক্ষিত করার দায়িত্ব নিতে হয়।

Cline বা Aider-এর মতো বড় আকারের MCP ইমপ্লিমেন্টেশনগুলো নিয়মিত অডিট করা হয় এবং সেগুলোর উন্নত নিরাপত্তা প্রক্রিয়া রয়েছে। এখানে পরীক্ষা করা ২৪টি প্রজেক্ট GitHub-এ "মিড-টিয়ার" রেঞ্জে রয়েছে, যেগুলোর স্টার সংখ্যা ১০০ থেকে ১,০০০ এর মধ্যে। সেই রিপোজিটরিগুলো প্রায়শই কোড সুরক্ষিত করার চেয়ে দ্রুত ফিচার ডেলিভারিতে বেশি গুরুত্ব দেয়, যা সেই ব্যবহারকারীদের জন্য একটি অন্ধবিন্দু (blind spot) তৈরি করে যারা ধরে নেন যে যেকোনো ওপেন-সোর্স MCP সার্ভার ডিফল্টভাবে নিরাপদ।

স্ক্যানিং প্রক্রিয়া

গবেষক একটি স্ক্যানার তৈরি করেছিলেন যা পাঁচটি ক্লাসিক ওয়েব-অ্যাপ অ্যাটাক প্যাটার্ন খুঁজছিল:

  • Command injection
  • Path traversal
  • Server-Side Request Forgery (SSRF)
  • SQL injection
  • Sandbox escape

৫,৯১১টি সোর্স ফাইলের ওপর স্ক্যানারটি চালানোর ফলে প্রাথমিকভাবে ৯৪টি অ্যালার্ট পাওয়া যায়। ম্যানুয়াল ট্রায়াজ করার পর, মাত্র একটি অ্যালার্ট প্রকৃত দুর্বলতা হিসেবে প্রমাণিত হয়।

AgenticX বাগের বিস্তারিত

AgenticX ইউজার-প্রদত্ত স্ট্রিংগুলোকে Python f-strings-এ ইন্টারপোলেট করার মাধ্যমে শেল কমান্ড তৈরি করে এবং তারপর ফলাফলটি সরাসরি কন্টেইনারের শেলে পাঠিয়ে দেয়। এখানে ফাইল পাথের কোনো ভ্যালিডেশন বা কোটেশন (quoting) করা হয় না। ফলে একটি অ্যাডভারসারিয়াল প্রম্পট (adversarial prompt) সেমিকোলন বা অন্য কোনো শেল মেটাক্যারেক্টার ইনজেক্ট করতে পারে, যা কন্টেইনারটিকে আক্রমণকারীর পছন্দমতো যেকোনো কমান্ড কার্যকর করতে বাধ্য করে।

গবেষক নিচের পদ্ধতিগুলো ব্যবহার করে কোডটি প্যাচ করেছেন:

  1. ল্যাঙ্গুয়েজ মডেল দ্বারা সরবরাহ করা যেকোনো পাথকে নিরাপদে এস্কেপ করার জন্য shlex.quote() ব্যবহার করা।
  2. কমান্ড তৈরির আগে পাথ-ট্রাভার্সাল প্যাটার্ন (../) এর জন্য সুনির্দিষ্ট পরীক্ষা যোগ করা।

ফিক্স করার পর স্ক্যানারটি পুনরায় চালানোর ফলে ঝুঁকির মাত্রা নাটকীয়ভাবে কমে গেছে দেখা গেছে, যা নিশ্চিত করে যে এই সমাধানটি মূল সমস্যার সমাধান করেছে।

লাভ ও ক্ষতি কার

  • AI ডেভেলপাররা যারা তাদের পণ্যে একটি MCP সার্ভার যুক্ত করেন, তারা এখন একটি বাস্তব উদাহরণ দেখতে পাচ্ছেন যে কীভাবে একটি মাত্র মিসিং স্যানিটাইজেশন ধাপ পুরো সিকিউরিটি চেইন ভেঙে দিতে পারে। ল্যাঙ্গুয়েজ মডেল থেকে আসা প্রতিটি প্যারামিটারকে একটি আনট্রাস্টেড ইনপুট হিসেবে বিবেচনা করুন, ঠিক যেভাবে আপনি যেকোনো এক্সটার্নাল API পেলোডকে বিবেচনা করেন।

অন্য দিকটি

গবেষক জোর দিয়ে বলেছেন যে MCP প্রোটোকলটি নিজেই সুরক্ষিত। এই ত্রুটিটি ওয়্যার ফরম্যাটের (wire format) কোনো ডিজাইনের দুর্বলতা নয়, বরং একটি নির্দিষ্ট ইমপ্লিমেন্টেশনে কোডিংয়ের অসাবধানতা। বড় এবং নিয়মিত অডিট করা প্রজেক্টগুলো ইতিমধ্যে এই ধরনের সমস্যা সমাধান করেছে এবং ওপেন-সোর্স কমিউনিটি AgenticX প্যাচ থেকে শিক্ষা নিতে পারে। তবুও, এই ঘটনাটি দেখায় যে স্টার সংখ্যা কম হওয়া সত্ত্বেও "মিড-টিয়ার" প্রজেক্টগুলোতে উচ্চ-প্রভাবশালী বাগ থাকতে পারে।

মূল শিক্ষা

AgenticX-এ একটি মাত্র আনচেকড f-string পুরো MCP সার্ভারকে যেকোনো কোড এক্সিকিউশনের লঞ্চপ্যাডে পরিণত করেছে। এই ঘটনাটি প্রমাণ করে যে AI-এজেন্ট ইকোসিস্টেমের নিরাপত্তা প্রোটোকলের চেয়ে সুশৃঙ্খল ইমপ্লিমেন্টেশনের ওপর বেশি নির্ভর করে। ডেভেলপারদের অবশ্যই প্রতিটি LLM-জেনারেটেড প্যারামিটারকে শত্রুভাবাপন্ন (hostile) হিসেবে বিবেচনা করতে হবে, প্ল্যাটফর্মগুলোকে রানটাইম সেফগার্ড প্রয়োগ করতে হবে এবং সিকিউরিটি টুলগুলোকে AI এজেন্টদের তৈরি করা অনন্য ট্রাস্ট চেইন বোঝার জন্য বিবর্তিত হতে হবে।

Source: dev.to/easterndev/i-scanned-24-mcp-server-projects-and-found-a-real-sandbox-command-injection-cvss-98-4k9h