Xlera8

ক্রোম জিরো-ডে: "এই শোষণ বন্যের মধ্যে আছে", তাই এখনই আপনার সংস্করণটি পরীক্ষা করুন৷

গুগলের সর্বশেষ ক্রোম আপডেট বের হয়েছে, এবং এবার কোম্পানিটি তার শব্দ কিমা না দুটি নিরাপত্তা প্যাচের মধ্যে একটির মধ্যে রয়েছে:

গুগল সচেতন যে জন্য একটি শোষণ জন্য CVE-2023-3079 বন্য মধ্যে বিদ্যমান।

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

এই সময়, এটি "আমরা নিজেরাই এটি সম্পর্কে সচেতন", যা আরও স্পষ্টভাবে অনুবাদ করে "আমরা জানি যে আমরা কথা বলার সাথে সাথে দুর্বৃত্তরা এটির অপব্যবহার করছে", কারণ বাগ রিপোর্টটি সরাসরি Google এর নিজস্ব থ্রেট রিসার্চ গ্রুপ থেকে এসেছে৷

যথারীতি, এটি বোঝায় যে Google একটি সক্রিয় আক্রমণের তদন্ত করছিল (হোক Google নিজেই, বা কোনও বাহ্যিক সংস্থার বিরুদ্ধে, আমরা জানি না) যেখানে Chrome পূর্বের অজানা নিরাপত্তা গর্ত দ্বারা আটকে গিয়েছিল৷

বাগটি সহজভাবে বর্ণনা করা হয়েছে: V8 এ বিভ্রান্তি টাইপ করুন। (বোধগম্যভাবে, গুগল এই পর্যায়ে এর চেয়ে বেশি কিছু বলছে না।)

আমরা আগে ব্যাখ্যা করেছি, ক টাইপ বিভ্রান্তি বাগ তখন ঘটে যখন আপনি একটি প্রোগ্রামকে ডেটার একটি অংশ সরবরাহ করেন যা এটি পার্স, যাচাই, প্রক্রিয়া এবং এক উপায়ে কাজ করার অনুমিত হয়...

…কিন্তু আপনি পরে প্রোগ্রামটিকে একটি ভিন্ন, অননুমোদিত, অপ্রমাণিত, এবং সম্ভাব্য বিপজ্জনক উপায়ে ডেটা ব্যাখ্যা করার জন্য কৌশলে পরিচালনা করেন।

টাইপ বিভ্রান্তি বিপদ ব্যাখ্যা করা হয়েছে

কল্পনা করুন যে আপনি সি-তে একটি প্রোগ্রাম লিখছেন।

সি-তে, আপনি সাধারণত ভেরিয়েবলগুলিকে পৃথকভাবে ঘোষণা করেন, এইভাবে শুধুমাত্র মেমরি সংরক্ষণ করে না যেখানে সেগুলি সংরক্ষণ করা যেতে পারে, তবে সেই ভেরিয়েবলগুলি কীভাবে ব্যবহার করা উচিত তা প্রোগ্রামে সংকেত দেয়।

উদাহরণ স্বরূপ:

 দীর্ঘ দীর্ঘ int JulianDayNumber; স্বাক্ষরিত চর* গ্রাহকের নাম;

প্রথম পরিবর্তনশীল ঘোষণাটি জ্যোতির্বিজ্ঞানের দিন সংখ্যার প্রতিনিধিত্বকারী একটি সাধারণ পুরানো পূর্ণসংখ্যা মান সংরক্ষণের জন্য 64 বিট সংরক্ষণ করে। (যদি আপনি ভাবছেন, এই বিকেলটি হল JDN 23157 - জুলিয়ান দিনগুলি দুপুরে শুরু হয়, মধ্যরাতে নয়, কারণ জ্যোতির্বিজ্ঞানীরা প্রায়শই রাতে কাজ করেন, মধ্যরাত তাদের কাজের দিনের মাঝখানে।)

দ্বিতীয়টি একটি মেমরি ঠিকানা সংরক্ষণ করার জন্য 64 বিট সংরক্ষণ করে যেখানে গ্রাহকের নামের পাঠ্য স্ট্রিং পাওয়া যেতে পারে।

আপনি যেমন কল্পনা করতে পারেন, আপনি এই দুটি মানকে মিশ্রিত না করাই ভাল, কারণ একটি সংখ্যা যা বোধগম্য এবং নিরাপদ, দিনের সংখ্যা হিসাবে ব্যবহার করা, যেমন 23157, মেমরি ঠিকানা হিসাবে ব্যবহার করা প্রায় নিশ্চিতভাবেই অনিরাপদ হবে৷

আপনি একটি চলমান উইন্ডোজ প্রোগ্রামের এই মেমরি ডাম্প থেকে দেখতে পাচ্ছেন, ব্যবহারের জন্য বরাদ্দ করা সর্বনিম্ন মেমরি ঠিকানাটি শুরু হয় 0x00370000, যেটি দশমিকে 3,604,480, যেকোনো সংবেদনশীল দিনের সংখ্যার চেয়ে অনেক বড়।

উইন্ডোজ দ্বারা ব্যবহৃত প্রকৃত মেমরির ঠিকানাগুলি সময়ের সাথে সাথে এলোমেলোভাবে পরিবর্তিত হয়, আপনার মেমরি লেআউটকে দুর্বৃত্তদের অনুমান করা কঠিন করে তোলে, তাই আপনি যদি একই প্রোগ্রামটি চালাতেন তবে আপনি মান পাবেন, কিন্তু তবুও সেগুলি একই রকম হবে:

এবং (যদিও এটি উপরের চিত্রের নীচের দিক থেকে বন্ধ) রানটাইম ব্যবহারকারী ডেটা বিভাগের মেমরি ঠিকানাগুলি যখন এই প্রোগ্রামটি চলেছিল 0x01130000 থেকে 0x01134FFF, 22 জুলাই 44631 থেকে 16 আগস্ট 44687 তারিখের অসম্ভাব্য তারিখের সীমার প্রতিনিধিত্ব করে৷

প্রকৃতপক্ষে, আপনি যদি এই দুটি ভেরিয়েবলগুলিকে মিশ্রিত করার চেষ্টা করেন, তাহলে কম্পাইলার আপনাকে সতর্ক করার চেষ্টা করবে, উদাহরণস্বরূপ:

 JulianDayNumber = CustomerName; গ্রাহকের নাম = JulianDayNumber; সতর্কতা: অ্যাসাইনমেন্ট কাস্ট ছাড়াই পয়েন্টার থেকে পূর্ণসংখ্যা তৈরি করে: অ্যাসাইনমেন্ট কাস্ট ছাড়াই পূর্ণসংখ্যা থেকে পয়েন্টার তৈরি করে

এখন, আপনি যদি কখনও সি-তে প্রোগ্রাম করে থাকেন, আপনি জানেন যে সুবিধার জন্য, আপনি ব্যবহার করে একাধিক ভিন্ন ব্যাখ্যা সহ ভেরিয়েবল ঘোষণা করতে পারেন union কীওয়ার্ড, এই মত:

 ইউনিয়ন { long long int JulianDayNumer; স্বাক্ষরিত চর* গ্রাহকের নাম; } তথ্য;

আপনি এখন দুটি ভিন্ন উপায়ে মেমরিতে ঠিক একই ভেরিয়েবল উল্লেখ করতে পারেন।

লিখলে data.JulianDayNumber, আপনি একটি পূর্ণসংখ্যা হিসাবে সঞ্চিত তথ্য যাদুকরী ব্যাখ্যা, কিন্তু লেখা data.CustomerName কম্পাইলারকে বলে যে আপনি একটি মেমরি ঠিকানা উল্লেখ করছেন, যদিও আপনি একই সঞ্চিত ডেটা অ্যাক্সেস করছেন।

আপনি যা করছেন, কমবেশি, কম্পাইলারের কাছে স্বীকার করছেন যে আপনি কখনও কখনও তারিখ হিসাবে এবং অন্য সময়ে মেমরির ঠিকানা হিসাবে ব্যবহার করা ডেটা ব্যবহার করবেন। কোন মুহূর্তে কোন ব্যাখ্যা প্রযোজ্য তা মনে রাখার দায়িত্ব আপনি নিচ্ছেন কোডে।

আপনি একটি দ্বিতীয় পরিবর্তনশীল আছে সিদ্ধান্ত নিতে পারে, একটি হিসাবে পরিচিত tag (সাধারণত একটি পূর্ণসংখ্যা) আপনার সাথে যেতে union আপনি এই মুহূর্তে কোন ধরণের ডেটা নিয়ে কাজ করছেন তার ট্র্যাক রাখতে, উদাহরণস্বরূপ:

 struct { int ট্যাগ; ইউনিয়ন { long long int JulianDayNumer; স্বাক্ষরিত চর* গ্রাহকের নাম; } তথ্য; } মান;

আপনি সিদ্ধান্ত নিতে পারেন যে যখন value.tag তৈরি 0, ডেটা এখনও ব্যবহারের জন্য আরম্ভ করা হয়নি, 1 মানে আপনি একটি তারিখ সংরক্ষণ করছেন, 2 মানে এটি একটি মেমরি ঠিকানা, এবং অন্য কিছু একটি ত্রুটি নির্দেশ করে।

ঠিক আছে, আপনি অন্য কাউকে এটি নিয়ে ঝামেলা করতে দেবেন না value.tag সেটিং, অথবা আপনার প্রোগ্রাম নাটকীয়ভাবে দুর্ব্যবহার শেষ হতে পারে.

একটি আরো উদ্বেগজনক উদাহরণ এই মত কিছু হতে পারে:

 struct { int ট্যাগ; // 1 = হ্যাশ, 2 = ফাংশন পয়েন্টার ইউনিয়ন { স্বাক্ষরবিহীন চার হ্যাশ[16]; // হয় একটি র্যান্ডম হ্যাশ স্ট্রাকট সঞ্চয় করুন { void* openfunc; // অথবা দুটি সাবধানে যাচাই করা অকার্যকর* closefunc; // কোড পয়েন্টার পরে এক্সিকিউট করার জন্য } ভ্যালিডেট; } } মান;

এখন, আমরা মেমরির একই ব্লক ওভারলোড করছি যাতে আমরা কখনও কখনও এটি একটি 16-বাইট হ্যাশ সংরক্ষণ করতে ব্যবহার করতে পারি, এবং কখনও কখনও দুটি 8-বাইট পয়েন্টার সংরক্ষণ করতে পারি ফাংশন যা আমাদের প্রোগ্রাম পরে কল করবে।

স্পষ্টতই, কখন value.tag == 1, আমরা আমাদের সফ্টওয়্যারটিকে ইউনিয়নের জন্য বরাদ্দ করা মেমরিতে যেকোনও 16-বাইট স্ট্রিং সংরক্ষণ করতে দিলে খুশি হব, কারণ হ্যাশগুলি সিউডোর্যান্ডম, তাই বাইটগুলির যে কোনও সংগ্রহ সমানভাবে সম্ভব।

কিন্তু যখন value.tag == 2, আমাদের কোডকে অতিরিক্ত সতর্কতা অবলম্বন করতে হবে যাতে ব্যবহারকারীকে পরবর্তীতে কার্যকর করার জন্য অবৈধ, অবিশ্বস্ত, অজানা ফাংশন ঠিকানা প্রদান করতে না দেয়।

এখন কল্পনা করুন যে আপনি এই কোডটিতে একটি মান জমা দিতে পারেন যখন ট্যাগটি 1 এ সেট করা হয়েছিল, তাই এটি চেক করা এবং যাচাই করা হয়নি…

…কিন্তু পরে, প্রোগ্রামটি আসলে সঞ্চিত মান ব্যবহার করার ঠিক আগে, আপনি ট্যাগটিকে 2-এ স্যুইচ করার জন্য কোডটিকে কৌশল করতে সক্ষম হয়েছিলেন।

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

এবং এটি একটি টাইপ কনফিউশন বাগের ক্ষেত্রে ঘটে, যদিও একটি কল্পিত এবং সরলীকৃত উদাহরণ ব্যবহার করে,

মেমরি যা ব্যবহার করা নিরাপদ হবে যদি একভাবে পরিচালনা করা হয় তবে বিকল্প, অনিরাপদ উপায়ে প্রক্রিয়া করার জন্য দূষিতভাবে প্রোগ্রামে বিতরণ করা হয়।

কি করো?

নিশ্চিত করুন যে আপনার কাছে Chrome বা Chromium এর সর্বশেষ সংস্করণ রয়েছে৷

আপনি Chrome চান 114.0.5735.106 বা পরে ম্যাক এবং লিনাক্সে, এবং 114.0.5735.110 বা পরে উইন্ডোজে।

ক্রোমিয়ামের উপর ভিত্তি করে তৈরি মাইক্রোসফ্ট এজও এই বাগ দ্বারা প্রভাবিত।

মাইক্রোসফট এ পর্যন্ত [2023-06-06T16:25:00Z] লক্ষনীয় যে

মাইক্রোসফ্ট ওয়াইল্ডে বিদ্যমান সাম্প্রতিক শোষণ সম্পর্কে সচেতন। আমরা সক্রিয়ভাবে একটি নিরাপত্তা প্যাচ প্রকাশের জন্য কাজ করছি।

এজ বর্তমানে 114.0.1823.37 সংস্করণে রয়েছে, তাই যেকোন কিছু সংখ্যাযুক্ত তার পরে Microsoft এর CVE-2023-3079 প্যাচ অন্তর্ভুক্ত করা উচিত।

আপনার সংস্করণ চেক করতে এবং যদি এমন একটি আপডেট থাকে যা আপনি এখনও পাননি তাহলে জোর করে:

  • গুগল ক্রোম তিন-বিন্দু মেনু (⋮) > সাহায্য > ক্রোম সম্পর্কে।
  • মাইক্রোসফ্ট এজ। সেটিংস এবং আরো (…) > সহায়তা এবং প্রতিক্রিয়া > মাইক্রোসফট এজ সম্পর্কে।

আপনাকে স্বাগতম.


আমাদের সাথে খোস গল্প কর

হাই সেখানে! আপনাকে কিভাবে সাহায্য করতে পারি?