باگ فرار از ماشین مجازی در KVM که یکی زودتر پیداش کرده بود
خلاصهٔ کاملتر
نویسنده تعریف میکنه که اوایل ماه مه داشته کد KVM رو میخونده و توی هندلر Page State Change مخصوص مهمونهای SEV-SNP یه چیز عجیب دیده: اندازهٔ بافر رو خود مهمون تعیین میکنه، هاست دقیقاً همونقدر حافظه میگیره، ولی تعداد ورودیهایی که بعدش پردازش میکنه فقط با ثابت پروتکل یعنی ۲۵۳ سنجیده میشه، نه با اندازهٔ همون بافری که تازه گرفته:
if (idx_end >= VMGEXIT_PSC_MAX_COUNT) {
snp_complete_psc(svm, ...);
return 1;
}
for (idx = idx_start; idx <= idx_end; idx++)
entry_start = entries[idx];یعنی اگه مهمون بگه بافرم ۲۴ بایته و بعد ۲۵۲ ورودی بخواد، هاست حدود ۲ کیلوبایت جلوتر از انتهای اون بافر رو روی هیپ کرنل میخونه و بعدش هم ۱۲ بیت پایینی خونههای همسایه رو بازنویسی میکنه. عدد ۲۵۳ ظرفیت بافر مشترک ۲۰۳۲ بایتی داخل GHCB بود، ولی همون عدد برای بافری که هاست جداگانه گرفته بود هم به کار میرفت. باگ از حدود نسخهٔ v6.10 همهٔ کرنلهای دارای پشتیبانی SNP PSC رو درگیر میکرده.
نویسنده میگه پچ خودش رو فرستاد و جواب گرفت که «مشکل بزرگتر از چیزیه که پیدا کردی» — نفر اول، Stan Shaw، یه ماه زودتر گزارشش کرده بود و CVE و اعتبار گزارش هم به اسم اون ثبت شد. پچ نهایی تیم کرنل فقط چهار خطه: برای GHCB نسخهٔ ۲ به بعد اصلاً اجازه نمیده ناحیهٔ scratch بیرون از GHCB باشه. یعنی بهجای مهار کردن حلقه، اون حالت نامعتبر رو از ریشه حذف کرده.
به گفتهٔ نویسنده پچ خودش دو سوراخ دیگه رو هم باز میذاشت: مقادیر هدر بدون READ_ONCE مستقیم از حافظهٔ در دسترس مهمون خونده میشدن و بین چک و استفاده قابل تغییر بودن (یه TOCTOU تمامعیار)، و حالتی که توصیفگر با آفست نزدیک انتهای بافر مشترک بشینه هم پوشش داده نمیشد. جمعبندی خودش اینه: ورودی رو وصله کن، نه هندلر رو — وقتی حالت نامعتبر رو سر مرز حذف کنی، هر مصرفکنندهٔ پاییندستی خودبهخود امنه.
در مورد شدت ماجرا صادقانه مینویسه که ابزارها واقعی ولی محدودن: یه اوراکل خطا که هر بار یک بیت از وضعیت حافظهٔ همسایه رو لو میده، یه نوشتن خیلی محدود که فقط دو مقدار ممکن رو توی ۱۲ بیت پایینی میذاره، امکان تکرار نامحدود و انتخاب کلاس slab از راه اندازهٔ درخواستی. به نظر او یه مهاجم با سختافزار EPYC و چند ماه تحقیق میتونه از اینها زنجیره بسازه، ولی خودش این کارو نکرده و ادعاشم نداره.
نکات کلیدی:
- باگ خواندن و نوشتن خارج از محدوده در هندلر PSC مربوط به SEV-SNP در KVM، با شناسهٔ CVE-2026-53360
- تعداد ورودیها فقط با ثابت پروتکل (۲۵۳) چک میشد، نه با اندازهٔ بافری که هاست واقعاً گرفته بود
- پیامد: مهمون میتونه هیپ کرنل هاست رو بخونه و بهصورت محدود بنویسه، اون هم به دفعات نامحدود
- وصله در نسخههای v7.0.12، v6.18.35 و v6.12.93؛ پچ بالادستی فقط چهار خطه
- درس اصلی: بهجای اضافهکردن چک به هندلر، حالت نامعتبر رو در ورودی از بین ببر




