গোপনীয় তথ্য ফাঁস হওয়া মানেই সবসময় ত্রুটিপূর্ণ কোড বা ঝুঁকিপূর্ণ লাইব্রেরি নয়। কখনও কখনও, বিষয়টি নির্ভর করে CI রান চলাকালীন আমরা কীভাবে গোপনীয় তথ্য পরিচালনা করি তার উপর, এবং CVE‑2025‑30066 হলো এর একটি প্রকৃষ্ট উদাহরণ যে কীভাবে এই বিষয়টি ভুল পথে যেতে পারে। GitHub Action tj‑actions/changed‑files, যা পরিবর্তিত ফাইল শনাক্ত করতে ব্যাপকভাবে ব্যবহৃত হয়, pull requestsগোপন তথ্য ফাঁসের একটি নীরব মাধ্যম হয়ে উঠেছিল। এখানে কী ঘটেছিল এবং কীভাবে আপনি আপনার অ্যাকাউন্ট সুরক্ষিত করতে পারেন তা বলা হলো। CI/CD অন্ধিসন্ধি pipeline.
CVE‑2025‑30066-এ কী ঘটেছে?
২০২৫ সালের মার্চ মাসের মাঝামাঝি সময়ে, tj-actions/changed-files হ্যাক হয়েছিল। আক্রমণকারী বিদ্যমান সংস্করণ ট্যাগগুলো (v45.0.7 পর্যন্ত) একটি ক্ষতিকারক ফাইলের দিকে নির্দেশ করার জন্য পুনরায় লিখেছিল। commitএর ফলে ডেভেলপারদের অলক্ষ্যে অ্যাকশনটির আচরণে পরিবর্তন আনা হয়েছিল; কোনো নতুন সংস্করণ প্রকাশ করা হয়নি, কেবল অদৃশ্যভাবে ট্যাগে কারসাজি করা হয়েছিল।
পেলোডটি ছিল সহজবোধ্য কিন্তু বিপজ্জনক: এটি একটি রিমোট Base64-এনকোডেড পাইথন স্ক্রিপ্ট টেনে আনত, যা ক্রেডেনশিয়ালের জন্য রানার মেমরি স্ক্যান করে সেগুলোকে লগে ডাম্প করত অথবা পাচার করে দিত। এটি tj-actions/changed-files-এর কোনো যৌক্তিক কোড ত্রুটি ছিল না; বরং এটি ছিল সেই পুনঃব্যবহারযোগ্য অ্যাকশনটি ব্যবহার করে CI ওয়ার্কফ্লোর মধ্যে কীভাবে গোপনীয় তথ্য ফাঁস হতে পারে, তার একটি অপব্যবহার। CVE-2025-30066 বাফার ওভারফ্লো সম্পর্কিত ছিল না; এটি ছিল CI ডিজাইনের একটি ব্যর্থতা, যা গোপনীয় তথ্য ফাঁসের সুযোগ করে দিয়েছিল।
প্রভাব: tj-actions/changed-files-এর প্রভাবিত সংস্করণগুলো ব্যবহারকারী যেকোনো রিপোজিটরিতে গোপনীয় তথ্য ফাঁসের ঝুঁকি ছিল, বিশেষ করে যদি ফাইল প্যাটার্ন বা CI আউটপুটে সংবেদনশীল টোকেন বা ফাইলগুলো অসুরক্ষিতভাবে পরিচালনা করা হতো।
কেন এটি পুনঃব্যবহারযোগ্য অ্যাকশনের উপর নির্ভরশীল ওয়ার্কফ্লোকে প্রভাবিত করে
ডেভসেকওপস ওয়ার্কফ্লো tj-actions/changed-files-এর উপর ব্যাপকভাবে নির্ভর করে:
- স্বয়ংক্রিয় পদ্ধতি প্রয়োগ করা pull request চেক
- নির্দিষ্ট পাথে পরিবর্তিত ফাইলগুলি সনাক্ত করুন
- অপ্রয়োজনীয় CI জব এড়িয়ে চলুন
কিন্তু এই ওয়ার্কফ্লো প্রায়শই একটি বিষয় উপেক্ষা করে: গ্লোব প্যাটার্নে কীভাবে সংবেদনশীল ডেটা অন্তর্ভুক্ত হতে পারে। ডেভেলপাররা ধরে নেন যে tj-actions/changed-files ডিফল্টরূপে সুরক্ষিতভাবে কাজ করে। যাইহোক, যদি আপনি গ্লোব ব্যবহার করেন কনফিগারেশন/** এবং গোপনীয়তা সংরক্ষিত থাকে configs/secrets.envআপনি এইমাত্র CI আউটপুট বা লগে একটি গোপন ফাইল যোগ করেছেন। এটি অ্যাকশনটির কোনো বাগ নয়; এটি একটি CI/CD ডিজাইনগত ত্রুটি যার ফলে গোপনীয় তথ্য ফাঁস হয়। CVE‑2025‑30066 এর একটি সুস্পষ্ট উদাহরণ।
কীভাবে গোপন তথ্য ফাঁস হলো (দুর্বলতার বিশ্লেষণ)
চলুন CVE‑2025‑30066-এর পেছনের মূল ব্যর্থতাটি বিশ্লেষণ করা যাক:
- গোলক প্যাটার্ন যেমন **/*.env অনিচ্ছাকৃতভাবে গোপন ফাইল মেলানো হয়েছে
- tj-actions/changed-files ঐ গোপনীয় তথ্যগুলোকে পরিবর্তিত ফাইল হিসেবে গণ্য করেছে।
- গোপনীয় তথ্যগুলো স্টেপ আউটপুট, লগ বা ডাউনস্ট্রিম জবে চলে যেত।
এটি ঘটেছে কারণ সিক্রেটগুলো ভার্সন-কন্ট্রোলড পাথে সংরক্ষণ করা হয়েছিল (যা একটি খারাপ সিদ্ধান্ত), এবং CI কনফিগ সেগুলোকে গ্লোবিং থেকে স্পষ্টভাবে বাদ দেয়নি (এটিও একটি ভুল)। সুতরাং এটি কোনো কোড বাগ নয়, বরং দুর্বল CI ডিজাইন হাইজিনের কারণে tj-actions/changed-files আউটপুটের সাথে সিক্রেট লিক হচ্ছে।
ব্যবহারিক অপব্যবহারের পথ: সিআই চাকরি থেকে ক্রেডেনশিয়াল প্রকাশ পর্যন্ত
একটি CI সেটআপের উদাহরণ যা tj-actions/changed-files এর মাধ্যমে গোপনীয় তথ্য ফাঁসের কারণ হয়েছিল:
If configs/secrets.env পরিবর্তিত হয়েছে:
- এটি tj-actions/changed-files দ্বারা চিহ্নিত করা হয়েছিল
- এটি অন্তর্ভুক্ত করা হয়েছে steps.changed.outputs.all_changed_files
- পরবর্তী ধাপগুলো এটিকে লগ করেছে বা স্ক্রিপ্টে পাঠিয়েছে, যার ফলে গোপনীয় তথ্য ফাঁস হয়েছে।
এই তথ্য ফাঁসের ঘটনাটি ঘটেছে কারণ CI লজিক সিক্রেটগুলোকে সাধারণ ফাইলের মতো বিবেচনা করেছিল। সিক্রেট ফাঁসের সূত্রপাত সেখান থেকেই, বাফার ওভারফ্লোর কারণে নয়, বরং একটি ত্রুটিপূর্ণ CI ডিজাইনে tj-actions/changed-files-এর অপব্যবহারের কারণে।
বিস্তার ঘটে নিম্নলিখিত আউটপুটগুলির মাধ্যমে:
If secrets.env যদি সেই তালিকায় থাকে, তাহলে এর ফাইলের নাম এবং সম্ভবত এর ভেতরের বিষয়বস্তুও বিল্ড লগে দেখা যেতে পারে। এমনকি শর্তসাপেক্ষ লজিকও, যেমন:
সংবেদনশীল নিদর্শন প্রকাশ করতে পারে। এটি একটি CI/CD ডিজাইনগত ত্রুটির কারণে গোপনীয় তথ্য ফাঁস হয়েছে, এটি অ্যাকশন কোডের কোনো ত্রুটি নয়।
কীভাবে নিরাপদে পুনঃব্যবহারযোগ্য ওয়ার্কফ্লো ব্যবহার করবেন এবং লিকেজ প্রতিরোধ করবেন
আপনার tj-actions/changed-files পরিত্যাগ করার প্রয়োজন নেই। আপনার উচিত গোপনীয়তাকে অগ্রাধিকার দেওয়ার মানসিকতা নিয়ে পুনঃব্যবহারযোগ্য অ্যাকশন ব্যবহার করা:
গোপনীয়তা-পরিচালনার সর্বোত্তম অনুশীলন
- গোপনীয় তথ্য কখনোই ভার্সন কন্ট্রোল করবেন না।
- সংবেদনশীল পথের সাথে মেলে এমন গ্লোব প্যাটার্ন এড়িয়ে চলুন।
- পরিবেশ-ভিত্তিক গোপনীয়তা ব্যবহার করুন (GITHUB_ENV, vaults, GitHub Secrets)
CI/CD কনফিগারেশন Guardrails
- অ্যাকশনগুলিকে সর্বদা অপরিবর্তনীয় SHA-তে পিন করুন, ট্যাগে নয় (কখনোই ব্যবহার করবেন না) @v45)
- tj-actions/changed-files আউটপুটকে দূষিত হিসেবে গণ্য করুন, এটিকে পরিশুদ্ধ বা ফিল্টার করুন।
- শুধুমাত্র স্যানিটাইজ করা হলেই আউটপুট সেট করুন।
⚠️ অনিরাপদ উদাহরণ:
উপরোক্ত অপব্যবহারটিই হলো গোপন তথ্য ফাঁস এবং CVE‑2025‑30066-এর পেছনের মূল কারণ।
নিরাপদ বিকল্প:
এর মাধ্যমে, আপনি এড়িয়ে যান CI/CD ডিজাইনগত ত্রুটির কারণে tj-actions/changed-files-এর মাধ্যমে গোপনীয় তথ্য ফাঁস হয়েছে।
উপরন্তু:
- যেখানে গোপনীয় তথ্য প্রদর্শিত হতে পারে, সেখানে লগিং নিষ্ক্রিয় বা সীমিত করুন।
- গিটহাবের গোপন মাস্কিং বৈশিষ্ট্যগুলি ব্যবহার করুন
- বিল্ড লগ এবং আর্টিফ্যাক্টগুলিতে অ্যাক্সেস সীমিত করুন
কুইক সিক্রেটস-সেফ সিআই ব্যবহারের চেকলিস্ট
| ভাল অভ্যাস |
|---|
| সংস্করণ-নিয়ন্ত্রিত ফাইলে গোপনীয় তথ্য সংরক্ষণ করবেন না। |
| ক্রেডেনশিয়ালের জন্য ভল্ট বা গিটহাব সিক্রেটস ব্যবহার করুন। |
| সর্বদা tj-actions/changed-files-কে অপরিবর্তনীয় SHA-তে পিন করুন। |
| tj-actions/changed-files থেকে প্রাপ্ত আউটপুট ফিল্টার বা পরিমার্জন করুন |
| গ্লোব প্যাটার্নে কখনও গোপন পথ অন্তর্ভুক্ত করবেন না। |
| সংবেদনশীল তথ্য প্রকাশ করতে পারে এমন লগগুলি মাস্ক করুন বা সীমাবদ্ধ করুন। |
| উত্তরাধিকারসূত্রে প্রাপ্ত CI কনফিগারেশনগুলি প্রায়শই নিরীক্ষা করুন |
জাইজেনির ভূমিকা: বৃহৎ পরিসরে সিআই গোপনীয়তা প্রয়োগ
জাইজেনি সুরক্ষিত CI/CD pipelineমনোযোগ দিয়ে বাস্তব জগতে কীভাবে গোপনীয়তা রক্ষা করা হয়, ব্যবহার করা হয় এবং প্রকাশ করা হয় ডেভঅপস ওয়ার্কফ্লো। এটি শুধু কোড স্ক্যান করার বিষয় নয়; বরং লাইভ প্রক্রিয়ার মাধ্যমে গোপনীয় তথ্য ব্যবস্থাপনার সর্বোত্তম অনুশীলনগুলো প্রয়োগ করা। pipeline বিশ্লেষণ।
অনিরাপদ আউটপুট ব্যবহার সনাক্তকরণ
- গিটহাব অ্যাকশন স্ক্যান করে ব্যবহারের জন্য echo, run, এবং আউটপুট যেখানে ${{ steps.*.outputs.* }} সংবেদনশীল মান অন্তর্ভুক্ত থাকতে পারে
- সরাসরি, ইচ্ছাকৃতভাবে, বা ভুলবশত গোপনীয় তথ্যের উল্লেখ বা মুদ্রণ করা হলে তা শনাক্ত করে।
ফাঁস হওয়া গোপনীয় তথ্য পর্যবেক্ষণ
- লগ এবং স্টেপ আউটপুটের মধ্যে উচ্চ-এনট্রপি মান (এপিআই কী, টোকেন) সনাক্ত করে।
- গোপনীয় তথ্য প্রকাশিত হলে সতর্কবার্তা সক্রিয় করে। pipeline লগ, এমনকি যদি ডাউনস্ট্রিমে মাস্ক করা থাকে
ভুলভাবে কনফিগার করা অ্যাকশন ব্যবহার
- সমস্ত গিটহাব অ্যাকশন ট্র্যাক করে pipelineআপোসকৃত সংস্করণগুলির ব্যবহার সনাক্ত করতে (যেমন, tj-actions/changed-files@v45)
- ফাইল-ম্যাচিং প্যাটার্ন অডিট করে যার মধ্যে সম্ভাব্য গোপনীয় তথ্য অন্তর্ভুক্ত থাকে যেমন /*.env, *.key, অথবা .env.*
নীতি-ভিত্তিক সিআই Guardrails
- তৃতীয় পক্ষের কার্যকলাপের জন্য SHA-পিনিং প্রয়োগ করে
- অনিরাপদ ফাইল গ্লোবের ব্যবহার ব্লক করে যা গোপনীয় তথ্য লগে ফাঁস করে দিতে পারে।
- প্রতিরোধ pipelineওয়ার্কফ্লো আউটপুটের অংশ হিসেবে সংবেদনশীল মান নির্গমন করা থেকে বিরত থাকা
ওয়ার্কফ্লোকে আপনার থ্রেট সারফেসের অংশ হিসেবে বিবেচনা করে, জাইজেনি নিশ্চিত করে যে সিক্রেট হাইজিন শুধু একটি সেরা অনুশীলনই নয়, বরং এটি একটি অন্তর্নির্মিত প্রতিরক্ষা ব্যবস্থা।
উপসংহার: একটি সাধারণ কাজের অপব্যবহারের মাধ্যমেই গোপন তথ্য ফাঁস হতে পারে।
CVE‑2025‑30066 কোনো লাইব্রেরি বাগ ছিল না; এটি ছিল একটি CI/CD tj-actions/changed-files-এর অনুপযুক্ত ব্যবহারের ফলে ডিজাইনগত ত্রুটি। DevSecOps টিমগুলোর যা শিক্ষণীয়:
- CI-তে থাকা প্রতিটি গ্লোব/ফাইল রেফারেন্সকে একটি সম্ভাব্য লিক পয়েন্ট হিসেবে বিবেচনা করুন।
- ভুলবশত গোপনীয় তথ্য অন্তর্ভুক্ত হচ্ছে কিনা তা নিশ্চিত করতে ওয়ার্কফ্লো নিয়মিত নিরীক্ষা করুন।
- সুরক্ষিত ভল্ট বা এনভায়রনমেন্ট সিক্রেট ব্যবহার করুন, কখনোই ভার্সন কন্ট্রোলে সিক্রেট চেক ইন করবেন না।
- সমস্ত ওয়ার্কফ্লো আউটপুট স্যানিটাইজ বা ফিল্টার করুন
- নিরীক্ষাযোগ্যতা বজায় রাখার জন্য সংবেদনশীল ওয়ার্কফ্লো কার্যকলাপ লগ করুন।
CI হলো কোড। ওয়ার্কফ্লো হলো কোড। লগ এবং আউটপুট হলো কোড। প্রতিটি ধাপে আপনার গোপনীয়তা রক্ষা করুন, নতুবা এমন একটি গোপনীয়তা ফাঁসের পরিস্থিতির ঝুঁকি নিন যার জন্য কোনো হ্যাকারের প্রয়োজন নেই, শুধু একটি খারাপ পরিস্থিতিই যথেষ্ট। CI/CD নকশার পছন্দ।





