
يُستخدم هذا المستودع للكشف عن بعض التفاصيل حول CVE-2023-34853. تظهر الثغرة في اللوحة الأم Supermicro X12DPG-QR 1.4b وسيتم إصلاحها في الإصدار 1.5. في ملف SmcSecureErase (GUID: 2B7C2FD1-C1CF-AB1D-C3BB-D1D691FB131E) داخل البرامج الثابتة للـ BIOS، توجد ثغرة تجاوز سعة المكدس عند الإزاحة 0x2CC2. الكود المُحتمل الذي يحتوي على الثغرة هو كما يلي:
char __fastcall sub_2C20(int *a1, unsigned __int64 a2) { char v4; // r12
unsigned __int64 v6; // r15
__int64 v7; // rbx
unsigned __int64 v8; // rax
char *v9; // rsi
char *v10; // r13
_WORD *v11; // rax
char *v12; // rcx
__int16 i; // dx
__int64 v14; // rdx
__int64 v15; // r8
__int64 v16; // rdx
__int64 v17; // r8
__int16 *v18; // rcx
_BYTE *v19; // rax
__int64 v20; // rcx
__int64 v21; // rax
_BYTE *v22; // rax
__int64 v23; // rcx
__int64 v24; // rax
__int64 v25; // rcx
__int64 v26; // rdx
unsigned __int8 v27; // cl
unsigned __int64 v28; // r14
unsigned __int8 v29; // r8
__int64 v30; // rdx
__int64 v31; // rax
int v32; // edx
__int64 v33; // rax
char v34; // al
_BYTE *v35; // [rsp+50h] [rbp-B0h] BYREF
_BYTE *v36; // [rsp+58h] [rbp-A8h] BYREF
_WORD *v37; // [rsp+60h] [rbp-A0h] BYREF
__int64 v38; // [rsp+68h] [rbp-98h] BYREF
__int64 v39[2]; // [rsp+70h] [rbp-90h] BYREF
char v40[112]; // [rsp+80h] [rbp-80h] BYREF
char v41[1680]; // [rsp+F0h] [rbp-10h] BYREF
char v42[5376]; // [rsp+780h] [rbp+680h] BYREF
char v44; // [rsp+1CA0h] [rbp+1BA0h]
int v45; // [rsp+1CA8h] [rbp+1BA8h] BYREF
v39[0] = 0i64;
v44 = 0;
v37 = 0i64;
v4 = 0;
if ( (*(__int64 (__fastcall **)(__int16 *, __int64 *, _QWORD, __int64 *,_QWORD))(gRT ->GetVariable))( aSmcsecurityera, &VendorGuid, 0i64, v39, 0i64) != 0x8000000000000005ui64 ) return 0;
v6 = 0i64;
v7 = (*(__int64 (__fastcall **)(__int16 *, __int64 *, _QWORD, __int64 *, char *))(gRT ->GetVariable))(aSmcsecurityera, &VendorGuid, 0i64, v39, v41); return v4; }
إذا تم تعيين "SmcSecurityEraseSetupVar" إلى سلسلة طويلة، فإن الاستدعاء الأول لـ GetVariable سيعدّل v39 (DataSize) ليطابق طول السلسلة. بعد ذلك، سيقوم الاستدعاء الثاني لـ GetVariable بالكتابة فوق v41. سيؤدي هذا إلى هجوم تجاوز سعة المخزن المؤقت. يمكن للمهاجم الذي لديه وصول محلي بامتيازات استغلال هذه الثغرة لرفع الامتيازات من الحلقة 3 أو الحلقة 0 (اعتمادًا على نظام التشغيل) إلى تطبيق DXE Runtime UEFI وتنفيذ كود عشوائي.
أخيرًا، شكر خاص لقسم الأمن في Supermicro على متابعتهم المستمرة.