XML বাহ্যিক সত্তা ইনজেকশন (XXE)

OWASP বিভাগ: MASVS-CODE: কোডের গুণমান

সংক্ষিপ্ত বিবরণ

এক্সএমএল এক্সটার্নাল এনটিটি ইনজেকশন (XXE) হলো এক্সএমএল ইনপুট পার্স করে এমন অ্যাপ্লিকেশনগুলোর বিরুদ্ধে একটি আক্রমণ। একটি দুর্বলভাবে কনফিগার করা এক্সএমএল পার্সার যখন কোনো এক্সটার্নাল এনটিটির রেফারেন্সসহ অবিশ্বস্ত এক্সএমএল ইনপুট প্রসেস করে, তখন একটি XXE আক্রমণ ঘটে। এই আক্রমণটি ডিনায়াল অফ সার্ভিস, ফাইল সিস্টেম অ্যাক্সেস বা ডেটা এক্সফিলট্রেশনসহ একাধিক ঘটনা ঘটানোর জন্য ব্যবহার করা যেতে পারে।

প্রভাব

যখন কোনো অ্যাপ্লিকেশন একটি XML ডকুমেন্ট পার্স করে, তখন এটি ডকুমেন্টের মধ্যে থাকা যেকোনো DTD (ডকুমেন্ট টাইপ ডেফিনিশন, যা এক্সটার্নাল এনটিটি নামেও পরিচিত) প্রসেস করতে পারে। একজন আক্রমণকারী DTD হিসেবে ক্ষতিকারক কোড প্রবেশ করিয়ে এই আচরণের সুযোগ নিতে পারে। এরপর এই কোডটি ডিভাইসের ফাইল সিস্টেমের এমন অংশ অ্যাক্সেস করতে পারে, যা শুধুমাত্র অ্যাপ্লিকেশনটির জন্য অ্যাক্সেসযোগ্য এবং যেখানে সংবেদনশীল ডেটা থাকার সম্ভাবনা থাকে। উপরন্তু, এই ক্ষতিকারক কোডটি ডিভাইস থেকে রিকোয়েস্ট পাঠাতে পারে, যার ফলে পেরিমিটার নিরাপত্তা ব্যবস্থাগুলো সম্ভাব্যভাবে বাইপাস হয়ে যেতে পারে।

সর্বশেষে, যদি অ্যাপ্লিকেশনটি DTD-গুলিকে প্রসারিত করে, তাহলে এটি রেফারেন্সকৃত এনটিটিগুলির একাধিক পুনরাবৃত্তির পরিস্থিতি তৈরি করতে পারে, যা ডিভাইসের রিসোর্স নিঃশেষ করে দেয় এবং ডিনায়াল অফ সার্ভিস (DoS) ঘটাতে পারে।

প্রশমন

ডিটিডি নিষ্ক্রিয় করুন

XXE প্রতিরোধ করার সবচেয়ে নিরাপদ উপায় হলো সর্বদা DTD (এক্সটার্নাল এনটিটি) সম্পূর্ণরূপে নিষ্ক্রিয় করে রাখা। ব্যবহৃত পার্সারের উপর নির্ভর করে, পদ্ধতিটি XML Pull Parser লাইব্রেরির জন্য নিম্নলিখিত উদাহরণের অনুরূপ হতে পারে:

জাভা

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

কোটলিন

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

DTD নিষ্ক্রিয় করলে পার্সারটি ডিনায়াল অফ সার্ভিস অ্যাটাকের বিরুদ্ধেও সুরক্ষিত থাকে। যদি DTD সম্পূর্ণরূপে নিষ্ক্রিয় করা সম্ভব না হয়, তাহলে প্রতিটি পার্সারের জন্য নির্দিষ্ট পদ্ধতিতে এক্সটার্নাল এনটিটি এবং এক্সটার্নাল ডকুমেন্ট টাইপ ডিক্লারেশন নিষ্ক্রিয় করতে হবে।

বাজারে বিপুল সংখ্যক এক্সএমএল পার্সিং ইঞ্জিন থাকায়, XXE আক্রমণ প্রতিরোধের উপায়গুলো ইঞ্জিনভেদে ভিন্ন হয়। আরও তথ্যের জন্য আপনাকে আপনার ইঞ্জিনের ডকুমেন্টেশন দেখতে হতে পারে।

ইনপুট স্যানিটাইজেশন সম্পাদন করুন

অ্যাপ্লিকেশনটিকে এমনভাবে পুনঃকনফিগার করতে হবে যাতে ব্যবহারকারীরা XML ডকুমেন্টের প্রিম্বলে যথেচ্ছ কোড প্রবেশ করাতে না পারে। এটি সার্ভার-সাইডে যাচাই করতে হবে, কারণ ক্লায়েন্ট-সাইড নিয়ন্ত্রণগুলো এড়িয়ে যাওয়া সম্ভব।

অন্য একটি লাইব্রেরি ব্যবহার করুন

যদি ব্যবহৃত লাইব্রেরি বা পদ্ধতিটি সুরক্ষিতভাবে কনফিগার করা না যায়, তবে অন্য একটি বিবেচনা করা উচিত। XML Pull Parser এবং SAX Parser উভয়কেই DTD এবং এনটিটি নিষিদ্ধ করে সুরক্ষিতভাবে কনফিগার করা যায়।

সম্পদ