Research · Tag · Rpc

Posts tagged rpc.

11 entries · sorted: recency← All research
ETHEREUM
2026-08-10

Burning go-ethereum RPC CPU with one eth_call to the BLAKE2F precompile

A single unauthenticated eth_call invoking the BLAKE2F precompile with a caller-set rounds field pins a go-ethereum RPC worker's CPU for hundreds of milliseconds from a sub-kilobyte request.

Simon Morley
Read →5 min read
ETHEREUM
2026-08-10

Amplifying go-ethereum RPC responses with an eth_simulateV1 block-number gap

A single unauthenticated eth_simulateV1 call with a gap between two block numbers makes go-ethereum synthesise up to ~256 full block headers, expanding a ~285-byte request into a ~434 KB response.

Simon Morley
Read →5 min read
RESEARCH
2026-07-22

How an exposed debug_traceCall lets one unauthenticated request burn seconds of go-ethereum CPU

debug_traceCall re-runs an eth_call-style message opcode-by-opcode with a full EVM tracer attached, so a single small request converts into up to seconds of single-goroutine CPU on the target — and with no per-source rate or concurrency cap, an unauthenticated caller drives many such traces in parallel against an exposed go-ethereum node.

Simon Morley
Read →5 min read
RESEARCH
2026-07-22

How a wide-range eth_getLogs query turns a few hundred bytes into an unbounded response on exposed go-ethereum RPC nodes

eth_getLogs returns every log matching a filter across the requested block span in one JSON-RPC response, so a tiny wide-range or broad-topic request forces an exposed go-ethereum node to scan the range and serialise an unbounded matched-log set — a response-amplification DoS payable by an unauthenticated caller.

Simon Morley
Read →5 min read
RESEARCH
2026-07-22

One prior-knowledge h2c connection multiplexes N eth_getLogs past an L4 per-connection cap on go-ethereum's JSON-RPC port

go-ethereum's JSON-RPC port terminates cleartext HTTP/2 (h2c) by prior knowledge, so one TCP connection can multiplex N eth_getLogs streams past an L4 edge that only caps connections per IP (nginx stream limit_conn) — measured 20/20 streams and ~39 MB pulled through a single connection the edge counts as one, an amplification-multiplexing bypass of a connection cap, not of an L7 request rate limit.

Simon Morley
Read →7 min read
RESEARCH
2026-07-22

Bypassing go-ethereum's --http.vhosts host allowlist with an empty Host, forged by an HAProxy HTTP/2→1.1 downgrade

An HTTP/2 request with an empty :authority, downgraded to HTTP/1.1 by an HAProxy front, reaches go-ethereum with an empty Host header that its --http.vhosts allowlist accepts (200) though it rejects any concrete disallowed host (403) — a bypass of geth's anti-DNS-rebinding Host filter by an attacker with raw-HTTP/2 reach to the edge.

Simon Morley
Read →7 min read
RESEARCH
2026-07-13

How unauthenticated simulateTransaction requests saturate an Agave RPC node's executor pool

Agave runs the simulateTransaction handler synchronously on its shared Tokio executor threads, so unauthenticated, gas-free simulate requests pin those workers and add queue latency across the validator's entire JSON-RPC tier — not just the simulate path.

Simon Morley
Read →7 min read
RESEARCH
2026-07-13

How an unauthenticated TLS half-open flood pins rippled's memory and crashes it under low file-descriptor limits

rippled's inbound TLS listeners on the peer port (51235) and the RPC-HTTPS port (5006) accept a partial TLS handshake with no deadline and no per-IP half-open cap, so a single source IP can pin server memory indefinitely and, at a default file-descriptor limit, crash the process.

Simon Morley
Read →8 min read
VALIDATOR-SECURITY
2026-05-21

Expensive work before authentication: the RPC pattern we keep finding

The DoS class that scales against validators isn't volumetric. It's small requests that cost the node real work before it authenticates the caller. The pattern we keep finding across clients, and the fix.

Simon Morley
Read →2 min read
VALIDATOR-SECURITY
2026-05-15

We're securing validators at the wrong layer

Blockchain security money goes to smart-contract audits. The validators those contracts run on are defended for volume and almost nothing else. The attacks that actually scale live at the transport and RPC layer, and they're a class, not a list.

Simon Morley
Read →3 min read
RESEARCH
2026-05-12

NR-2026-001 - Three Agave RPC architectural findings

Three architectural findings in the Agave JSON-RPC layer at v3.1.9: response amplification on getMultipleAccounts, Tokio executor saturation via simulateTransaction, and spawn_blocking pool saturation via getProgramAccounts. Architectural patterns, not rate-limit DoS - operator rate limits don't close them.

Simon
Read →12 min read