সিভিই -2014-7169 এর জন্য আপডেট হওয়া শেলশক দুর্বলতা পরীক্ষা কীভাবে কাজ করে?


11

আমি CVE-2014-6271 এর আসল পরীক্ষাটি বুঝতে পারি, যা ছিল:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

তবে আমি সিভিই -2014-7169 এর জন্য আপডেট হওয়া টেস্ট এবং সংশ্লিষ্ট আউটপুট দ্বারা বিভ্রান্ত:

$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:50:18 BST

কেউ কি সংক্ষিপ্তভাবে এখানে কী ঘটছে তা ব্যাখ্যা করতে পারে এবং কীভাবে এটি সিভিই -2014-6271 এর প্যাচটিকে বাইপাস করে?


উত্তর:


13

আমি প্রথমবার এই প্রশ্নটি পোস্ট করার পর থেকে আমি কিছুটা জন্য ওয়েবগুলির চারপাশে খনন করছি।

বাগের মূল আবিষ্কারক অনুসারে , সিভিই -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

  • দ্বিতীয় কমান্ড সহজভাবে সদ্য নির্মিত ফাইলের বিষয়বস্তু প্রদর্শন করে।


2

এটি আপনাকে একটি সুন্দর পরিষ্কার আউটপুট দেয় না, তবে এটি বাগ প্রদর্শন করে।

কোনও ত্রুটি না থাকলে, পরিবেশের পরিবর্তনশীলটিকে Xউপেক্ষা করা উচিত, ব্যাশ চালানো উচিত echo dateএবং বিড়ালের অভিযোগ করা উচিত যে ইকো নামে কোনও ফাইল নেই। যেমন ড্যাশ আচরণ করে তা বিবেচনা করুন:

me@myserver$ rm -f echo && env -i  X='() { (a)=>\' dash -c 'echo date'; cat echo
date
cat: echo: No such file or directory

আপনি আপনার প্রশ্নে যে আউটপুট দেখিয়েছেন আমি তার পুনরাবৃত্তি করব না এবং আমি কীভাবে এটি কাজ করে তা বোঝার ভান করব না, তবে বাশ চলছে dateএবং আউটপুটটিকে 'ইকো' নামে একটি ফাইলে রাখবে। dateএটি নিজেকে ব্যবহারযোগ্য এবং বিপজ্জনক বলে নিজেকে বোঝাতে বিকল্পের সাথে খেলতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.