Open-weight model
nr-network-known-class-detector
by NullRabbit Labs NullRabbit/nr-network-known-class-detector
nr-network-known-class-detector is an open-weight model from NullRabbit Labs, released under Apache License 2.0. Its published files total 3.1 MB. It draws 287 downloads a month.
A binary attack-vs-benign detector for blockchain-node network/resource attacks, trained entirely on faithful reproductions of publicly-disclosed attacks.
Model Card
By NullRabbit Labs, published under apache-2.0, revision 4193df0d8cbf.
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.sourceclass recording how public its sourcing is. Part of NullRabbit's work on autonomous defence for decentralised networks — watch the outside of the perimeter. 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…
Read NullRabbit Labs's full model card
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 networks — watch 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 18 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=Falsewith no verdict.
Training data — 140 public-CVE attack primitives, 18 chains, 919 bundles
This is the public-CVE cut (public-cve-replication only): 716 attack + 203 benign
bundles (pcap + responses + manifest), 142 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 · 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 · 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_tx_malformed_authinfo_nil_panic |
Cosmos · cometbft-rpc-http | public disclosure | 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) | 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 | 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_graphql_query_depth_stack_overflow |
Ethereum · http-graphql | public disclosure | 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) | 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) | 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 | public-cve-replication |
zebra_block_sent_hash_poisoning |
Zcash · consensus | CVE-2026-52736 | public-cve-replication |
zebra_invalid_sighash_hashtype |
Zcash · consensus | CVE-2026-41583 | public-cve-replication |
zebra_rpc_premature_disconnect_crash |
Zcash · zcash-jsonrpc-http | CVE-2026-41585 | 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 | public-cve-replication |
conflux_getblocktxn_index_overflow |
conflux · conflux-cfx-sync | public disclosure | public-cve-replication |
conflux_hello_protocols_on2_dos |
conflux · conflux-p2p-session | public disclosure | public-cve-replication |
conflux_light_storageroots_mptvalue_panic |
conflux · conflux-clp-light | public disclosure | public-cve-replication |
conflux_manifest_trienode_hash_panic |
conflux · conflux-cfx-sync | public disclosure | public-cve-replication |
conflux_newblock_header_custom_oom |
conflux · conflux-cfx-sync | public disclosure | public-cve-replication |
conflux_snapshot_manifest_blame_underflow |
conflux · conflux-cfx-sync | public disclosure | public-cve-replication |
envoy_http2_hpack_cookie_amplification |
http2 · http2-hpack-headers | CVE-2026-47774 | public-cve-replication |
http2_bomb_indexed_ref_window_pin |
http2 · http2-hpack-headers+flowcontrol | CVE-2026-49975. 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-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 | public-cve-replication |
http2_settings_ack_stream_cap_bypass |
http2 · http2-settings-ack-stream-cap-bypass | CVE-2025-53506) | public-cve-replication |
envoy_http3_qpack_blocked_decode_leak |
http3 · http3-qpack | GHSA-p7c7-7c47-pwch) | public-cve-replication |
netty_http3_field_section_oom |
http3 · http3-qpack | CVE-2026-44892) | 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 | public-cve-replication |
coredns_doq_stream_slowloris |
quic · quic-transport / dns-over-quic | CVE-2025-47950 | public-cve-replication |
dnsdist_doq_concurrent_conn_exhaustion |
quic · quic-transport / dns-over-quic + dns-over-http3 | CVE-2026-33254 | public-cve-replication |
dnsdist_doq_error_query_mem_leak |
quic · quic-transport / dns-over-quic / dns-over-http3 | CVE-2026-33595 | public-cve-replication |
lsquic_initial_prehandshake_leak |
quic · quic-transport-initial-coalescing | CVE-2025-54939 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) | public-cve-replication |
quic_conn_id_memory_exhaustion |
quic · quic-transport | CVE-2024-22189 | public-cve-replication |
quic_go_path_challenge_flood |
quic · quic-transport | CVE-2023-49295) | public-cve-replication |
quic_go_qpack_decompression_bomb |
quic · http3-qpack | CVE-2025-64702) | public-cve-replication |
quic_optimistic_ack_cwnd_growth |
quic · quic-1rtt-ack | CVE-2025-4820 | public-cve-replication |
quic_scid_collision_hash_dos |
quic · quic-transport | CVE-2025-47200) | 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) | public-cve-replication |
quiche_conn_id_retirement_unbounded |
quic · quic-transport | CVE-2024-1410 | public-cve-replication |
quiche_crypto_frame_flood |
quic · quic-transport | CVE-2024-1765) | 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) | 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 | 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 | public-cve-replication |
s2n_quic_stream_limit_exhaustion |
quic · quic-transport | GHSA-475v-pq2g-fp9g | public-cve-replication |
Distribution: 716 public-cve-replication attack bundles — 140 distinct primitives
across 18 chains (Bitcoin, conflux, Cosmos, Dogecoin, Ethereum, http2, http3, ipfs, libp2p, Litecoin, Monero, namada, nimiq, polkadot, quic, Solana, Sui, Zcash) — plus 203 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.9441.
corpus_sha256 known-class-v10-publiccve. - Leave-one-chain-out — binary ROC-AUC (HARD zero-shot transfer, not a deployment metric): Sui 1.000 / Ethereum 0.992 / Monero 0.985 / libp2p 0.897 / Bitcoin 0.818 / Cosmos 0.789 / Zcash 0.590. Chains with few public-CVE primitives have the fewest cross-chain near-neighbours; the companion
nr-bundles-publicdataset 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.958. 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
originalRPC-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
Identity and Version
- Repository
- NullRabbit/nr-network-known-class-detector
- Publisher
- NullRabbit Labs
- Task
- Not stated by the source
- Modality
- Other
- Library
- scikit-learn
- Parameters
- Not stated by the source
- Languages
- cve
- Revision
- 4193df0d8cbf060a5b4656da84a17c3d7040e8bf
- First published
- 2026-07-01
- Last updated
- 2026-10-09
Files and Weights
9 files, 3.1 MB in total.
Every file
| File | Type | Size | SHA-256 |
|---|---|---|---|
| config.json | Configuration | 190 B | — |
| example_records.json | Configuration | 3.1 KB | — |
| inference_example.py | Configuration | 1.6 KB | — |
| predict.py | Configuration | 3.6 KB | — |
| LICENSE | Documentation | 11.4 KB | — |
| README.md | Documentation | 50.9 KB | — |
| __pycache__/predict.cpython-313.pyc | Other | 5.0 KB | — |
| model.joblib | Other | 3.1 MB | 93ea2d6a3b34 |
| .gitattributes | Repository | 1.5 KB | — |
License and Download
- License
- apache-2.0
- Access
- Open weights, no gate
Released by NullRabbit Labs through its official repository on Hugging Face. Read the license.
Built From
- Trained on (disclosed) NullRabbit/nr-bundles-public
Questions About nr-network-known-class-detector
Can I use nr-network-known-class-detector commercially?
Yes. nr-network-known-class-detector is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.