আমি প্রথমবার এই প্রশ্নটি পোস্ট করার পর থেকে আমি কিছুটা জন্য ওয়েবগুলির চারপাশে খনন করছি।
বাগের মূল আবিষ্কারক অনুসারে , সিভিই -2014-6271 প্যাচের আগে ব্যাশ কোনও ফাংশন আমদানি করে যেমন:
foo=() {
code
}
একটি স্থানের সাথে সমান চিহ্নটি প্রতিস্থাপন করে এবং এর ব্যাখ্যা দিয়ে ... যার অর্থ ফাংশন সংজ্ঞা ছাড়িয়ে ব্যাখ্যা করা সম্ভব হয়েছিল।
সিভিই -২০১--6271১ এর প্যাচটি ফাংশন সংজ্ঞাতে মূল্যায়ন সীমাবদ্ধ করার জন্য পার্স_এন্ড_একসেকিউট () ফাংশনের একটি বিশেষ মোড চালু করেছে এবং এর বাইরে নয়।
যাইহোক, এই থ্রেডে বর্ণিত হিসাবে, সিভিই -2014-7169 দুর্বলতা পরীক্ষার বিশেষ কারুকৃত পরিবেশ পরিবর্তনশীল 1) পার্সারকে মৃত্যুর মধ্যে বিভ্রান্ত করে 2) বাফারে স্ক্র্যাপ ছেড়ে 3) আসল বাশ কমান্ড যখন করবে তখন সম্পূর্ণ পরিবর্তন করুন এটি ইতিমধ্যে বাফারে থাকা স্ক্র্যাপগুলির সাথে একত্রিত হয়।
সুতরাং পরিবেশের পরিবর্তনশীল বিচ্ছিন্ন করতে:
X='() { (a)=>\'
- পার্সার বিশ্লেষণ করবে
() { (a)=>\
। নোট যে \
স্ট্রিং অংশ; এটা করা হয় না trailing একক উদ্ধৃতি পলায়নের।
() {
- পার্সার এটি একটি ফাংশন সংজ্ঞা হিসাবে চিহ্নিত করে।
(a)=
- এটি পার্সারকে মৃত্যুর মধ্যে বিভ্রান্ত করে।
>\
- পার্সার বাফারে বসে চূড়ান্ত দুটি অক্ষর রেখে দেয়।
>\[NEWLINE]
sh
কমান্ড চালানোর আগে এক পর্যায়ে বাফারে একটি নতুন লাইন স্থাপন করা হয়।
>\[NEWLINE]echo date
- যখন
sh
ডাকা হয় (যা সম্ভবত এই ক্ষেত্রে বাশ করার জন্য একটি সিমলিংক), এটি echo date
বাফারে ইতিমধ্যে বিদ্যমান অক্ষরগুলিতে এর কমান্ড যুক্তি যুক্ত করে ।
>echo date
- যেহেতু নিউলাইনটি এড়িয়ে গেছে, বাশ বাফারকে যেমন পার্স করবে
>echo date
, তেমন প্রভাব রয়েছে date > echo
। নামের একটি ফাইল echo
তৈরি করা হয় এবং date
কমান্ডের স্টাডআউট এতে পুনর্নির্দেশ করা হয়।
; cat echo
- দ্বিতীয় কমান্ড সহজভাবে সদ্য নির্মিত ফাইলের বিষয়বস্তু প্রদর্শন করে।