ترجمة آلية لم تُراجَع بعد. النص الإنجليزي هو المرجع في حال الاختلاف.
الملخص
libriscv هو صندوق رمل ومحاكي RISC-V. قبل الإصدار 1.18، يمكن لملف ELF مصمم خصيصًا أن يتسبب في عمليات قراءة خارج الحدود في محاكي المضيف. تتحقق الدالة `Memory<W>::binary_loader` من حدود رأس البرنامج `PT_LOAD`، ولكن `Memory<W>::serialize_execute_segment` تثق في `sh_offset` و`sh_size` الخاصة برأس القسم عند تحديد موقع `.text` دون التحقق من نطاق الملف مقابل `m_binary.size()`; وتحتوي `Memory<W>::lookup()` على مشكلة جدول أقسام مماثلة. وبالتالي، يمكن لإزاحات `.text` أو `.symtab` التالفة تجاوز عمليات التحقق من رأس البرنامج والإشارة إلى خارج مخزن الملف المؤقت، مما يؤدي إلى تعطل rvlinux. مع تخطيط الذاكرة المناسب أو تجاوز عدد صحيح، قد يتم تعيين ذاكرة كومة المضيف خارج المخزن في الضيف بواسطة `create_execute_segment()`، مما قد يكشف ذاكرة المضيف. يوضح المُعاد إنتاجه المبلغ عنه حدوث خطأ SIGSEGV للمضيف، بينما وُصفت عملية الكشف عن الذاكرة من خلال الهندسة بأنها ممكنة وليست مثبتة. تم إصلاح هذه المشكلة في الإصدار 1.18.
المعالجة
المراجع
- مرجعhttps://github.com/libriscv/libriscv/commit/61ef9ca82c8876dd80b33780893ba512af780e93
- مرجعhttps://github.com/libriscv/libriscv/commit/7bd1c189f9f9d54368cde096b07b194ad680f9fa
- مرجعhttps://github.com/libriscv/libriscv/releases/tag/v1.18
- مرجعhttps://github.com/libriscv/libriscv/security/advisories/GHSA-gm4g-6c78-gr3w