You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

nr-network-known-class-detector

A binary attack-vs-benign detector for blockchain-node network/resource attacks, trained entirely on faithful reproductions of publicly-disclosed attacks. Every attack class in the corpus reproduces a specific public disclosure — a CVE, a GHSA, or a named third-party security audit — and each carries a provenance.source_class recording how public its sourcing is. Part of NullRabbit's work on autonomous defence for decentralised networkswatch the outside of the perimeter.

STATUS: DIAGNOSTIC, not a deployment claim. Trained on synthetic localnet reproductions (lab fidelity), not real production traffic. See Evaluation and Limitations.

Model description

Given the network-layer signal of a short capture window against a blockchain node (packet-rate / size statistics from the pcap, and amplification / request-response / timing statistics from the RPC responses), the model emits a calibrated attack probability. It is one multi-family model over the network-v1 feature manifold — it spans 17 chains, all public-sourced (this published cut is trained on public-cve-replication primitives only).

Architecture

  • HistGradientBoostingClassifier + isotonic calibration (scikit-learn), NaN-native.
  • pcap aggregates + RPC-response aggregates, degenerate columns dropped by a per-fit robust-column guard. No host-load features (the containerised lab node is root-owned, so host metrics are unreadable).
  • Decision threshold 0.5 (calibrated). Inference is scoreability-gated: a record with no network signal (e.g. an economic/DeFi bundle) returns scoreable=False with no verdict.

Training data — 130 public-CVE attack primitives, 17 chains, 1963 bundles

This is the public-CVE cut (public-cve-replication only): 1384 attack + 579 benign bundles (pcap + responses + manifest), 136 chain×primitive instances. Benign traffic exercises the same methods / wire messages the attacks abuse, at normal scale — so the model separates attack-use from benign-use, not message type. Every attack reproduces an external public disclosure with a provenance.public_source URL. (0 original primitives — NullRabbit's own measurement of vendor-acknowledged RPC amplification, for which no CVE exists — are held in the full corpus but excluded from this published cut, so the "trained entirely on public disclosures" claim above is literal.)

primitive chain · layer public source source_class
bitcoin_dup_input_crash Bitcoin · p2p CVE-2018-17144 public-cve-replication
bitcoin_tx_relay_jamming Bitcoin · p2p CVE-2024-55563 public-cve-replication
btc_addr_overflow_flood Bitcoin / Dogecoin / Litecoin · p2p CVE-2024-52919 public-cve-replication
btc_alert_flood Bitcoin · p2p CVE-2016-10724 public-cve-replication
btc_blocktxn_double_fillblock Bitcoin · p2p CVE-2024-35202 public-cve-replication
btc_bloom_divzero Bitcoin · p2p CVE-2013-5700 public-cve-replication
btc_cmpctblock_overflow Bitcoin · p2p CVE-2025-46597 public-cve-replication
btc_cmpctblock_stall Bitcoin · p2p CVE-2024-52922 public-cve-replication
btc_getdata_flood Bitcoin · p2p CVE-2024-52920 public-cve-replication
btc_headers_genesis_spam Bitcoin · p2p CVE-2024-52916 public-cve-replication
btc_headers_oom Bitcoin · p2p CVE-2019-25220 public-cve-replication
btc_inv_buffer_blowup Bitcoin · p2p CVE-2024-52915 public-cve-replication
btc_inv_eviction_jam Bitcoin · p2p CVE-2024-52913 public-cve-replication
btc_invalid_block_logfill Bitcoin · p2p CVE-2025-54605 public-cve-replication
btc_invdos_flood Bitcoin · p2p CVE-2018-17145 public-cve-replication
btc_mutated_block Bitcoin · p2p CVE-2024-52921 public-cve-replication
btc_orphan_cpu Bitcoin / Dogecoin / Litecoin · p2p CVE-2024-52914 public-cve-replication
btc_oversized_recv_buffer Bitcoin · p2p CVE-2015-3641 public-cve-replication
btc_tx_maprelay Bitcoin · p2p CVE-2013-4627 public-cve-replication
btc_tx_quad_sighash Bitcoin · p2p CVE-2025-46598 public-cve-replication
btc_version_selfnonce Bitcoin · p2p CVE-2025-54604 public-cve-replication
btc_version_timestamp_overflow Bitcoin · p2p CVE-2024-52912 public-cve-replication
p2p_getheaders_drain Bitcoin / Dogecoin / Litecoin · p2p CVE-2023-33297 public-cve-replication
sybil_peer_identity_flood Bitcoin · p2p public disclosure public-cve-replication
timejacking_peer_time_skew Bitcoin · p2p public disclosure public-cve-replication
tx_malleability_txid_mutate Bitcoin · p2p public disclosure public-cve-replication
cometbft_bitarray_mismatch Cosmos · cometbft-p2p-secretconn GHSA-hrhf-2vcr-ghch public-cve-replication
cometbft_blockpart_mismatch Cosmos · cometbft-p2p-secretconn GHSA-r3r4-g7hq-pq4f public-cve-replication
cometbft_blocksync_height_decrease_stuck Cosmos · cometbft-blocksync-reactor CVE-2025-24371 public-cve-replication
cometbft_blocksync_malicious_peer Cosmos · cometbft-p2p-secretconn GHSA-hg58-rf2h-6rr7 public-cve-replication
cometbft_mempool_dup_tx_leak Cosmos · cometbft-p2p-secretconn CVE-2023-34451 public-cve-replication
cometbft_voteext_panic Cosmos · cometbft-p2p-secretconn GHSA-p7mv-53f2-4cwj public-cve-replication
cosmos_gogoproto_skippy Cosmos · rpc-broadcast-tx CVE-2021-3121 public-cve-replication
cosmos_group_divzero_halt Cosmos · rpc-group-module-tx GHSA-x5vx-95h7-rv4p public-cve-replication
cosmos_p2p_conn_flood Cosmos · tcp-p2p-conn-flood CVE-2020-5303 public-cve-replication
cosmos_protobuf_nest_bomb Cosmos · rpc-broadcast-tx GHSA-8wcc-m6j2-qxvm public-cve-replication
cosmos_vesting_blocked_address Cosmos · cometbft-rpc-http GHSA-4j93-fm92-rp4m public-cve-replication
cosmwasm_validate_basic_address_count Cosmos · cometbft-rpc-http GHSA-m3rh-cvr5-x6q4 public-cve-replication
discv4_findnode_amplification Ethereum · devp2p-discv4-udp [public disclosure](NethermindEth/nethermind#12211 — 'Resolve some discovery dos vectors (which hive revealed)': discv4 (UDP node-discovery) DoS mitigation — endpoint-proof bonding tied to the exact UDP IP:port before honouring FINDNODE, plus a 50/50 request/response rate-limit split so NEIGHBORS response bursts can't starve legitimate queries. https://github.com/NethermindEth/nethermind/pull/12211) public-cve-replication
geth_alien_peer_pool_pollution Ethereum · devp2p-rlpx public disclosure public-cve-replication
geth_auth_zero_pubkey Ethereum · devp2p-rlpx CVE-2025-24883 public-cve-replication
geth_blob_kzg_dos Ethereum · devp2p-rlpx CVE-2026-22868 public-cve-replication
geth_devp2p_ping_flood Ethereum · devp2p-rlpx CVE-2023-40591 public-cve-replication
geth_eth_receipt_flood Ethereum · devp2p-rlpx EL-2024-20 public-cve-replication
geth_ethash_memory_exhaustion_dos Ethereum · ethereum-eth-devp2p [CVE-2021-42219](CVE-2021-42219 — https://nvd.nist.gov/vuln/detail/CVE-2021-42219 (MITRE: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42219). go-ethereum v1.10.9 remote DoS: an excessive amount of block/header messages to a node drives repeated ethash cache generation in consensus/ethash/algorithm.go -> memory exhaustion. CVSS 3.1 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). No vendor GHSA (third-party exploit-doc ref).) public-cve-replication
geth_getblockheaders_count_zero Ethereum · devp2p-rlpx CVE-2024-32972 public-cve-replication
geth_graphql_aliased_logs_dos Ethereum · ethereum-http-graphql CVE-2023-42319 public-cve-replication
geth_les_getproofsv2_dos Ethereum · devp2p-rlpx CVE-2020-26264 public-cve-replication
geth_les_skip_negative Ethereum · devp2p-rlpx CVE-2018-12018 public-cve-replication
geth_mempool_spend_all_flood Ethereum · devp2p-eth-transactions CVE-2022-23328 public-cve-replication
geth_rlpx_auth_flood Ethereum · devp2p-rlpx EL-2026-06 public-cve-replication
geth_rpc_unlocked_wallet_drain Ethereum · ethereum-http-rpc public disclosure public-cve-replication
geth_snap_trienode_dos Ethereum · devp2p-rlpx CVE-2021-41173 public-cve-replication
geth_sybil_identity_flood Ethereum · devp2p-rlpx public disclosure public-cve-replication
geth_tcp_handshake_flood Ethereum · devp2p-rlpx EL-2024-06 public-cve-replication
geth_tx_future_flood Ethereum · devp2p-rlpx CVE-2022-23327 public-cve-replication
monero_levin_array_memcorrupt Monero · levin-p2p CVE-2018-3972 public-cve-replication
monero_portable_storage_oom Monero · levin-p2p PR#7190 public-cve-replication
monero_rpc_conn_exhaustion Monero · http-rpc CVE-2025-26819 public-cve-replication
monero_wallet_rpc_body_size_dos Monero · monero-wallet-rpc-http public disclosure public-cve-replication
monero_zmq_eagain_crash Monero · monero-zmq-rpc public disclosure public-cve-replication
firedancer_metrics_flood_crash Solana · prometheus-metrics-http [public disclosure](https://github.com/firedancer-io/firedancer/releases/tag/v0.106.11814 — Firedancer v0.106.11814 (Testnet) Bug Fixes: "Fixed an issue where a connection flood to the metrics server could crash the validator." Firedancer's fd_metrics tile serves Prometheus-compatible metrics over HTTP (default 127.0.0.1:7999/metrics; listen address operator-configurable / internet-exposable per the Firedancer bug-bounty guidance). A remote inbound TCP connection flood to the metrics port could crash the whole validator prior to this fix.) public-cve-replication
sol_tpu_quic_handshake_flood Solana · tpu-quic ND-FD04-LO-01 public-cve-replication
sol_tpu_quic_initial_cpu Solana · tpu-quic ND-FD1-MD-02 public-cve-replication
sol_tpu_quic_slowloris Solana · tpu-quic ND-FD04-IN-02 public-cve-replication
solana_repair_protocol_dos Solana · solana-serve-repair [public disclosure](https://github.com/solana-labs/solana/releases/tag/v1.1.16 — release note "Avoid possible repair orphan DoS"; fix PR https://github.com/solana-labs/solana/pull/10290 ("Fix run_orphan DOS", merged 2020-05-28), core/src/serve_repair.rs.) public-cve-replication
sui_disassemble_panic Sui · json-rpc CertiK Skyfall public-cve-replication
sui_move_recursion Sui · json-rpc CVE-2023-36184 public-cve-replication
sui_verifier_hamsterwheel Sui · json-rpc CertiK Skyfall HamsterWheel public-cve-replication
zcash_sapling_woodchip_tx_flood Zcash · zcash-p2p-tx-relay-flood CVE-2019-11636 public-cve-replication
zcash_zebra_addr_vector_preallocation_amplification Zcash · zcash-p2p-addr-addrv1-vec CVE-2026-40881 public-cve-replication
zcash_zebra_coinbase_script_preallocation_amplification Zcash · zcash-p2p-tx-coinbase-input-script CVE-2026-44500 public-cve-replication
zcash_zebra_equihash_solution_preallocation_amplification Zcash · zcash-p2p-headers-block-solution CVE-2026-44500 public-cve-replication
zcash_zebra_headers_message_preallocation_amplification Zcash · zcash-p2p-headers-countedheader-vec CVE-2026-44500 public-cve-replication
zcash_zebra_tx_cache_consensus_split Zcash · consensus CVE-2026-34377 public-cve-replication
zebra_block_discovery_dos Zcash · zcash-p2p-block-discovery [CVE-2026-44499](CVE-2026-44499 / GHSA-h9hm-m2xj-4rq9 — https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-h9hm-m2xj-4rq9 (also https://nvd.nist.gov/vuln/detail/CVE-2026-44499). Permanent Block Discovery Halt in Zebra via Gossip Queue Saturation and Syncer Poisoning.) public-cve-replication
zebra_rpc_premature_disconnect_crash Zcash · zcash-jsonrpc-http [CVE-2026-41585](CVE-2026-41585 / GHSA-29x4-r6jv-ff4w https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-29x4-r6jv-ff4w (Zebra JSON-RPC HTTP middleware: DoS via interrupted/truncated request body from an authenticated client)) public-cve-replication
zebra_sighash_single_missing_output Zcash · consensus GHSA-cwfq-rfcr-8hmp public-cve-replication
zebra_sync_restart_poisoning Zcash · zcash-p2p-inv+block-sync-poison [CVE-2026-52737](CVE-2026-52737 / GHSA-gvjc-3w7c-92jx — https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-gvjc-3w7c-92jx) public-cve-replication
envoy_http2_hpack_cookie_amplification http2 · http2-hpack-headers [CVE-2026-47774](CVE-2026-47774 / GHSA-22m2-hvr2-xqc8 (https://github.com/envoyproxy/envoy/security/advisories/GHSA-22m2-hvr2-xqc8). Envoy HTTP/2 codec (oghttp2/quiche): HPACK header-block limits enforced on ENCODED bytes with no total-DECODED-size limit, plus cookie bytes escaping max_request_headers_kb accounting. Affected Envoy < 1.39; patched 1.35.11 / 1.36.7 / 1.37.3 / 1.38.1. CWE-405 + CWE-770; CVSS 7.5.) public-cve-replication
http2_bomb_indexed_ref_window_pin http2 · http2-hpack-headers+flowcontrol [CVE-2026-49975](CVE-2026-49975 ("HTTP/2 Bomb"). HTTP/2 servers (nginx <1.29.8, Apache httpd mod_http2 <2.0.41, Envoy <=1.37.2, Cloudflare Pingora) enforce HPACK limits on ENCODED header-block bytes without bounding the total DECODED header list, and hold each stream's amplified decoded allocation until the stream makes flow-control progress. An attacker seeds the HPACK dynamic table with one generic header then emits thousands of 1-byte indexed references (0x80 62=0xBE, ~5,700:1 decoded-size amplification) WHILE advertising a zero-byte flow-control window (SETTINGS_INITIAL_WINDOW_SIZE=0) and dripping 1-byte WINDOW_UPDATE frames, PINNING the amplified allocation (server can't drain it): ~32 GiB pinned in <20 s from ONE connection -> OOM. CWE-405 + CWE-770 + CWE-400.)
http2_continuation_flood http2 · http2-continuation-flood CVE-2026-33871 public-cve-replication
http2_madeyoureset_flood http2 · http2-madeyoureset [CVE-2025-8671](CVE-2025-8671 ("MadeYouReset") / CVE-2025-55163 (GHSA-prj3-ccx8-p6x4) / CERT/CC VU#767506 — https://kb.cert.org/vuls/id/767506 , https://github.com/netty/netty/security/advisories/GHSA-prj3-ccx8-p6x4 . HTTP/2 DoS in which an attacker sends protocol-valid-but-misused control frames (WINDOW_UPDATE increment 0, HEADERS/DATA on a half-closed stream, or PRIORITY with a bad length) that force the SERVER to emit RST_STREAM. The reset stream immediately stops counting against MAX_CONCURRENT_STREAMS (typ. 100) yet the backend keeps processing the request -> unbounded concurrent work -> resource exhaustion (OOM/CPU) -> DoS. Umbrella CVSS 3.1 7.5 HIGH; Netty CVE-2025-55163 CVSS 4.0 8.2 HIGH (patched 4.1.124.Final / 4.2.4.Final). DISTINCT from CVE-2023-44487 Rapid Reset (client-emitted RST): here the RST is server-emitted so client-side rapid-reset mitigations do not apply. Discovered by Tel Aviv University + Imperva. Affects Netty, Apache Tomcat (CVE-2025-48989), Eclipse Jetty (CVE-2025-5115), F5 BIG-IP (CVE-2025-54500), gRPC and many other HTTP/2 stacks (CERT/CC VU#767506).) public-cve-replication
http2_malformed_priority_leak_flood http2 · http2-priority-leak [CVE-2025-31650](CVE-2025-31650 (Apache Tomcat) — https://nvd.nist.gov/vuln/detail/CVE-2025-31650 , https://lists.apache.org/thread/j6zzk0y3yym9pzfzkq5vcyxzz0yzh826 . Improper Input Validation / Incomplete Cleanup (CWE-459): incorrect error handling for some INVALID HTTP/2 priority values resulted in incomplete clean-up of the failed request, creating a memory leak; a large number of such requests triggers an OutOfMemoryError → DoS. Vulnerable path: Http2Parser.readPriorityUpdateFrame (and Stream.emitHeader) → Priority.parsePriority(r) throws IllegalArgumentException on an invalid RFC 9218 priority value (e.g. out-of-range urgency u=99), previously un-caught. CVSS 3.1 7.5 HIGH (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). Affected: Apache Tomcat 9.0.76-9.0.102, 10.1.10-10.1.39, 11.0.0-M2-11.0.5 (and EOL-at-disclosure 8.5.90-8.5.100); fixed 9.0.104 / 10.1.40 / 11.0.6. Fixed by wrapping Priority.parsePriority in try/catch + Http2UpgradeHandler.upgradeDispatch cleanup.) public-cve-replication
http2_settings_ack_stream_cap_bypass http2 · http2-settings-ack-stream-cap-bypass [CVE-2025-53506](CVE-2025-53506 (GHSA-25xr-qj8w-c4vf) — https://github.com/advisories/GHSA-25xr-qj8w-c4vf , https://www.openwall.com/lists/oss-security/2025/07/10/13 . Uncontrolled Resource Consumption in Apache Tomcat Coyote HTTP/2: at connection start the server's initial SETTINGS frame reduces SETTINGS_MAX_CONCURRENT_STREAMS to the configured cap (default 100), but Tomcat did not ENFORCE that reduced cap until the client acknowledged the SETTINGS frame (a SETTINGS frame with the ACK flag). A remote unauthenticated client that never sends the ACK immediately opens far more concurrent streams than the cap; Coyote accepts every stream, allocates a request/response processor + buffers per stream, never emits REFUSED_STREAM / GOAWAY, and exhausts memory and threads -> DoS. CVSS 3.1 7.5 HIGH (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), CWE-400. Affected: Apache Tomcat 11.0.0-M1..11.0.8; 10.1.0-M1..10.1.42; 9.0.0.M1..9.0.106; 8.5.0..8.5.100 (EOL) (patched 11.0.9 / 10.1.43 / 9.0.107). DISTINCT from CVE-2023-44487 Rapid Reset (client RST_STREAM flood), CVE-2025-8671 MadeYouReset (server-emitted RST via a misuse frame) and CVE-2026-33871 CONTINUATION flood (single-stream header-decode pin): this attack sends NO RST_STREAM and NO misuse/CONTINUATION frame — it opens many complete concurrent streams past an un-enforced cap.) public-cve-replication
envoy_http3_qpack_blocked_decode_leak http3 · http3-qpack [GHSA-p7c7-7c47-pwch](GHSA-p7c7-7c47-pwch — envoyproxy/envoy: 'HTTP/3 QPACK blocked-decoding memory exhaustion.' Envoy's HTTP/3 QPACK decoder mis-accounts QUIC flow control for BLOCKED header blocks: when a received field section references dynamic-table entries with a Required Insert Count higher than the entries actually inserted (the encoder-stream inserts have not arrived), the block cannot be decoded and is buffered on the decoder heap, yet 'stream-level and connection-level flow-control windows are returned to the peer even though the payload bytes are still resident in heap memory.' The attacker never sends the referenced inserts (blocks never unblock) and, because the credit was returned, progressively feeds more HEADERS payload bytes into this uncontrolled internal buffer, circumventing QUIC flow-control limits -> unbounded memory growth and DoS of the HTTP/3 stack. Severity High, CVSS 7.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H); no CVE assigned. Affected Envoy < 1.39; fixed 1.35.13, 1.36.9, 1.37.5, 1.38.3. No auth/privileges required. Advisory: https://github.com/envoyproxy/envoy/security/advisories/GHSA-p7c7-7c47-pwch) public-cve-replication
netty_http3_field_section_oom http3 · http3-qpack [CVE-2026-44892](CVE-2026-44892 / GHSA-c2rx-5r8w-8xr2 — netty/netty (io.netty:netty-codec-http3 (Maven)): 'Vulnerable Default Configuration Which Leads to Denial of Service via Unbounded HTTP/3 Header Size.' Netty enforces safe 8192-byte header limits for HTTP/1.1 and HTTP/2, but the HTTP/3 Http3ConnectionHandler follows RFC 9114's unlimited default: when a peer omits HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE, maxHeaderListSize defaults to the virtually-unbounded (1L << 62) - 1. A peer that omits the setting and sends a HEADERS block with an enormous number of header fields makes the codec buffer field data until the JVM exhausts heap -> OutOfMemoryError (availability DoS, severity High, CVSS 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H; CWE-400 (Uncontrolled Resource Consumption); CWE-1188 (Insecure Default Initialization)). Fixed 4.2.15.Final (default replaced with a hardcoded 8192-byte cap Http3CodecUtils.DEFAULT_MAX_FIELD_SECTION_SIZE). Affected >= 4.2.0.Final, <= 4.2.14.Final. Advisory: https://github.com/netty/netty/security/advisories/GHSA-c2rx-5r8w-8xr2) public-cve-replication
ipfs_dht_sybil_censorship ipfs · libp2p-kad-dht CVE-2023-26248 public-cve-replication
go_libp2p_oversized_rsa_key_cpu_burn libp2p · libp2p-security-handshake CVE-2023-39533 public-cve-replication
gossipsub_ihave_iwant_flood libp2p · libp2p-gossipsub CVE-2026-49866 public-cve-replication
gossipsub_prune_backoff_overflow libp2p · libp2p-gossipsub CVE-2026-34219 public-cve-replication
gossipsub_subscribe_flood libp2p · libp2p-gossipsub CVE-2026-46679 public-cve-replication
libp2p_autonatv2_nil_map_crash libp2p · libp2p-autonatv2 public disclosure public-cve-replication
libp2p_conn_resource_exhaustion libp2p · libp2p-connection-setup CVE-2022-23487 public-cve-replication
libp2p_dht_putvalue_disk_exhaustion libp2p · libp2p-kad-dht CVE-2026-45783 public-cve-replication
libp2p_rendezvous_cookie_exhaustion libp2p · libp2p-rendezvous CVE-2026-35457 public-cve-replication
libp2p_rendezvous_namespace_oom libp2p · libp2p-rendezvous CVE-2026-35405 public-cve-replication
libp2p_signed_peer_record_flood libp2p · libp2p-gossipsub CVE-2023-40583 public-cve-replication
libp2p_stream_exhaustion libp2p · libp2p-gossipsub CVE-2022-23492 public-cve-replication
yamux_ping_flood_pending_frames_oom libp2p · libp2p-yamux CVE-2024-32984 public-cve-replication
yamux_syn_oversized_body_panic libp2p · libp2p-yamux CVE-2026-32314 public-cve-replication
namada_multisig_256key_sig_overflow namada · cometbft-rpc-http GHSA-82vg-5v4f-f9wq public-cve-replication
namada_tx_repeated_sections_hash_blowup namada · cometbft-rpc-http GHSA-f8qm-hmm3-fv7f public-cve-replication
nimiq_dht_get_first_record_poison nimiq · libp2p-kad-dht CVE-2026-46541 public-cve-replication
nimiq_dht_sig_length_panic nimiq · libp2p-kad-dht CVE-2026-40092 public-cve-replication
nimiq_proposal_signer_oob nimiq · libp2p-gossipsub CVE-2026-32605 public-cve-replication
substrate_h2_rapid_reset polkadot · substrate-rpc-http2 [CVE-2023-26964](CVE-2023-26964 (RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r) — https://nvd.nist.gov/vuln/detail/CVE-2023-26964, https://rustsec.org/advisories/RUSTSEC-2023-0034.html . HTTP/2 Rapid Reset (CVE-2023-44487 class) resource-exhaustion DoS in the Rust h2 crate < 0.3.17: a flood of HEADERS/RST_STREAM frames grows the pending-accept-reset stream queue unbounded in memory -> OOM. CVSS 3.1 7.5 HIGH (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H), CWE-770. Consumed by substrate/polkadot via hyper on the RPC & prometheus HTTP servers; bumped 0.3.16 -> 0.3.17 in paritytech/substrate#13915 (https://github.com/paritytech/substrate/pull/13915). Fix: hyperium/h2#668 (https://github.com/hyperium/h2/pull/668) adds max_pending_accept_reset_streams + GOAWAY(ENHANCE_YOUR_CALM).) public-cve-replication
coredns_doq_stream_slowloris quic · quic-transport / dns-over-quic [CVE-2025-47950](CVE-2025-47950 / GHSA-cvx7-x8pj-x2gw — CoreDNS DNS-over-QUIC (DoQ) memory exhaustion via stream amplification (CoreDNS < 1.12.2): the DoQ server spawns a goroutine per QUIC stream with no stream/goroutine limit and reads the DoQ length prefix + body with blocking io.ReadFull() calls that have no per-stream read deadline; opening many streams and sending 1 byte on each pins goroutines -> OOM. https://github.com/coredns/coredns/security/advisories/GHSA-cvx7-x8pj-x2gw) public-cve-replication
dnsdist_doq_concurrent_conn_exhaustion quic · quic-transport / dns-over-quic + dns-over-http3 [CVE-2026-33254](CVE-2026-33254 / PowerDNS Security Advisory 2026-04 (dnsdist) — PowerDNS dnsdist DoQ/DoH3 concurrent-connection memory exhaustion: the DNS-over-QUIC (addDOQLocal) and DNS-over-HTTP/3 (addDOH3Local) frontends commit per-connection state with no cap on the number of concurrent DoQ/DoH3 connections, so an attacker opening many concurrent connections drives unbounded memory growth -> DoS (CWE-770). DoQ/DoH3 are off by default (CVSS 5.3). https://dnsdist.org/security-advisories/powerdns-advisory-2026-04.html) public-cve-replication
dnsdist_doq_error_query_mem_leak quic · quic-transport / dns-over-quic / dns-over-http3 [CVE-2026-33595](CVE-2026-33595 / PowerDNS Security Advisory 2026-04 — PowerDNS dnsdist DoQ/DoH3 memory exhaustion via error-triggering queries: over a single DNS-over-QUIC or DNS-over-HTTP3 connection an attacker sends a large run of error-triggering DNS queries; dnsdist attaches per-error bookkeeping to the connection and does not free it until the connection closes, so memory accumulates without bound -> DoS. CWE-400; CVSS 3.1 Medium (~5.3) (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L). DoQ/DoH3 listeners are OFF BY DEFAULT.) public-cve-replication
lsquic_initial_prehandshake_leak quic · quic-transport-initial-coalescing [CVE-2025-54939](CVE-2025-54939 (QUIC-LEAK) — Imperva disclosure (https://www.imperva.com/blog/quic-leak-cve-2025-54939-new-high-risk-pre-handshake-remote-denial-of-service-in-lsquic-quic-implementation/); LiteSpeed advisory https://blog.litespeedtech.com/2025/08/18/litespeed-security-update/. LSQUIC ('LiteSpeed QUIC (LSQUIC) Library LSQUIC Engine Packet In Memory Leak') coalesces multiple QUIC packets per UDP datagram and allocates one 96-byte packet_in per coalesced packet; when trailing coalesced Initial packets fail DCID validation, lsquic_engine.c frees only the first packet's packet_in and never calls lsquic_mm_put_packet_in for the rest -> pre-handshake memory leak that bypasses all post-handshake connection/stream/flow limits -> OOM (70% of bandwidth).) public-cve-replication
msquic_dup_tp_versioninfo_leak quic · quic-tls-handshake [CVE-2024-26190](CVE-2024-26190 / GHSA-2x7m-gf85-3745 — microsoft/msquic: 'Remote Denial of Service Vulnerability' — memory leak from multiple decodes of the QUIC transport parameters TLS extension. A remote unauthenticated peer sends a ClientHello whose TLS extension list contains multiple duplicate quic_transport_parameters extensions (ext type 0x0039), each carrying a version_information transport parameter (TP id 0x11); QuicCryptoTlsReadExtensions did not reject the duplicate, so QuicCryptoTlsDecodeTransportParameters ran once per occurrence, each CXPLAT_ALLOC'ing a fresh VersionInfo (QUIC_POOL_VERSION_INFO) and then zeroing the struct without freeing the prior pointer -> one leaked allocation per duplicate. 'The MsQuic server will continue to leak memory until no more is available, resulting in a denial of service.' CVSS 3.1 7.5 (High; CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). Affected msquic < 2.1.12 (2.1.x), < 2.2.7 (2.2.x), < 2.3.5; fixed 2.1.12, 2.2.7, 2.3.5 (commit d364feeda0dd). Advisory: https://github.com/microsoft/msquic/security/advisories/GHSA-2x7m-gf85-3745) public-cve-replication
quic_conn_id_memory_exhaustion quic · quic-transport [CVE-2024-22189](CVE-2024-22189 / GHSA-c33x-xqrf-c478 — quic-go < 0.42.0: 'QUIC's Connection ID Mechanism vulnerable to Memory Exhaustion Attack'. https://github.com/quic-go/quic-go/security/advisories/GHSA-c33x-xqrf-c478) public-cve-replication
quic_go_path_challenge_flood quic · quic-transport [CVE-2023-49295](CVE-2023-49295 / GHSA-ppxx-5m9h-6vxf — quic-go/quic-go: 'Memory Exhaustion Attack against QUIC's Path Validation Mechanism.' An attacker floods the peer with a large number of PATH_CHALLENGE frames (RFC 9000 §8.2 requires a PATH_RESPONSE for each), then prevents those responses from being sent by collapsing the peer's congestion window (selective ACK) and manipulating its RTT estimate — so the un-sendable PATH_RESPONSE frames queue internally without bound, exhausting memory (availability DoS, severity Moderate). No workaround; the fix bounds retained path-validation state. Affected quic-go v0.40.0, <= v0.39.3, <= v0.38.1, <= v0.37.6; fixed v0.40.1, v0.39.4, v0.38.2, v0.37.7. Reported by marten-seemann. Advisory: https://github.com/quic-go/quic-go/security/advisories/GHSA-ppxx-5m9h-6vxf) public-cve-replication
quic_go_qpack_decompression_bomb quic · http3-qpack [CVE-2025-64702](CVE-2025-64702 / GHSA-g754-hx8w-x2g6 — quic-go/quic-go: 'HTTP/3 QPACK Header Expansion Memory Exhaustion.' quic-go's HTTP/3 decoder limits the ENCODED HEADERS frame size (1 MB (http3.Server.MaxHeaderBytes) server / 10 MB (http3.Transport.MaxResponseHeaderBytes) client) but not the DECODED field-section size. A crafted QPACK HEADERS block that densely references long static-table entries decompresses to ~50x its encoded size; RFC 9114 requires enforcing SETTINGS_MAX_FIELD_SECTION_SIZE, which quic-go <= v0.56.0 did not, so the decoder allocates the fully-expanded field section unbounded -> memory exhaustion (availability DoS, severity Moderate, CVSS 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L). Fixed v0.57.0 (SETTINGS_MAX_FIELD_SECTION_SIZE + incremental QPACK decoding, abort early). Affected quic-go <= v0.56.0. Reported by sfoxio. Advisory: https://github.com/quic-go/quic-go/security/advisories/GHSA-g754-hx8w-x2g6) public-cve-replication
quic_optimistic_ack_cwnd_growth quic · quic-1rtt-ack [CVE-2025-4820](CVE-2025-4820 / GHSA-2v9p-3p3h-w56j — https://github.com/cloudflare/quiche/security/advisories/GHSA-2v9p-3p3h-w56j (see also https://blog.cloudflare.com/defending-quic-from-acknowledgement-based-ddos-attacks/ and RFC 9000 §21.4 Optimistic ACK Attack). cloudflare/quiche < 0.24.4 incorrectly grows its congestion window in response to ACK frames that acknowledge packets the peer never received (optimistic / opportunistic ACK), allowing more bytes in flight than the path supports and transmission faster than the path can handle. Fixed in quiche 0.24.4 (dynamic CWND-aware packet-number skipping so a forward ACK for a not-yet-sent packet number is caught).) public-cve-replication
quic_scid_collision_hash_dos quic · quic-transport [CVE-2025-47200](CVE-2025-47200 — NCC Group / Fox-IT technical advisory 'Hash Denial-of-Service Attack in Multiple QUIC Implementations'. QUIC servers index the connection table by the peer-chosen Source Connection ID (SCID, 8..20 bytes). Implementations hashing the SCID with a weak non-seeded function (FNV, xxHash, or a multiplicative hash = hash*31 + char) let an attacker pre-compute DISTINCT SCIDs that all collide into one bucket; opening many such connections degrades table insert/lookup from O(1) to O(n) (amortised O(n^2)), burning server CPU. Only SipHash resists it. Affected: xquic <= 1.8.1 (fixed 1.8.2), Apache Traffic Server <= 10.0.3 / 9.2.x <= 9.2.8, ngtcp2 1.10.0 example server (all CVE-2025-47200); kwik <= 0.10.0 (CVE-2025-23020, fixed 0.10.1); lsquic <= 4.0.12 (CVE-2025-24947, fixed 4.2.0); picoquic commit 3827b00 (CVE-2025-24946, fixed b80fd3f). https://www.nccgroup.com/research/technical-advisory-hash-denial-of-service-attack-in-multiple-quic-implementations/) public-cve-replication
quiche_0rtt_packet_len_panic quic · quic-transport public disclosure public-cve-replication
quiche_ack_never_sent_cwnd quic · quic-1rtt-ack [CVE-2025-4821](CVE-2025-4821 / GHSA-6m38-4r9r-5c4m — https://github.com/cloudflare/quiche/security/advisories/GHSA-6m38-4r9r-5c4m (NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-4821 ; see also https://blog.cloudflare.com/defending-quic-from-acknowledgement-based-ddos-attacks/ and RFC 9000 §19.3/§21.4). cloudflare/quiche < 0.24.4 incorrectly grows its congestion window in response to ACK frames covering a large range of packet numbers INCLUDING packet numbers that were NEVER SENT (invalid ACK ranges) — allowing more bytes in flight than the path supports and, in the extreme case, growing the window beyond the limit of the internal variable's type, causing an OVERFLOW PANIC. Fixed in quiche 0.24.4 (proper ACK-range validation rejecting ranges over never-sent packet numbers).) public-cve-replication
quiche_conn_id_retirement_unbounded quic · quic-transport [CVE-2024-1410](CVE-2024-1410 / GHSA-xhg9-xwch-vr7x — Cloudflare quiche (< 0.19.2; >= 0.20.0, < 0.20.1): 'quiche vulnerable to unbounded storage of information related to connection ID retirement'. https://github.com/advisories/GHSA-xhg9-xwch-vr7x) public-cve-replication
quiche_crypto_frame_flood quic · quic-transport [CVE-2024-1765](CVE-2024-1765 / GHSA-78wx-jg4j-5j6g — cloudflare/quiche: 'Unlimited resource allocation by QUIC CRYPTO frames flooding.' A remote peer repeatedly sends an unlimited number of QUIC CRYPTO frames (type 0x06) over an established connection; quiche buffered the CRYPTO reassembly stream without bounding total retained state, so the flood makes memory usage of the quiche server OR client climb for the duration of the connection (availability DoS, CVSS 3.1 5.9). Affected quiche <= 0.19.1, 0.20.0; fixed in 0.19.2, 0.20.1. Reported by Marten Seemann. Advisory: https://github.com/cloudflare/quiche/security/advisories/GHSA-78wx-jg4j-5j6g) public-cve-replication
quiche_nonutf8_close_panic quic · quic-transport public disclosure public-cve-replication
quiche_path_challenge_queue quic · quic-transport [CVE-2023-6193](CVE-2023-6193 / GHSA-w3vp-jw9m-f9pm — cloudflare/quiche: 'Unbounded queuing of path validation messages.' QUIC path validation (RFC 9000 §8.2) makes the recipient of a PATH_CHALLENGE frame (type 0x1a) reply with a PATH_RESPONSE (type 0x1b) echoing the 8-byte challenge. An unauthenticated remote attacker sends PATH_CHALLENGE frames — changing source address so each path migration forces path validation — and manipulates the connection (e.g. restricting the peer's congestion window) so PATH_RESPONSEs can only be sent slower than PATH_CHALLENGEs are received; quiche stores the path-validation data in an UNBOUNDED queue, so memory grows without limit for the connection's lifetime (availability DoS, CWE-400, CVSS 3.1 5.3 Moderate). Affected quiche 0.15.0 through 0.19.0; fixed in 0.19.1. Advisory: https://github.com/cloudflare/quiche/security/advisories/GHSA-w3vp-jw9m-f9pm) public-cve-replication
quiche_payload_overflow_crash quic · quic-transport public disclosure public-cve-replication
quiche_retire_cid_loop quic · quic-transport CVE-2025-7054 public-cve-replication
quinn_gap_fragment_reassembly_oom quic · quic-transport-stream-reassembly [GHSA-4w2j-m93h-cj5j](GHSA-4w2j-m93h-cj5j (https://github.com/advisories/GHSA-4w2j-m93h-cj5j) / RUSTSEC-2026-0185 (https://rustsec.org/advisories/RUSTSEC-2026-0185.html) — quinn-proto: remote memory exhaustion from unbounded out-of-order stream reassembly. The per-stream Assembler retains out-of-order received STREAM data until a contiguous prefix can be delivered; a peer sending many small STREAM fragments at gapped (non-contiguous) offsets forces un-coalescible entries whose per-fragment overhead grows without bound while never becoming deliverable.) public-cve-replication
quinn_large_client_hello_panic quic · quic-transport public disclosure public-cve-replication
quinn_unknown_frame_panic quic · quic-transport CVE-2023-42805 public-cve-replication
s2n_quic_crypto_offset_amplification quic · quic-transport [CVE-2026-10740](CVE-2026-10740 / GHSA-9q54-f358-3fqf — aws/s2n-quic: CRYPTO-frame offset amplification. The CRYPTO-frame reassembly buffer lacks maximum-size enforcement, so a CRYPTO frame (type 0x06) carrying an artificially HIGH offset forces the receiver to reserve reassembly buffer up to that offset even though the delivered body is tiny: a single 1200-byte packet causes ~9.4 MB of allocation (7800x). No authentication or valid handshake is required — the crafted CRYPTO frames ride pre-handshake QUIC Initial packets, so an unauthenticated peer can repeatedly transmit them to exhaust server memory (availability DoS, CVSS 3.1 5.3). Affected s2n-quic <= 1.81.0; fixed in 1.82.0. Advisory: https://github.com/aws/s2n-quic/security/advisories/GHSA-9q54-f358-3fqf) public-cve-replication
s2n_quic_stream_limit_exhaustion quic · quic-transport [GHSA-475v-pq2g-fp9g](GHSA-475v-pq2g-fp9g — AWS s2n-quic <= v1.30.0: 's2n-quic potential denial of service via crafted stream frames' — uncontrolled stream-limit increase when closing remote-initiated streams. https://github.com/aws/s2n-quic/security/advisories/GHSA-475v-pq2g-fp9g) public-cve-replication

Distribution: 1384 public-cve-replication attack bundles — 130 distinct primitives across 17 chains (Bitcoin, Cosmos, Dogecoin, Ethereum, http2, http3, ipfs, libp2p, Litecoin, Monero, namada, nimiq, polkadot, quic, Solana, Sui, Zcash) — plus 579 benign. This published cut contains no original bundles; the original RPC-measurement primitives live in the full internal corpus and ship only if the operator explicitly opts in, always under their honest label.

Training procedure (methodology is the contribution)

Per NullRabbit's pre-registration discipline: the corpus is built attack-by-attack from a public disclosure with provenance.public_source; a Cleanlab data-quality scan gates label-issues and duplicates before training; a methodology auditor reviews each gate event with sanity floors and falsification holdouts; honest limitations are stated; cycles — not the final number — are the contribution. This card + model are regenerated automatically from the cut on each training run, so the numbers below always match the shipped model.

Evaluation

Diagnostic ML checks (the corpus of faithfully-modelled public attacks is the deliverable; these are secondary). Reproduced by scripts/known_class_loco_eval.py + scripts/corpus_quality.py.

  • Within-corpus held-out — binary attack-vs-benign ROC-AUC, GroupKFold by primitive: 0.9757. corpus_sha256 known-class-v10-publiccve.
  • Leave-one-chain-out — binary ROC-AUC (HARD zero-shot transfer, not a deployment metric): Dogecoin 1.000 / Sui 1.000 / Ethereum 0.981 / Litecoin 0.975 / Cosmos 0.961 / Bitcoin 0.908 / Solana 0.892 / libp2p 0.858 / Monero 0.837 / Zcash 0.627. Chains with few public-CVE primitives have the fewest cross-chain near-neighbours; the companion nr-bundles-public dataset card reports the stricter held-out-chain 7-class family macro-F1 (0.17 Sui / 0.35 Solana vs ~0.14 floor). Reported honestly, not a deployment claim.
  • Leave-one-attack-primitive-out within Bitcoin (leak-clean disjoint-benign): all Bitcoin primitives ≥ 0.988. Detection is on traffic shape, not deep wire-semantics.

Intended uses

Research and benchmarking of network/resource-abuse detection on blockchain infrastructure; a worked, public-provenance reference corpus; downstream training. Not a turnkey production IDS.

Limitations

  • Synthetic lab fidelity — generated localnet traffic, not a real-world deployment claim. A deployment claim needs a real-traffic validation gate (real mainnet RPC + real attack instances).
  • Detection is on traffic shape (volume / rate / size / connection-churn), not deep wire semantics — adequate for these volumetric/crash DoS classes; it would not separate two attacks with identical traffic profiles.
  • No host-load features (root-owned container).
  • This is the public-CVE cut — every shipped attack class reproduces an external public disclosure. The original RPC-amplification measurements (vendor-acknowledged but not CVE-backed) are excluded from this model; they exist in the full internal corpus and ship only on explicit operator opt-in.

How to use

from predict import load, predict
model = load("model.joblib")
out = predict(model, [{"pcap.packet_rate": 850.0, "resp.amp_ratio_max": 224.0}])
# -> [{"scoreable": True, "score": ..., "verdict": "attack"|"benign", "threshold": 0.5}]

Run python inference_example.py for a worked example on real captured vectors.

Reproduce or train your own. A self-contained, runnable example that trains a family (mechanism) detector on the openly-available bundles — download → read manifest + Parquet → featurise → train → evaluate both in-distribution and cross-chain (leave-one-chain-out) — is in nr-bundle-spec: examples/train_a_family_detector.py (and the matching .ipynb). The leave-one-chain-out number it reports is the earned-autonomy line — where the mechanism signal genuinely transfers to a chain the detector never trained on, and where it does not (so the honest move is to gate the detector to chains you have data for). See docs/integration-bundles-taxonomy-autonomy.md.

Licensing

Apache-2.0 (see LICENSE). Attribution appreciated.

Citation

@software{nullrabbit_network_known_class_2026,
  author = {NullRabbit Labs},
  title  = {nr-network-known-class-detector: a public-provenance blockchain network-attack detector},
  year   = {2026},
  url    = {https://huggingface.co/NullRabbit/nr-network-known-class-detector}
}

Related: the open bundle format (nr-bundle-spec), the family taxonomy (mechanism-defined), the earned-autonomy framework (Zenodo 10.5281/zenodo.18406828), the dataset NullRabbit/nr-bundles-public, and nullrabbit.ai.

Contact

NullRabbit Labs — huggingface.co/NullRabbit · nullrabbit.ai

Downloads last month
209
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train NullRabbit/nr-network-known-class-detector