টি এল; ডিআর
শেলশক দুর্বলতা সম্পূর্ণরূপে ঠিক করা হয়েছে
- ব্যাশ -২.০৫ বি শাখায়: 2.05b.10 এবং তারপরে (10 টি প্যাচ অন্তর্ভুক্ত)
- ব্যাশ -৩.০ শাখায়: 3.0.০.১৯ এবং তারপরে (প্যাচ ১৯ টি অন্তর্ভুক্ত)
- বাশ -৩.১ শাখায়: ৩.১.২০ এবং তারপরের (প্যাচ ২০ টি অন্তর্ভুক্ত)
- ব্যাশ -৩.২ শাখায়: ৩.২.৫৪ এবং তার বেশি (প্যাচ ৫৪ টি অন্তর্ভুক্ত)
- ব্যাশ -৯.০ শাখায়: ৪.০.৪১ এবং তারপরে (প্যাচ ৪১ টি অন্তর্ভুক্ত)
- বাশ -৪.১ শাখায়: ৪.১.১৪ এবং তারপরে (প্যাচ ১৪ অন্তর্ভুক্ত)
- ব্যাশ -৪.২ শাখায়: ৪.২.৫০ এবং তারপরে (প্যাচ ৫০ টি অন্তর্ভুক্ত)
- ব্যাশ -৩.৩ শাখায়: ৪.৩.২7 এবং তারপরে (প্যাচ ২ included অন্তর্ভুক্ত)
যদি আপনার বাশ কোনও পুরানো সংস্করণ দেখায় তবে আপনার ওএস বিক্রেতারাই এটি নিজেরাই প্যাচ করতে পেরেছেন, তাই চেক করা ভাল।
এমন:
env xx='() { echo vulnerable; }' bash -c xx
"দুর্বল" দেখায়, আপনি এখনও দুর্বল। এটিই একমাত্র পরীক্ষা যা প্রাসঙ্গিক (বাশ পার্সারটি এখনও কোনও পরিবেশের ভেরিয়েবলের কোডের সাথে প্রকাশিত হয়েছে কিনা )।
বিস্তারিত বিবরণ।
বাগটি ১৯৮৯ সালের ৫ ই আগস্ট ব্রায়ান ফক্সের মাধ্যমে রফতানি / আমদানি করা ফাংশনটির প্রাথমিক বাস্তবায়নে ছিল এবং সুরক্ষার আগে বাশ-এর ব্যাপক ব্যবহার ছিল না এমন সময়ে প্রায় এক মাস পরে প্রথম বাশ -১.০৩ এ প্রকাশিত হয়েছিল security এটিই ছিল উদ্বেগের বিষয় এবং এইচটিটিপি এবং ওয়েব বা লিনাক্স এমনকি বিদ্যমান ছিল।
1.05 এ চেঞ্জলগ থেকে :
Fri Sep 1 18:52:08 1989 Brian Fox (bfox at aurel)
* readline.c: rl_insert (). Optimized for large amounts
of typeahead. Insert all insertable characters at once.
* I update this too irregularly.
Released 1.03.
[...]
Sat Aug 5 08:32:05 1989 Brian Fox (bfox at aurel)
* variables.c: make_var_array (), initialize_shell_variables ()
Added exporting of functions.
সেই সময়টি সম্পর্কে gnu.bash.bug এবং comp.unix.questions- এ কিছু আলোচনাও বৈশিষ্ট্যটির উল্লেখ করে।
এটি সেখানে কীভাবে পেল তা বোঝা সহজ।
bash env vars এর মতো ফাংশন রফতানি করে
foo=() {
code
}
এবং আমদানিতে, এটির যা যা করণীয় তা হল =
স্থানের সাথে প্রতিস্থাপন করা ... এটি বাদে এটি অন্ধভাবে ব্যাখ্যা করা উচিত নয়।
এটি এর মধ্যেও ভেঙে গেছে bash
(বোর্ন শেলের বিপরীতে), স্কেলার ভেরিয়েবল এবং ফাংশনগুলির আলাদা নামের নাম রয়েছে। আসলে যদি আপনার হয়
foo() { echo bar; }; export -f foo
export foo=bar
bash
উভয় আনন্দের সাথে পরিবেশে রাখে (হ্যাঁ একই পরিবর্তনশীল নাম সহ এন্ট্রি) তবে অনেক সরঞ্জাম (অনেকগুলি শেল সহ) সেগুলি প্রচার করে না।
কেউ তর্ক করতে পারে যে বাশকে তার জন্য একটি BASH_
নেমস্পেসের উপসর্গ ব্যবহার করা উচিত কারণ এটি কেবল বাশ থেকে বাশ পর্যন্ত প্রাসঙ্গিক ars অনুরূপ বৈশিষ্ট্যের জন্য rc
একটি fn_
উপসর্গ ব্যবহার করে।
এটি কার্যকর করার আরও ভাল উপায় হ'ল সমস্ত রফতানি ভেরিয়েবলের সংজ্ঞাটি একটি ভেরিয়েবলের মধ্যে দেওয়া যেমন:
BASH_FUNCDEFS='f1() { echo foo;}
f2() { echo bar;}...'
সেই ইচ্ছে এখনও রয়েছে sanitized করা কিন্তু অন্তত চেয়ে বেশি নানারকম হতে পারে না যে হবে $BASH_ENV
বা $SHELLOPTS
...
এখানে একটি প্যাচ রয়েছে যা bash
সেখানে ফাংশন সংজ্ঞা ব্যতীত অন্য যে কোনও কিছুর ব্যাখ্যা করা থেকে বিরত রাখে ( https://lists.gnu.org/archive/html/bug-bash/2014-09/msg00081.html ), এবং এটিই একটি বিভিন্ন লিনাক্স বিতরণ থেকে সমস্ত সুরক্ষা আপডেটে প্রয়োগ করা হয়েছে।
তবে, বাশ এখনও সেখানে কোডটি ব্যাখ্যা করে এবং দোভাষীর যে কোনও বাগ ব্যবহার করা যেতে পারে। এরকম একটি ত্রুটি ইতিমধ্যে পাওয়া গেছে (সিভিই -2014-7169) যদিও এর প্রভাব অনেক ছোট। সুতরাং শীঘ্রই আরও একটি প্যাচ আসবে।
যতক্ষণ না কোনও কঠোর স্থিরকরণ যা ব্যাশকে কোনও ভেরিয়েবলের কোড ব্যাখ্যা করতে বাধা দেয় ( BASH_FUNCDEFS
উপরের পদ্ধতির ব্যবহারের মতো ), আমরা নিশ্চিতভাবে জানতে পারি না যে আমরা বাশ পার্সারের কোনও বাগ থেকে ঝুঁকিপূর্ণ নই কিনা। এবং আমি বিশ্বাস করি খুব শীঘ্রই বা পরে প্রকাশিত হবে এমন একটি কঠোর সমাধান fix
2014-09-28 সম্পাদনা করুন
পার্সারে দুটি অতিরিক্ত বাগ পাওয়া গেছে (CVE-2014-718 {6,7}) (নোট করুন যে বেশিরভাগ শেলগুলি কর্নারের ক্ষেত্রে পার্সারে বাগ থাকতে বাধ্য থাকে, যদি সেই পার্সার হ্যান থাকে তবে এটি উদ্বেগের বিষয় হত না অবিশ্বস্ত ডেটা প্রকাশ করা হবে না)।
সমস্ত 3 বাগ 7169, 7186 এবং 7187 নিম্নলিখিত প্যাচগুলিতে স্থির করা হয়েছে, রেড হ্যাট দৃ the়তার সমাধানের জন্য চাপ দিয়েছেন। তাদের প্যাচে, তারা আচরণটি পরিবর্তিত করে যাতে ফাংশনগুলি BASH_FUNC_myfunc()
কমবেশি চেটের ডিজাইনের সিদ্ধান্তকে কমবেশি চ্যালেঞ্জের আকারে রফতানি করা যায় called
চেট পরে এটি অফিসিয়াল আপস্ট্রিম বাশ প্যাচ হিসাবে ঠিক করে প্রকাশ করেছিল ।
সেই শক্তকরণ প্যাচ, বা এর রূপগুলি এখন বেশিরভাগ প্রধান লিনাক্স বিতরণের জন্য উপলব্ধ এবং অবশেষে এটি অ্যাপল ওএস / এক্স এ তৈরি করে।
এটি এখন পার্সারে থাকা দুটি অন্যান্য দুর্বলতা (সিভিই -2014-627 including 7,8}) সহ ভেক্টরটির মাধ্যমে পার্সারকে শোষণের যে কোনও স্বেচ্ছাসেবীর জন্য উদ্বেগকে কেন্দ্র করে যা পরে মাইচা জালিউস্কি (সিভিই -2014-6278) প্রায় প্রকাশিত হয়েছিল CVE-2014-6271 এর মতোই খারাপ) কৃতজ্ঞতার সাথে বেশিরভাগ লোকের কাছে কঠোরতা প্যাচ ইনস্টল করার সময় ছিল
পার্সারে থাকা বাগগুলি পাশাপাশি সংশোধন করা হবে, তবে পার্সারটি এখন আর অবিশ্বস্ত ইনপুটটির কাছে এত সহজে উন্মুক্ত না হওয়ার কারণে এটি আর বেশিরভাগ ইস্যুতে থাকে না।
মনে রাখবেন যে সুরক্ষার দুর্বলতাটি স্থির হয়ে গেলেও সম্ভবত আমরা সেই ক্ষেত্রে কিছু পরিবর্তন দেখতে পাব। জন্য CVE-2014-6271 জন্য প্রারম্ভিক ফিক্স অনুন্নত সহাবস্থানযোগ্যতা যে এটা দিয়ে আমদানি ফাংশন স্টপ ভঙ্গ করেছে .
বা :
বা /
তাদের নামটি দিয়ে। এগুলি এখনও বাশ দ্বারা ঘোষিত হতে পারে যদিও এটি একটি অসামঞ্জস্যপূর্ণ আচরণ করে। যেহেতু .
এবং :
তাদের নামে ফাংশনগুলি সাধারণত ব্যবহৃত হয়, সম্ভবত এটি কোনও প্যাচ পরিবেশের কমপক্ষে সেগুলি গ্রহণ করে পুনরুদ্ধার করবে।
কেন আগে পাওয়া গেল না?
এটিও আমি এমন কিছু নিয়ে ভাবছিলাম। আমি কয়েকটি ব্যাখ্যা দিতে পারি।
প্রথমত, আমি মনে করি যে কোনও সুরক্ষা গবেষক (এবং আমি পেশাদার সুরক্ষার গবেষক নই) যদি বিশেষভাবে বাশের দুর্বলতার সন্ধান করত তবে তারা সম্ভবত এটি খুঁজে পেত।
উদাহরণস্বরূপ, আমি যদি সুরক্ষা গবেষক হয়ে থাকি তবে আমার পন্থাগুলি হতে পারে:
- কোথা
bash
থেকে ইনপুট আসে এবং এটি এর সাথে কী করে তা দেখুন। এবং পরিবেশ একটি সুস্পষ্ট এক।
bash
দোভাষীকে কোন জায়গায় ডাকা হয়েছে এবং কোন ডেটাতে দেখুন। আবার, এটি দাঁড়ানো হবে।
- রফতানি করা ক্রিয়াকলাপগুলির আমদানি এমন বৈশিষ্ট্যগুলির মধ্যে
bash
একটি যা সেতুড / সেটগিড থাকে যখন অক্ষম থাকে, যা এটি দেখার জন্য আরও প্রকট স্থান করে তোলে।
এখন, আমার সন্দেহ হয় যে bash
(দোভাষী) কেউ হুমকি হিসাবে বিবেচনা করবেন না, বা হুমকিও সেভাবে আসতে পারে বলে আমি সন্দেহ করি ।
bash
অনুবাদক অবিশ্বস্ত ইনপুট প্রক্রিয়া বোঝানো হয় না।
শেল স্ক্রিপ্টগুলি (দোভাষী নয়) প্রায়শই সুরক্ষার দৃষ্টিকোণ থেকে ঘনিষ্ঠভাবে দেখানো হয়। শেল সিনট্যাক্সটি এতই বিশ্রী এবং নির্ভরযোগ্য স্ক্রিপ্টগুলি লেখার সাথে অনেকগুলি সতর্কতা রয়েছে (কখনও কখনও আমাকে বা অন্যদের বিভক্ত + গ্লোব অপারেটরের উল্লেখ করতে দেখেছি বা উদাহরণস্বরূপ আপনার কেন ভেরিয়েবলগুলি উদ্ধৃত করা উচিত?) যে স্ক্রিপ্টগুলিতে এই প্রক্রিয়াটিতে সুরক্ষা দুর্বলতা খুঁজে পাওয়া বেশ সাধারণ বিষয় common অবিশ্বস্ত ডেটা
এ কারণেই আপনি প্রায়শই শুনেন যে আপনার সিজিআই শেল স্ক্রিপ্টগুলি লেখা উচিত নয়, বা বেশিরভাগ ইউনিসগুলিতে সেতু স্ক্রিপ্টগুলি অক্ষম থাকে। অথবা বিশ্ব -রচনামূলক ডিরেক্টরিতে ফাইল প্রক্রিয়া করার সময় আপনার অতিরিক্ত সতর্কতা অবলম্বন করা উচিত ( উদাহরণস্বরূপ CVE-2011-0441 দেখুন )।
ফোকাসটি সেটির দিকে রয়েছে, শেল স্ক্রিপ্টগুলি, দোভাষী নয়।
আপনি কোনও শেল ইন্টারপ্রেটারকে অবিশ্বস্ত ডেটাতে (ব্যাখ্যার জন্য শেল কোড হিসাবে বিদেশী ডেটা খাওয়ানোর) মাধ্যমে eval
বা .
ব্যবহারকারীর সরবরাহিত ফাইলগুলিতে কল করতে পারেন, তবে তার bash
শোষণের জন্য আপনার কোনও দুর্বলতার প্রয়োজন হবে না । এটি একেবারে সুস্পষ্ট যে আপনি শেলটির ব্যাখ্যা দেওয়ার জন্য যদি অবাঞ্ছিত ডেটা পাস করে থাকেন তবে এটি এর ব্যাখ্যা করবে।
সুতরাং শেলটি বিশ্বস্ত প্রসঙ্গে বলা হয়। এটি ব্যাখ্যা করার জন্য স্থির স্ক্রিপ্টগুলি দেওয়া হয় এবং প্রায়শই না করা হয় (কারণ এটি নির্ভরযোগ্য স্ক্রিপ্টগুলি লিখতে এত কঠিন) প্রক্রিয়া করার জন্য স্থির ডেটা।
উদাহরণস্বরূপ, ওয়েব প্রসঙ্গে, একটি শেল এমন কিছুতে ডাকা হতে পারে:
popen("sendmail -oi -t", "w");
এতে কী ভুল হতে পারে? যদি কোনও ভুলের কথা ভাবা হয়, তবে সেই সেন্ডমেলকে দেওয়া তথ্য সম্পর্কে, সেই শেল কমান্ড লাইনটি কীভাবে নিজেই বিশ্লেষণ করা হয় না বা সেই শেলটিতে কী কী অতিরিক্ত ডেটা সরবরাহ করা হয় তা নয়। এমন কোনও কারণ নেই যে আপনি সেই পরিবেশে পরিবর্তনশীল ভেরিয়েবলগুলি বিবেচনা করতে চান that এবং যদি আপনি এটি করেন তবে আপনি বুঝতে পারবেন যে এটি সমস্ত এনভ ভার্স যার নাম "এইচটিটিপি_" দিয়ে শুরু হয় বা সুপরিচিত সিজিআই এনভ ভার্সের মতো SERVER_PROTOCOL
বা QUERYSTRING
এর মধ্যে শেল বা সেন্ডমেলের কোনও ব্যবসা নেই।
বিশেষাধিকারের উচ্চতা প্রসঙ্গে যেমন সেটুয়েড / সেটজিড বা সুডোর মাধ্যমে চলার সময়, পরিবেশটি সাধারণত বিবেচিত হয় এবং অতীতে অনেকগুলি দুর্বলতা ছিল, আবার শেলের বিরুদ্ধে নয় বরং সুবিধাগুলি উন্নত করার মতো জিনিসগুলির বিরুদ্ধে sudo
(উদাহরণস্বরূপ সিভিই দেখুন) -2011-3628 )।
উদাহরণস্বরূপ, bash
সেটুইড বা সেটআপড কমান্ড দ্বারা কল করার সময় পরিবেশের উপর বিশ্বাস করবেন না ( mount
উদাহরণস্বরূপ চিন্তা করুন যা সহায়কদের কাছে প্রার্থনা করে)। বিশেষত, এটি রফতানি করা কার্যগুলি উপেক্ষা করে।
sudo
পরিবেশ পরিষ্কার করে: সব সাদা তালিকার জন্য ব্যতীত ডিফল্টরূপে, এবং যদি না, অন্তত কালো তালিকা এ কয়েক যে পরিচিত হয় একটি শেল বা অন্য (যেমন প্রভাবিত করার জন্য কনফিগার PS4
, BASH_ENV
, SHELLOPTS
...)। এটি এমন পরিবেশের পরিবর্তনশীলগুলিকেও কালো তালিকাভুক্ত করে যার কন্টেন্টটি দিয়ে শুরু হয় ()
(যার কারণে সিভিই -2014-6271 সুবিধাগুলি বাড়ানোর অনুমতি দেয় না sudo
)।
তবে আবার, এটি সেই প্রেক্ষাপটের জন্য যেখানে পরিবেশকে বিশ্বাস করা যায় না: কোনও নাম এবং মান সহ কোনও ভেরিয়েবল সেই প্রসঙ্গে দূষিত ব্যবহারকারীর দ্বারা সেট করা যায়। এটি ওয়েব সার্ভার / এসএসএস বা সমস্ত ভেক্টরগুলিতে প্রযোজ্য না যা সিভিই -2014-6271 ব্যবহার করে যেখানে পরিবেশ নিয়ন্ত্রণ করা হয় (কমপক্ষে পরিবেশের ভেরিয়েবলের নাম নিয়ন্ত্রিত হয় ...)
এটি একটি ভেরিয়েবলের মতো ব্লক করা গুরুত্বপূর্ণ echo="() { evil; }"
, তবে তা নয় HTTP_FOO="() { evil; }"
, কারণ HTTP_FOO
কোনও শেল স্ক্রিপ্ট বা কমান্ড লাইনের দ্বারা কমান্ড হিসাবে ডাকা হবে না। এবং অ্যাপাচি 2 কখনই কোনও echo
বা BASH_ENV
ভেরিয়েবল সেট করে না ।
এটি বেশ সুস্পষ্ট যে কিছু পরিবেশের পরিবর্তনশীলগুলি তাদের নামের উপর ভিত্তি করে কিছু প্রসঙ্গে কালো তালিকাভুক্ত হওয়া উচিত , তবে কেউই ভাবেন নি যে তাদের বিষয়বস্তুর ভিত্তিতে কালো তালিকাভুক্ত হওয়া উচিত (ব্যতীত sudo
)। বা অন্য কথায়, কেউ ভাবেন নি যে নির্বিচারে এনভ ভার্স কোড ইনজেকশনের জন্য ভেক্টর হতে পারে।
যখন বৈশিষ্ট্যটি যুক্ত করা হয়েছিল তখন বিস্তৃত পরীক্ষা-নিরীক্ষা এটি ধরতে পারত কিনা, আমি বলব এটির সম্ভাবনা নেই।
আপনি যখন বৈশিষ্ট্যের জন্য পরীক্ষা করেন , আপনি কার্যকারিতার জন্য পরীক্ষা করেন। কার্যকারিতা সূক্ষ্মভাবে কাজ করে। আপনি যদি একটি bash
অনুরোধে ফাংশনটি রফতানি করেন তবে এটি অন্যটিতে ঠিকঠাকভাবে আমদানি করা হয়। যখন একই নামের সাথে একটি ভেরিয়েবল এবং ফাংশন উভয়ই রফতানি করা হয় বা যখন ফাংশনটি রফতানি করা হয়েছিল তার চেয়ে আলাদা লোকালয়ে আমদানি করা হয় তখন খুব নিখুঁত পরীক্ষার ক্ষেত্রে সমস্যাগুলি দেখা দিতে পারে।
তবে দুর্বলতা চিহ্নিত করতে সক্ষম হতে, এটি আপনাকে করতে হবে এমন কোনও কার্যকারিতা পরীক্ষা নয়। সুরক্ষা দিকটি প্রধান দৃষ্টি নিবদ্ধ করা উচিত ছিল এবং আপনি কার্যকারিতাটি পরীক্ষা করছেন না, তবে প্রক্রিয়াটি এবং কীভাবে এটি অপব্যবহার করা যেতে পারে।
এটি এমন কিছু নয় যা বিকাশকারীরা (বিশেষত ১৯৮৯ সালে) প্রায়শই তাদের মনের পিছনে থাকে এবং শেল বিকাশকারী তার সফ্টওয়্যারটি নেটওয়ার্ক ব্যবহারযোগ্য হওয়ার সম্ভাবনা কম বলে মনে করে ক্ষমা করতে পারে।