| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| merlinServer-Darwin-arm64.7z | 2026-10-15 | 68.4 MB | |
| merlinServer-Darwin-x64.7z | 2026-10-15 | 69.2 MB | |
| merlinServer-Linux-arm.7z | 2026-10-15 | 69.9 MB | |
| merlinServer-Linux-arm64.7z | 2026-10-15 | 67.8 MB | |
| merlinServer-Linux-x64.7z | 2026-10-15 | 68.8 MB | |
| merlinServer-Windows-x64.7z | 2026-10-15 | 68.8 MB | |
| README.md | 2026-10-15 | 2.5 kB | |
| v2.2.2 source code.tar.gz | 2026-10-15 | 684.1 kB | |
| v2.2.2 source code.zip | 2026-10-15 | 832.2 kB | |
| Totals: 9 Items | 414.4 MB | 1 | |
Merlin Server v2.2.2
Security release — fixes an authenticated operator → teamserver remote code execution in the SharpGen module. Upgrading is recommended for anyone running a Merlin teamserver.
Security
GHSA-gmq6-43v4-9vrv — SharpGen operator-to-server RCE
The SharpGen module passed the operator-supplied dotnetbin and sharpgenbin options straight into exec.Command() after only checking that the files existed — not that they were the expected executables. An authenticated operator could set dotnetbin=/bin/bash and sharpgenbin=<a file downloaded to the server> and execute arbitrary commands on the teamserver, frequently as root.
- Severity: Low (requires an authenticated operator)
- Affected: Merlin Server ≤ 2.2.1
- Fixed in: 2.2.2
- Reported by @lesteratSOL — thank you for the responsible disclosure.
Changes
Fixed
- Pin the
dotnetexecutable and the SharpGen compiler DLL to fixed, server-side locations so an operator can no longer choose which binary the server runs. Compiling arbitrary C# still works — that input is compiler data, never executed on the server.
Changed
- Removed the now-inert
dotnetbinandsharpgenbinoptions from the SharpGen module (both the module definition and the RPC handler).
Added
- New
-dotnetBinserver flag to configure the path to thedotnetexecutable (defaultdotnet, resolved fromPATH). This is a server-launch setting — chosen by whoever runs the teamserver, not an operator-controllable option — so it restores install-location flexibility without reopening the vulnerability.
Upgrade notes
- Server-only release. The Merlin Agent and Merlin CLI are unaffected and do not need updating for this fix.
- If you previously pointed the SharpGen module at a
dotnetoutside yourPATH(e.g. installed viadotnet-install.shto~/.dotnet), set it at launch instead:bash ./merlinServer -dotnetBin /path/to/dotnet ... - The SharpGen compiler DLL is now always loaded from
data/src/cobbr/SharpGen/bin/release/netcoreapp2.1/SharpGen.dllunder the Merlin root (the standard submodule build location).
The data/bin directory contains compiled versions of the Merlin CLI and Merlin Agents
Merlin documentation and Wiki can be found here
The compressed files have a password of
merlin