AI-চালিত GitHub Actions একটি মাত্র কমেন্টের মাধ্যমে হাইজ্যাক করা যেতে পারে, যার ফলে API কী, ক্লাউড টোকেন এবং অন্যান্য সিক্রেট (secrets) ফাঁস হয়ে যেতে পারে। একজন নিরাপত্তা গবেষক এমন ২২টি ওপেন-সোর্স রিপোজিটরি খুঁজে পেয়েছেন যেখানে একটি পাবলিক ট্রিগার, “skip prompts” ফ্ল্যাগ সহ একটি AI টুল এবং উন্মুক্ত সিক্রেট মিলে তথ্য পাচারের একটি সহজ পথ তৈরি করে।
ত্রুটিটি যেভাবে কাজ করে
প্রজেক্টগুলোতে এখন সরাসরি CI পাইপলাইনে AI এজেন্ট—যেমন Claude Code, GitHub Copilot CLI এবং এই জাতীয় টুলগুলো—যুক্ত করা হচ্ছে। একটি ওয়ার্কফ্লো স্টেপ একটি শেল কমান্ড চালায় এবং প্রায়শই এমন একটি ফ্ল্যাগ যুক্ত করে যা টুলটিকে ইন্টারঅ্যাক্টিভ পারমিশন রিকোয়েস্ট উপেক্ষা করতে বলে। যখন কোনো পাবলিক ইনপুট—যেমন একটি ইস্যু, একটি কমেন্ট বা একটি পুল-রিকোয়েস্ট টাইটেল—এর মাধ্যমে ওয়ার্কফ্লোটি শুরু হয়, তখন আক্রমণকারীকে কেবল একটি টেক্সট লাইন পোস্ট করতে হয় যা AI একটি কমান্ড হিসেবে গণ্য করবে।
AI, যা “skip prompts” ফ্ল্যাগের কারণে ইতিমধ্যে অবাধ শেল অ্যাক্সেস পেয়েছে, ওয়ার্কফ্লোটি যে কোনো এনভায়রনমেন্ট ভেরিয়েবল বা ফাইল উন্মুক্ত করে দিলে তা পড়ে ফেলতে পারে। যদি জবটি সিক্রেটগুলোও লোড করে—যেমন API কী, ক্লাউড সার্ভিস টোকেন বা পূর্ণ সার্ভিস-অ্যাকাউন্ট ক্রেডেনশিয়াল—তবে AI সেই ভ্যালুগুলো সরাসরি আক্রমণকারীর নিয়ন্ত্রিত সার্ভারে পাঠিয়ে দেয়। এখানে কোনো কোড পরিবর্তন বা নতুন ডিপেন্ডেন্সি ছাড়াই, কেবল একটি নিরীহ দেখতে কমেন্টের মাধ্যমে এই কাজ করা সম্ভব।
বাস্তব উদাহরণ
গবেষক তিনটি ঝুঁকিপূর্ণ রিপোজিটরি নিশ্চিত করেছেন যা ইতিমধ্যে প্যাচ করা হয়েছে:
- pymc-labs/pymc-marketing – প্রম্পট ইনজেকশনের মাধ্যমে একটি পাবলিক ইস্যু ব্যবহার করে Anthropic API কী হাতিয়ে নেওয়া সম্ভব ছিল।
- MadAppGang/dingo – ওয়ার্কফ্লোটি Claude Code-কে পূর্ণ Bash অ্যাক্সেস দিয়েছিল এবং একই জবে দুটি সিক্রেট উন্মুক্ত করে ফেলেছিল।
- MadAppGang/claudish – dingo প্রজেক্টের মতো একই ঝুঁকিপূর্ণ টেমপ্লেট ব্যবহার করেছিল।
একটি অনুসন্ধানে একটি লাইভ ক্লাউড-সার্ভিস অ্যাকাউন্ট কী পাওয়া গেছে, যা গবেষক সরাসরি একটি বড় AI প্রোভাইডারের সিকিউরিটি টিমের কাছে রিপোর্ট করেছেন। আরও বারোটি রিপোর্ট মেইনটেইনারদের কাছে পেন্ডিং রয়েছে; সমাধান কার্যকর না হওয়া পর্যন্ত তাদের নাম প্রকাশ করা হচ্ছে না।
ঝুঁকির মাত্রা
যখন একজন আক্রমণকারী কোনো সিক্রেট বের করে নেয়, তখন এর ক্ষতি তাৎক্ষণিক এবং ব্যয়বহুল হতে পারে। একটি ক্লাউড-সার্ভিস অ্যাকাউন্ট কী কম্পিউট রিসোর্স, স্টোরেজ বাকেট এবং অন্যান্য পেইড সার্ভিসে অবাধ অ্যাক্সেস প্রদান করে। একটি লার্জ-ল্যাঙ্গুয়েজ-মডেল প্রোভাইডারের API কী দিয়ে আনলিমিটেড কুয়েরি চালানো সম্ভব, যা সম্ভাব্য হাজার হাজার ডলারের খরচ ঘটাতে পারে। যেহেতু এই এক্সপ্লয়েটটি CI এনভায়রনমেন্টের ভেতরে চলে, তাই এই লঙ্ঘনটি ডাউনস্ট্রিম পর্যন্ত ছড়িয়ে পড়তে পারে: কম্প্রোমাইজড রানারে তৈরি যেকোনো আর্টিফ্যাক্টে ক্ষতিকারক কোড থাকতে পারে, যা একটি একক রিপোজিটরিকে সাপ্লাই-চেইন ভেক্টরে পরিণত করতে পারে।
যেসব টিম AI-সহায়তা সম্পন্ন CI-এর ওপর নির্ভর করে, তাদের জন্য এই ভারসাম্য রক্ষা করা বেশ কঠিন। অটো-জেনারেটেড কোড, লিন্টিং বা ডকুমেন্টেশনের সুবিধার বিপরীতে একটি পাবলিক কমেন্ট যে একটি গোপন ব্যাকডোর হয়ে উঠতে পারে, সেই ঝুঁকিকেও বিবেচনায় রাখতে হবে।
কেন এই দুর্বলতাটি সহজে ধরা পড়ে না
গবেষক প্রাথমিকভাবে ছয়টি রিপোর্ট জমা দিয়েছিলেন যা পরে প্রত্যাহার করা হয়। এই প্রত্যাহারটি GitHub Actions-এর পারমিশন চেক সংক্রান্ত কিছু অনুমানের কারণে হয়েছিল, অ্যাকশনের সোর্স কোড লাইন-বাই-লাইন পর্যালোচনার কারণে নয়। ডকুমেন্টেশন এবং সহজাত ধারণা বিভ্রান্তিকর হতে পারে; একটি AI-চালিত স্টেপের নিরাপত্তা নিশ্চিত করার একমাত্র নির্ভরযোগ্য উপায় হলো টুলটি চালানোর কোড এবং ওয়ার্কফ্লো YAML ফাইলটি পুঙ্খানুপুঙ্খভাবে পরীক্ষা করা।
প্রশমন চেকলিস্ট
আপনি যদি কোনো GitHub Actions ওয়ার্কফ্লোর ভেতরে কোনো AI CLI বা অনুরূপ টুল চালান, তবে মার্জ করার আগে এই দুটি প্রশ্নের উত্তর দিন:
১. কে ওয়ার্কফ্লোটি ট্রিগার করতে পারে?
ট্রিগারগুলোকে বিশ্বস্ত ইভেন্টের (যেমন: প্রটেক্টেড ব্রাঞ্চে পুশ করা) মধ্যে সীমাবদ্ধ রাখুন অথবা এক্সটার্নাল কন্ট্রিবিউটরদের দ্বারা শুরু করা রানের জন্য স্পষ্ট অনুমোদনের ব্যবস্থা রাখুন। অতিরিক্ত গেটিং ব্যবস্থা ছাড়া on: issue_comment বা on: issues ব্যবহার করা এড়িয়ে চলুন।
২. একই জবে কোন সিক্রেটগুলো লোড করা হচ্ছে? যে জবে অবাধ শেল অ্যাক্সেসসহ কোনো AI এজেন্ট চলে, সেখানে কখনোই API কী, ক্লাউড টোকেন বা সার্ভিস-অ্যাকাউন্ট ক্রেডেনশিয়াল উন্মুক্ত করবেন না। সিক্রেট-সমৃদ্ধ স্টেপগুলোকে আলাদা জব বা রানারে ভাগ করে নিন যেখানে AI টুল ব্যবহার করা হবে না।
অতিরিক্ত সুরক্ষা ব্যবস্থা:
- পারমিশন প্রম্পট স্কিপ করার ফ্ল্যাগটি সরিয়ে ফেলুন, যাতে শেল কমান্ড চালানোর আগে AI টুলটিকে স্পষ্ট কনফার্মেশন বা অনুমোদনের জন্য অনুরোধ করতে হয়।
- এমন একটি স্টেপ যোগ করুন যা AI টুলটি পড়তে পারে এমন যেকোনো এনভায়রনমেন্ট ভেরিয়েবলকে স্যানিটাইজ বা রিড্যাক্ট (redact) করে দেয়।
- নেটওয়ার্ক এগ্রেস কন্ট্রোলসহ সেলফ-হোস্টেড রানার ব্যবহার করুন যাতে যেকোনো অনির্দিষ্ট এন্ডপয়েন্টে তথ্য পাচার রোধ করা যায়।
পাল্টা যুক্তি: CI-তে AI-এর উপযোগিতা
সমর্থকরা যুক্তি দেন যে উৎপাদনশীলতা বৃদ্ধি এই ঝুঁকির চেয়ে বেশি গুরুত্বপূর্ণ। স্বয়ংক্রিয় কোড সাজেশন রিভিউ করার সময় কমিয়ে দেয় এবং AI-চালিত টেস্টিং দ্রুত বাগ শনাক্ত করতে সাহায্য করে। তবুও, এই একই সুবিধা অ্যাটাক সারফেস বা আক্রমণের ক্ষেত্রকে আরও বিস্তৃত করে। মূল বিষয়টি AI ত্যাগ করা নয়, বরং শেল-লেভেল প্রিভিলেজ থাকা যেকোনো টুলকে একটি সম্ভাব্য ভেক্টর হিসেবে বিবেচনা করা।
পরবর্তী করণীয়
এই ফলাফলগুলো ইতিমধ্যে GitHub-এর সিকিউরিটি ফোরামগুলোতে AI-চালিত Actions-এর জন্য আরও কঠোর ডিফল্ট পারমিশন নিয়ে আলোচনার সূত্রপাত করেছে। ভবিষ্যতের প্ল্যাটফর্ম আপডেটগুলোতে অন্তর্ভুক্ত থাকতে পারে:
- একটি ফ্ল্যাগ যা AI টুলগুলোকে সরাসরি শেল অ্যাক্সেস ছাড়াই একটি sandboxed পরিবেশে চলতে বাধ্য করবে।
- ইস্যু বডি বা কমেন্টে prompt-injection প্যাটার্ন শনাক্ত করার বিল্ট-ইন ব্যবস্থা।
- যখন কোনো workflow পাবলিক ট্রিগার এবং সিক্রেট সম্বলিত জবগুলোকে মিশ্রিত করে, তখন স্বয়ংক্রিয় সতর্কতা।
আপাতত, এর দায়ভার রিপোজিটরি মেইনটেইনারদের ওপর। শনাক্ত করা ২২টি রিপোজিটরি দেখায় যে এই সমস্যাটি বিচ্ছিন্ন কোনো ঘটনা নয়; যে কোনো প্রজেক্ট যা একই workflow প্যাটার্ন অনুসরণ করে, তা ঝুঁকির মুখে রয়েছে। কোনো আক্রমণকারী সমস্যাটি খুঁজে বের করার আগেই CI কনফিগারেশনের একটি দ্রুত অডিট সমস্যাটি প্রকাশ করতে পারে।
মূল কথা: একটি পাবলিক GitHub ইস্যুর মাত্র একটি লাইন একটি AI এজেন্টকে আপনার CI এনভায়রনমেন্টের ওপর পূর্ণ নিয়ন্ত্রণ দিতে পারে এবং সেখানে সংরক্ষিত সিক্রেটগুলো চুরি করতে পারে। কে আপনার workflow চালু করতে পারে তা যাচাই করুন, AI-চালিত ধাপগুলো থেকে সিক্রেটগুলোকে দূরে রাখুন এবং যে কোনো ফ্ল্যাগ যা অনিয়ন্ত্রিত পারমিশন দেয় তা পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন। একটি নিরাপত্তা লঙ্ঘনের (breach) ক্ষয়ক্ষতি একটি সুশৃঙ্খল পর্যালোচনার প্রচেষ্টার চেয়ে অনেক বেশি।
