Habr•August 5, 2026•🇷🇺Translated from Russian

DLL Sideloading via version.dll in WinSCP: Search Order Exploitation, Rust Proxy and Payload Interception

WinSCP loads version.dll from its own folder because Windows follows a deterministic DLL search order that begins with the application directory (AppDir). Researchers published a detailed analysis showing how to detect this vector through static import table review, Known DLLs filtering, and dynamic tracing with Procmon.

The technique mirrors a recent campaign that distributed a trojanized FileZilla build through the fake domain filezilla-project.live, again abusing version.dll. The same actors later compromised the CPUID supply chain (CPU-Z and HWMonitor) using cryptbase.dll.

DLL Search Order and Known DLLs

Windows checks AppDir first, then System32/SysWOW64, and finally PATH. Known DLLs registered under HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs are loaded exclusively from the system directory, bypassing AppDir entirely. version.dll is absent from this list, leaving it vulnerable to sideloading when placed next to WinSCP.exe.

Static analysis with PE-Bear and the lief Python library revealed that WinSCP.exe directly imports only three functions from version.dll: GetFileVersionInfoSizeW, GetFileVersionInfoW, and VerQueryValueW. This small surface makes proxy implementation straightforward.

Proof-of-Concept Implementation

The Rust cdylib proxy exports all 17 functions of the original library. Fourteen are forwarded at link time via a generated proxy.def file that points to C:\Windows\SysWOW64\version.dll for x86 builds. The three hijacked functions are implemented in Rust and trigger a MessageBoxW payload from a separate thread upon first invocation.

Because WinSCP calls these functions during early initialization, the payload executes before the main application window appears. The real system DLL is loaded lazily only when the forwarded functions are first called, preserving compatibility.

The build script (build.rs) dynamically creates the .def file based on CARGO_CFG_TARGET_ARCH, ensuring correct paths for both 32-bit and 64-bit targets. Release builds enable LTO, symbol stripping, and panic=abort for minimal footprint.

Related articles

Habr•Vulnerabilities & Exploits

Researcher Develops Kernel Exploit for TP-Link EAP770 to Disable Faulty Qualcomm SFE Offload

A user who purchased the TP-Link EAP770 v1 Wi-Fi 7 access point in 2023 discovered persistent data corruption during large file transfers over Wi-Fi. The root cause was a DMA cache coherency bug in the Qualcomm qca-nss-dp driver combined with SFE/PPE hardware offload that recalculated TCP checksums on corrupted packets. TP-Link ended support for the v1 model before release and provided no firmware updates, while the device's restricted shell prevented the required sysfs writes. The researcher chained CVE-2022-0185 with pipe buffer manipulation to achieve root access, disable the offload features, and stop the corruption without bricking the device. The exploit was developed and tested first in QEMU using the closest available GPL kernel sources from the EAP783 model before being adapted to the live hardware. A separate unrelated bug was also found in the client Wi-Fi card firmware causing connection drops.

Habr•Vulnerabilities & Exploits

Apple iOS Security Architecture: From Power Button to App Launch in Modern Devices

The article examines the complete boot and trust chain in modern iPhones, starting from the immutable BootROM and progressing through iBoot, the XNU kernel, and the Secure Enclave. It explains how Secure Boot verifies signatures but does not guarantee absence of vulnerabilities, allowing exploits like checkm8 to persist across devices. The piece details data protection classes, BFU versus AFU states, and how passcodes interact with hardware-bound keys to limit brute-force attempts. It further describes application sandboxing, entitlements, code signing, and Pointer Authentication (PAC) as layered defenses that raise the cost of exploitation. The analysis shows why modern jailbreaks require multi-stage chains involving kernel read/write, sandbox escapes, and PAC bypasses rather than single vulnerabilities. Overall, the architecture transforms privilege from a simple scalar into a graph of capabilities across isolated components.

Habr•Vulnerabilities & Exploits

Critical PHP Vulnerabilities CVE-2026-109618 and CVE-2026-109619 Enable Unauthenticated Remote Code Execution

Two critical vulnerabilities in PHP, tracked as CVE-2026-109618 and CVE-2026-109619, both scoring CVSS 9.2, were disclosed on October 21. The flaws allow attackers to execute arbitrary code without authentication by triggering out-of-memory conditions that lead to use-after-free memory corruption. Exploitation involves specially crafted requests that manipulate uninitialized arrays and function pointers, with full chains demonstrated via PHP_SESSION_UPLOAD_PROGRESS and fatal error backtraces. The issues affect PHP versions starting from 5.4 and were discovered using AI tools Gemini 4 Argon and GPT-5.6 Sol, resulting in a patch exceeding 10,000 lines of code. Amazon detected attacks as early as October 17, with Cloudflare later reporting millions of exploitation attempts. Mitigation requires updating to patched versions such as PHP 8.2.35, 8.3.36, 8.4.27 or 8.5.12, while temporary workarounds include disabling session upload progress and fatal error backtraces.

AntiMalware•Vulnerabilities & Exploits

Trend Micro ZDI Reports on Critical Linux KSMBD Vulnerabilities Leak to Public Mailing Lists Before Patches

Trend Micro Zero Day Initiative inadvertently published detailed vulnerability reports for the Linux kernel's KSMBD component into public mailing lists. Two flaws received CVSS scores of 9.0, enabling remote code execution under specific conditions. One issue involves a race condition during parallel SMB request handling, while the second stems from an incorrect buffer size calculation in the SMB Direct mechanism that requires RDMA and a writable share. Technical details including root causes and reproduction steps became publicly archived before fixes reached end users. The KSMBD maintainer has already merged a patch for ZDI-CAN-33774 into their repository, yet distribution kernels may still lack the update. Additional privilege-escalation and information-disclosure risks in other kernel components were also described in the leaked messages.