`ফাইন্ড-এক্সেক in ব্যবহার করে সুরক্ষা সমস্যা এবং দৌড়ের পরিস্থিতি কী কী?


14

থেকে findman পৃষ্ঠা :

-exec command ;
    There are unavoidable security problems
    surrounding use of the -exec action; you should use the
    -execdir option instead.

-execdir command {} +
    Like -exec, but the specified command is run from the
    subdirectory containing the matched file, which is not
    normally the directory in which you started find.  This a much
    more secure method for invoking commands, as it avoids race
    conditions during resolution of the paths to the matched
    files.

এটার মানে কি? কেন এটি শুরু ডিরেক্টরি থেকে চালানোর সাথে সাথে জাতিগুলির শর্ত রয়েছে? এবং এই সুরক্ষা ঝুঁকিগুলি কীভাবে?


সম্পর্কিত: কেন অনুসন্ধানের আউটপুট খারাপ অনুশীলনকে ফাঁপা করছে? যেখানে এটি উত্তরগুলির কয়েকটিতে আচ্ছাদিত।
স্টাফেন চেজেলাস

উত্তর:


13

এখানে বিশদটি পাওয়া গেছে :

-execকর্ম অন্য প্রোগ্রাম চালানো যাবে কারণ। এটি সেই ফাইলটির নাম যা প্রোগ্রামটি সেই সময়ে বিবেচিত হয় তা পাস করে। অনুরোধ করা প্রোগ্রামটি সাধারণত সেই ফাইলটিতে কিছু ক্রিয়া সম্পাদন করবে। আবার, এখানে একটি রেসের শর্ত রয়েছে যা এখানে কাজে লাগানো যেতে পারে। আমরা একটি নির্দিষ্ট উদাহরণ হিসাবে কমান্ড গ্রহণ করব

 find /tmp -path /tmp/umsp/passwd -exec /bin/rm

এই সাধারণ উদাহরণে, আমরা মুছে /bin/rmফেলার জন্য কেবল একটি ফাইল চিহ্নিত করতে এবং এটি মোছার জন্য অনুরোধ করছি। একটি সমস্যা বিদ্যমান কারণ পয়েন্টের মধ্যে সময় ব্যবধান রয়েছে যেখানে এটি নির্ধারণ করে যে -execক্রিয়াটি প্রক্রিয়া করা দরকার এবং সেই বিন্দু যেখানে /bin/rmফাইল-সিস্টেম থেকে ফাইলটি মুছে ফেলার জন্য কমান্ডটি আসলে লিঙ্ক () সিস্টেম কল দেয় actually এই সময়ের মধ্যে, কোনও আক্রমণকারী /tmp/umsp ডিরেক্টরিটির নাম প্রতীকী লিঙ্কের সাথে প্রতিস্থাপন করে ডিরেক্টরিটির নাম পরিবর্তন করতে পারে /etc/bin/rmএটি একই ফাইলটিতে কাজ করছে কিনা তা নির্ধারণ করার কোনও উপায় নেই যা মনে মনে ছিল। প্রতীকী লিঙ্কটি একবার হয়ে গেলে, আক্রমণকারী /etc/passwdফাইলটি মুছে ফেলার কারণ অনুসন্ধানে প্ররোচিত করে , যা আসলে আদেশ করা আদেশের দ্বারা প্রভাবিত হয় না।

নিশ্চিত যে কেউ সম্ভবত কখনই এটি কাজে লাগাতে পারে; তবে আমি অনুমান করছি উত্তর আছে!


উপরের ক্ষেত্রে, কমান্ড চালানোর আগে execdirপ্রথমে চিডির করা হত /tmp/umspএবং তাত্ত্বিকভাবে, কোনও আক্রমণকারীর ডিরেক্টরিটিকে পুনরায় সংযুক্ত করার কোনও প্রভাব পড়বে না .. যদি পুনরায় সংযুক্তি মূল্যায়নের "সিদ্ধান্ত নেওয়ার" পরে খুঁজে পাওয়া যায় -execতবে rmকমান্ডটি তার কাজটি করতে পারে তার আগে । তবে আমি আশ্চর্য হয়েছি কেন এটি একটি পার্থক্য করবে: ব্যবহারকারী findকমান্ডটি লেখার সিদ্ধান্ত নেওয়ার পরে আক্রমণকারী সহজেই পুনঃস্থাপন করতে পারে ।
ওথিয়াস

1
@ রুইএফরিবিয়েরো লিঙ্কটি সেই আর্গুমেন্ট নয় যা কমান্ডে পৌঁছেছে, এটি একটি মধ্যবর্তী ডিরেক্টরি। /tmp/umspএটি ডিরেক্টরি findদেখলে একটি ডিরেক্টরি হয় , তবে rmরান করার সময় আক্রমণকারীটিকে এটি প্রতীকী লিঙ্ক হিসাবে পরিবর্তিত করে /etc/tmp/umsp/passwdএকটি নিয়মিত ফাইল সমস্ত বরাবর, তবে এক নয়।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

2

আমি বিশ্বাস করি যে -execবিপজ্জনক কারণটি কারণ ব্যবহারকারী যদি প্রোগ্রামটি সম্পাদন করার জন্য পুরো নাম এবং পথটি নির্দিষ্ট না করে, তবে এটি সম্ভবত ভুল প্রোগ্রামটি কার্যকর করে ute

উদাহরণ:

find /some/path -exec coolprogram

ইন /some/path, কেউ অন্যকে তৈরি করেছে coolprogramএবং এটি আপনার সমস্ত ডেটা কোনও খারাপ অভিনেতার কাছে আপলোড করে।

তবে অপেক্ষা করুন, আপনি বলছেন, আপনাকে কি এটিকে কার্যকর করতে হবে না ./coolprogram? হ্যাঁ, তবে কিছু লোকের রয়েছে PATH=.:/bin:whateverযা বর্তমান ডিরেক্টরিতে প্রোগ্রামটি কার্যকর করবে।

এটি সম্ভবত সরল করা হয়েছে তবে আমি মনে করি এটি কিছু ক্ষেত্রে বিপজ্জনক হতে পারে। আমাকে একবারে সমস্যা সমাধান করতে হয়েছিল যেখানে একটি শূন্য-বাইট cpioভুল ডিরেক্টরিতে শেষ হয়েছিল। এটি একটি প্রোগ্রাম ক্র্যাশ করেছিল কারণ cpioএটি ডিরেক্টরিতে শূন্য-বাইট ফাইলটি চলছিল বলে কাজ করে না।


3
এই ঝুঁকিগুলি বিচ্ছিন্ন নয় find -exec। আপনি যদি .নিজের পথে ফেলে রেখে থাকেন তবে কেবলমাত্র coolprogramআপনার বর্তমান দিরে মৃত্যুদণ্ড কার্যকর করা ইতিমধ্যে বিপজ্জনক, আপনি এটি ব্যবহার findকরেন বা না করেন!
ড্যানি টুপেনি

1
সম্মত, তবে মনে হয় যে-এক্সেকডির সেই শর্তটি পর্যবেক্ষণ করে যা আমি উল্লেখ করেছি:The ‘-execdir’ action refuses to do anything if the current directory is included in the $PATH environment variable. This is necessary because ‘-execdir’ runs programs in the same directory in which it finds files – in general, such a directory might be writable by untrusted users. For similar reasons, ‘-execdir’ does not allow ‘{}’ to appear in the name of the command to be run.
ডগ

আমার মনে হয় গল্পটির নৈতিকতা হচ্ছে। আপনার পথে একটি খারাপ ধারণাও রয়েছে, এজন্য আমি নিশ্চিত করি যে এটি সেখানে নেই।
ডগ

.পথে এবং {}কমান্ডে অস্বীকার সম্পর্কে জানতে আগ্রহী । সম্ভবত ভবিষ্যতে লিনাক্স .পুরোপুরি পথে নিষেধ করবে এবং সরঞ্জামগুলি তাদের নিজস্ব সুরক্ষা চেক বাস্তবায়নের প্রয়োজন হবে না! :)
ড্যানি টুপেনি

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