
Offenlegung von CVE-2023-34853: einer Stapelüberlauf-Schwachstelle in der Supermicro X12DPG-QR BIOS-Firmware, die eine lokale Privilegienausweitung zur Ausführung von DXE Runtime UEFI-Applikationen ermöglicht.
Dieses Repository wird verwendet, um einige Details zu CVE-2023-34853 offenzulegen. Die Schwachstelle tritt im Supermicro-Motherboard X12DPG-QR 1.4b auf und wird in Version 1.5 behoben. In der SmcSecureErase-Datei (GUID: 2B7C2FD1-C1CF-AB1D-C3BB-D1D691FB131E) innerhalb der BIOS-Firmware befindet sich eine Stack-Overflow-Schwachstelle am Offset 0x2CC2. Der mutmaßliche Code mit der Schwachstelle ist wie folgt:
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; }
Wenn "SmcSecurityEraseSetupVar" auf eine lange Zeichenkette gesetzt ist, ändert der erste Aufruf von GetVariable v39 (DataSize) auf die Länge der Zeichenkette. Dann überschreibt der zweite Aufruf von GetVariable v41. Dies führt zu einem Pufferüberlauf-Angriff. Ein Angreifer mit lokalem privilegiertem Zugriff kann diese Schwachstelle ausnutzen, um Privilegien von Ring 3 oder Ring 0 (abhängig vom Betriebssystem) auf eine DXE Runtime UEFI-Anwendung zu erhöhen und beliebigen Code auszuführen.
Abschließend ein besonderer Dank an die Sicherheitsabteilung von Supermicro für ihre kontinuierliche Nachverfolgung.