Research · Papers · Open code

Research.

[01]·Published papers
Companion paper · Working draft on GitHub
working draft

Substrate: the data-layer companion to earned autonomy.

An open bundle format for adversarial behaviour, a chain-agnostic taxonomy of ten attack families, and a 2,103-bundle Sui+Solana corpus. Methodology pre-registers thresholds, audits for leak surfaces, and freezes data increment-only. Format open. Corpus proprietary.

Simon Morley
[02]·Disclosures
Open corpus · Hugging Face

3.32k bundles. Every finding, a reproducible capture.

Each disclosure reduces to wire-level, ground-truth-labelled traffic against real node software: schema-pinned, provenance-hashed, replayable. We publish these as nr-bundles-public, the open reference subset of the Substrate corpus. The detectors below are trained on it.

Open the dataset →All models and Spaces →
Published advisories →Advisory sources on GitHub →
[03]·Publication Policy

Why we publish these findings publicly.

These are node-availability findings - malformed-snapshot / bootstrap crashes, RPC and response amplification, consensus-channel message floods, pre-authentication handshake CPU burns, and subscription / connection-slot exhaustion - in the class that vendors declare out-of-scope for bounty and embargo. Vendor SECURITY.md files explicitly direct out-of-scope findings to public issues. The impact is real and high for any node in its default configuration, and it is not theoretical: each mechanism is measured against the real code path - the deserializer, the request handler, or the consensus reactor - not asserted. The flagship example is a malformed snapshot that deterministically crashes a bootstrapping node during snapshot load from untrusted peers, before the hash gate, measured against the real deserializer and index-generation path.

We publish for three reasons:

  1. Public good: The validator ecosystem has no shared attack substrate. These primitives belong in the open corpus so operators, researchers, and tool builders can defend against the actual threat surface, not the one vendors prefer to acknowledge.
  2. Transparency: We train our detectors on real, contract-validated behaviors. Hiding source findings would make the models and index unverifiable. The corpus is the ground truth.
  3. Independent research posture: We are not a vendor SOC or bounty hunter. We surface ignored classes so the standard improves. Vendors can fix; the community gets the data immediately.

No embargo applies. No weaponized PoC is released. Analysis + reproducer only. This is how the reference substrate is built.

The advisory corpus and this policy in full →
[04]·Open source

The code we publish.

Tooling we open-source under the NullRabbit Labs organisation.

See all on GitHub →
[05]·Index

Longform research.

NRDAX
2026-07-30

Which chains fail the same way

Twenty-eight of the 118 techniques we have reproduced appear on more than one chain. The registry could always report that number but never draw the line between the chains. The chain graph draws it, and most of the lines it draws are arithmetic rather than evidence, which is the part worth publishing.

Simon Morley
Read →4 min read
EARNED-AUTONOMY
2026-07-28

Beyond Zero answers what the machine decides. It does not answer who said it could.

Google's Beyond Zero moves the trust boundary from the application to the individual action and puts a reasoning layer in the access path. The objection that landed on Hacker News, that a non-deterministic evaluator does not belong there, is aimed one layer too low. The gap is not determinism. It is legitimacy: nothing establishes that a given system has the standing to act in your environment, against your traffic, under your conditions. Vendor-asserted accuracy is not evidence.

Simon Morley
Read →5 min read
CARDANO
2026-07-28

Cardano `cardano-submit-api`: unbounded request body → memory exhaustion

Cardano's HTTP transaction submission service buffers oversized request bodies without limit, pinning ~500 MB per request and potentially causing OOM on commodity validator infrastructure.

Simon Morley
Read →5 min read
QTUM
2026-07-28

Qtum BIP-324 Pre-Authentication ECDH CPU Exhaustion

Qtum's BIP-324 v2 transport runs a pre-authentication ellswift-ECDH on every inbound connection, allowing a single source IP to saturate a core and deny honest peers.

Simon Morley
Read →3 min read
RESEARCH
2026-07-23

What syscall-layer tooling cannot see in P2P infrastructure: a technique-by-technique analysis

If you run Falco, an EDR, or a generic host agent on a validator and a network-DoS attack against the node went undetected, this explains why. A technique-by-technique analysis of five reproduced P2P-infrastructure attacks against the syscall detection surface. Zero are detectable as attributable rules, and the reasons are structural, not a matter of tuning.

Simon Morley
Read →14 min read
SOLANA
2026-07-22

Crashing an Agave validator during snapshot bootstrap with one oversized account length

A snapshot served by an untrusted peer that declares one account with a data_len over Agave's 10 MiB per-account maximum panics a bootstrapping validator during index generation — before the snapshot hash is ever checked — from a ~136-byte crafted storage file.

Simon Morley
Read →7 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
ETHEREUM
2026-07-22

How a zero-value GetBlockHeaders request underflows to serve go-ethereum's entire header chain (CVE-2024-32972)

A go-ethereum eth-protocol peer that sends a GetBlockHeaders request with amount (count) set to 0 triggers an integer underflow — count-1 wraps to UINT64_MAX — bypassing the maxHeadersServe cap and forcing the node to serve headers back to genesis, a publicly disclosed memory-exhaustion DoS (CVE-2024-32972, fixed in geth 1.13.15) that NullRabbit reproduced as a lab detection bundle.

Simon Morley
Read →7 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
BITCOIN
2026-07-16

How a missing duplicate-input check in Bitcoin Core let one block crash 0.14.x nodes and silently inflate the supply on 0.15.0–0.16.2 (CVE-2018-17144)

A Bitcoin Core block containing a transaction that spends the same previous output twice reaches a validation path with no duplicate-input check: on 0.14.x this trips an internal assertion and crashes the node, and on 0.15.0-0.16.2 — when the duplicated output was created in an earlier block — it passes silently, letting the block's miner claim that output's value twice. Fixed in 0.16.3 / 0.17.0.

Simon Morley
Read →8 min read
NRDAX
2026-07-16

The overlap is empty

We crosswalked NRDAX against MITRE AADAPT. Twenty-two NRDAX techniques touch AADAPT and none are reproduced. Everything we have reproduced sits where MITRE does not model; everything MITRE models, we have only read about. The empty column is the finding.

Simon Morley
Read →3 min read
RESEARCH
2026-07-16

How a single crafted gossipsub PRUNE backoff value panics rust-libp2p nodes via an Instant overflow (CVE-2026-34219)

rust-libp2p's gossipsub implementation stores a peer-supplied PRUNE backoff duration and later adds a further duration to it during heartbeat processing using unchecked arithmetic; a single crafted PRUNE with a backoff value near u64::MAX overflows that addition and panics the process.

Simon Morley
Read →6 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 CometBFT's SecretConnection handshake spends CPU before authenticating the peer

CometBFT completes the full SecretConnection STS handshake — an X25519 Diffie–Hellman exchange and an Ed25519 signature verification — for any connecting peer before checking whether that peer's node-ID is allowlisted, so an unauthenticated remote source can spend the node's asymmetric-crypto budget at will.

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

How unbounded HTTP/2 concurrent streams let one TCP connection OOM-kill an IOTA node's public gRPC server

An IOTA node's public gRPC server accepts an unbounded number of concurrent HTTP/2 streams on a single TCP connection, so one client multiplexing around 200 concurrent GetTransactions calls drives resident memory from a few hundred MB to multiple GB in about 10 seconds until the kernel OOM-killer terminates the node.

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

NRDAX: browsable by chain and family, readable by machines

NRDAX now holds 623 techniques across 64 chains, 162 reproduced with bundles. New per-chain and per-family landing pages, a pretty Atom feed, JSON and STIX 2.1 and knowledge-pack distributions surfaced for machines, and a fix for the first_seen date bug.

Simon Morley
Read →2 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
NRDAX
2026-07-11

NRDAX now includes known-but-not-reproduced techniques

NRDAX v0.1-import now contains 368 techniques across 21 chains: 140 with reproduced instances and bundles, and 228 known from public disclosures (CVEs, GHSAs, vendor advisories) but not yet reproduced in the lab. A CVE maps to its technique even when no bundle exists yet.

Simon Morley
Read →1 min read
NRDAX
2026-07-09

NRDAX: the canonical technique registry for decentralized infrastructure attacks

We have published NRDAX, the NullRabbit Decentralised Attack indeX, at nrdax.com. It is the reference registry for attack techniques against decentralized infrastructure: 135 chain-agnostic techniques, grouped into mechanism families, with a coverage matrix across 21 chains.

Simon Morley
Read →1 min read
SECURITY-RESEARCH
2026-07-07

Eighteen advisories, ten node implementations, one attack class

Since NR-2026-001, eighteen advisories across ten independent node implementations. Not unrelated bugs: one recurring attack class, unauthenticated ingress surfaces where a cheap request forces disproportionate cost. Egress and memory amplification, pre-auth CPU exhaustion, connection exhaustion, and crashes.

Simon Morley
Read →1 min read
CLOUDFLARE
2026-06-26

We slipped a path past Cloudflare's edge. The fix is one checkbox.

Cloudflare resolves dot-segments in a URL only far enough to reject the obvious escapes, then forwards the raw, still-encoded path to your origin, which quietly resolves it the rest of the way. Your edge rules see one path; your server serves another. Cloudflare even warns you about it, in a banner most people scroll past.

Simon Morley
Read →5 min read
SECURITY-RESEARCH
2026-06-26

The same method, pointed at the packet path

We took the parser-family lens that finds HTTP smuggling bugs and pointed it at the Linux kernel's network receive path, through Google's sanctioned bug-bounty programs. Then we measured our own opportunity honestly, and the honest answer was 'thin, for now.'

Simon Morley
Read →5 min read
SECURITY-RESEARCH
2026-06-25

How we hunt request smuggling without breaking anything

A timing hunch is not a finding. The discipline that separates real desync research from noise is the part nobody photographs: a lab of real proxies, a back-end you own that logs the literal forwarded bytes, and a hard line about who you're allowed to point any of it at.

Simon Morley
Read →6 min read
SECURITY-RESEARCH
2026-06-24

Meet Keith, and why we're keeping it closed

We built our own HTTP engine from scratch. No normalisation, no typed header map, no helpfulness at all, because a well-behaved client quietly fixes the exact malformations you need to send. Here is what Keith is, and why we changed our minds about open-sourcing it.

Simon Morley
Read →5 min read
SECURITY-RESEARCH
2026-06-22

The h3 FIN/EOM desync, and why your smuggling tool can't send it

HTTP/3 request smuggling is almost unploughed ground. Not because the surface is small, but because nearly every tool speaks h1/h2 only, and the few that speak h3 do it through a conformant QUIC library that won't let you send the bug.

NullRabbit Labs
Read →4 min read
SECURITY-RESEARCH
2026-06-09

The 99% was wrong. So was the 0.32.

Our detector's 99% accuracy was memorisation, and the 0.32 we nearly published in its place was wrong too. The clean experiment found the real split: cross-chain detection generalises, attribution doesn't.

Simon Morley
Read →5 min read
SECURITY-RESEARCH
2026-06-02

Anyone can knock a validator over once. The skill is designing an attack you can learn from

Making a node fall over is easy and proves nothing. The craft is building a reproducer that isolates the mechanism, measures it against an honest baseline, bounds the cost, and runs on one command, so the number actually means something.

Simon Morley
Read →3 min read
SECURITY-RESEARCH
2026-05-27

How we decide a finding is real before we tell you about it

We had a clean denial-of-service against consensus. Re-verification said the baseline was that low by config. No attack. So we pulled it. The discipline that catches our own mistakes is the reason our advisories are worth reading.

Simon Morley
Read →3 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-13

Open data for blockchain validator security: the first multi-modal dataset for infrastructure attacks

We've published nr-bundles-public on Hugging Face: the first open, multi-modal dataset for blockchain validator security. 31 schema-pinned observations across Sui and Solana, seven attack families, CC-BY-4.0. Open bundle format, open ten-family taxonomy, closed corpus. The substrate for cross-chain ML detection of infrastructure attacks.

Simon
Read →7 min read
RESEARCH
2026-05-12

How we're building cross-chain ML detection for blockchain validator infrastructure

How we built a wire-shape detector that transfers across chains. V8 trained only on Sui hit 51 out of 51 zero-shot on Solana attacks it had never seen, because mechanism-class features carry across chains while host-telemetry features don't.

Simon
Read →4 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
SUBSTRATE
2026-05-06

Why ML Detection on Validator Infrastructure Keeps Reporting ROC = 1.000

V1 of our trainer scored ROC = 1.000 across all 17 folds. Two minutes of audit found why. Eight leak surfaces later, here's the apparatus that stops you fooling yourself with one.

Simon
Read →5 min read
SUBSTRATE
2026-04-26

Introducing Substrate: An Open Format for Validator Threat Intelligence

Validator threat intelligence has no shared format. We're publishing a bundle spec, a ten-family taxonomy, and seeding a 1,092-bundle corpus to fix that.

Simon
Read →7 min read
SLASHR
2026-04-14

We Scanned 5,700 [Solana, Eth, Sui, Atom] Validators. Here's What We Found.

NullRabbit scanned 5,715 validator hosts across Solana and Sui, running 10,139 scans and identifying 1,340 CVE findings across 155 hosts. Here's what the validator attack surface actually looks like.

Simon
Read →5 min read
SUI
2026-03-25

DeFi Under the Microscope: 1,075 Hosts, 3,001 Ports, One Timing Scan

A first look at what DeFi validator infrastructure looks like at the kernel level. We crack open the consolidated dataset: embedding galaxies, jitter fingerprints, RTT ridgelines, and 10,000 anomaly events across 642 silent hosts.

Simon
Read →6 min read
SUI
2026-03-20

What Does a DeFi Network Actually Look Like?

Every blockchain network has a physical fingerprint. We pointed our eBPF/XDP scanner at 1,075 hosts across multiple DeFi validator networks and mapped 3,001 timing fingerprints to reveal the structure underneath the consensus layer.

Simon
Read →4 min read
EBPF
2026-03-18

The Kernel Doesn't Care About Your Restart Script

Building a production BPF/XDP scanner is an exercise in humility. Orphaned XDP programs, async Rust deadlocks, stale binaries, silent TC failures: here is everything that broke and what we did about it.

Simon
Read →7 min read
SUI
2026-03-13

What We Found Scanning the Sui Validator Network

We scanned 138 Sui validators across 20 countries using kernel-level temporal fingerprinting. 41% have SSH exposed, 57 run unexpected internet-facing services, and 9 confirmed CVEs sit on 4 hosts, including 2 critical at CVSS 9.8. Here is what we found and why it matters for DeFi.

Simon
Read →6 min read
EARNED-AUTONOMY
2026-02-13

Why Autonomous Enforcement Must Earn Authority

The technology to defend networks autonomously exists. The legitimacy to deploy it does not. Introducing earned autonomy: a governance framework where defensive authority is demonstrated before granted, scoped per abuse class, and continuously re-earned or revoked.

NullRabbit Research
Read →9 min read
EARNED-AUTONOMY
2026-02-05

Building the Jig (Again): Claiming the Time Dimension

Inline defence without understanding is guesswork. Before machines act, they need evidence. Why we're open-sourcing our scanning system, building jigs instead of shortcuts, and claiming time as a first-class signal in infrastructure security.

NullRabbit Research
Read →4 min read
EARNED-AUTONOMY
2026-01-28

Earned Autonomy: The Paper

Machines attack at machine speed. Humans defend at human speed. The technology to close this gap exists - the governance doesn't. A framework for when machines should be permitted to act without human approval.

NullRabbit Research
Read →2 min read
EARNED-AUTONOMY
2026-01-21

Validating Inline Enforcement with XDP: IBSR and the Path to Earned Autonomy

Inline enforcement operates at machine speed, but trust cannot. IBSR is a validation step: using XDP to observe real traffic, simulate enforcement, and generate evidence before any blocking is enabled.

NullRabbit Research
Read →4 min read
EARNED-AUTONOMY
2026-01-13

On Earned Autonomy: When Should Machines Defend Networks Without Asking?

Machines attack at machine speed. Humans defend at human speed. We propose a governance framework for closing that gap, not through blind trust but through demonstrated competence.

NullRabbit Research
Read →4 min read
XDP
2025-12-18

Building the Jig: Why the Hard Part of Inline Defence Isn't the Code

The XDP logic came together in days. The infrastructure to prove it works took weeks. That ratio matters more than most people realise.

NullRabbit Research
Read →4 min read
SOLANA
2025-12-17

How Solana Shrugged Off a 6 Tbps DDoS

Solana reportedly absorbed a sustained ~6 Tbps volumetric DDoS attack with no downtime. That's real progress. It's also not the same thing as being protected.

NullRabbit Research
Read →6 min read
CLOUDFLARE
2025-12-16

Cloudflare Can't Save You From a DoS (I Checked)

I assumed Cloudflare would protect me from all denial-of-service attacks. It doesn't. A reality check on origin IP bypasses, non-HTTP floods, and why the gap between the edge and your kernel matters.

Simon Morley
Read →4 min read
XDP
2025-12-02

XDP Defence with MQTT: Real-Time Detection Pipeline

Demonstrating the complete XDP detection pipeline with MQTT eventing. Shows kernel-level SYN-flood detection, userspace processing, and real-time remote alerting - all in milliseconds.

Simon Morley
Read →2 min read
VALIDATORS
2025-11-24

No One Really Knows What's Hitting Their Infrastructure

I ran a SYN flood against my own server and watched every log file I could find. Nothing. Not a single line. Here's why Linux won't tell you about scans - and the tools that actually will.

Simon Morley
Read →5 min read
VALIDATORS
2025-11-19

XDP Inline Defense for Validators: Kernel-Level Protection at Line Rate

Validator nodes face constant exposure. This deep dive explains how NullRabbit Guard uses eBPF and XDP to enforce security directly inside the NIC driver, dropping scans and abnormal traffic at line rate before they reach the kernel or your node.

NullRabbit Labs
Read →7 min read
XDP
2025-11-11

XDP: The Kernel-Level Powerhouse Behind Modern Network Defense

A deep dive into eXpress Data Path (XDP), how it hooks into the Linux kernel at the earliest stage of packet processing, and why it's becoming the foundation for next-gen network security and observability.

Simon Morley
Read →4 min read