NRDAX-T0329 - Unbounded RPC Response Amplification
response_amp · active · first seen 2025-01-01
provenance: Reproduced in NullRabbit's attack-reproduction pipeline
mechanism
The node's JSON-RPC handler for batched account-lookup calls (e.g. getMultipleAccounts) imposes no response-size accounting or cost weighting relative to request size, only a flat cap on key count. An attacker submits a small request (~4.8KB) listing well-known large program accounts (Token/BPFLoader2/BPFLoaderUpgradeable), whose ELF/program data stubs are echoed in full, driving a single request to a ~17.8MB response (3,708x amplification) and sustained ~830MB/s egress under parallel workers. The fix-class is response-size-aware rate limiting/cost accounting on batched read RPCs (weighting by bytes returned, not just item count), not a request-count cap.
instances (15)
| chain | primitive | fidelity | origin | reproducer (bundle) | source |
|---|---|---|---|---|---|
| aptos | aptos_f10_modules_amp | lab | NullRabbit Labs | aptos_f10_modules_amp | aptos.dev ↗ |
| ethereum | eth_getlogs_response_amp | lab | NullRabbit Labs | eth_getlogs_response_amp | geth.ethereum.org ↗ |
| ethereum | geth_eth_receipt_flood | lab | reverse-engineered-cve | geth_eth_receipt_flood | reports.immunefi.com ↗ |
| iota | iota_f10_grpc_batch_amp | lab | NullRabbit Labs | iota_f10_grpc_batch_amp | docs.iota.org ↗ |
| iota | iota_f10_multiget_amp | lab | NullRabbit Labs | iota_f10_multiget_amp | docs.iota.org ↗ |
| solana | SOL_F10_multi_get_accounts_amp | lab | NullRabbit Labs | SOL_F10_multi_get_accounts_amp | - |
| solana | sol_getsigs_response_amp | lab | NullRabbit Labs | sol_getsigs_response_amp | github.com ↗ |
| solana | sol_gpa_response_amp | lab | NullRabbit Labs | sol_gpa_response_amp | github.com ↗ |
| sui | sui_f10_multiget_response_amp | lab | NullRabbit Labs | sui_f10_multiget_response_amp | github.com ↗ |
| sui | sui_p05_multiget_txblocks_amp | lab | NullRabbit Labs | sui_p05_multiget_txblocks_amp | github.com ↗ |
| xrp | rippled_batch_response_amp | lab | NullRabbit Labs | rippled_batch_response_amp | github.com ↗ |
| zcash | zcash_zebra_getaddresstxids_response_amp | lab | NullRabbit Labs | zcash_zebra_getaddresstxids_response_amp | zcash.github.io ↗ |
| zcash | zcash_zebra_getaddressutxos_response_amp | lab | NullRabbit Labs | zcash_zebra_getaddressutxos_response_amp | zcash.github.io ↗ |
| zcash | zcash_zebra_getblocktemplate_response_amp | lab | NullRabbit Labs | zcash_zebra_getblocktemplate_response_amp | zebra-rpc getrawmempool/getblocktemplate (uncapped whole-mempool serialisation; F10 response-amp) |
| zcash | zcash_zebra_getrawmempool_verbose_response_amp | lab | NullRabbit Labs | zcash_zebra_getrawmempool_verbose_response_amp | zebra-rpc getrawmempool/getblocktemplate (uncapped whole-mempool serialisation; F10 response-amp) |
references
related (response_amp)
cite
https://nrdax.com/techniques/NRDAX-T0329
NRDAX Registry. Technique NRDAX-T0329.
@misc{nrdax_NRDAX_T0329,
title = {Unbounded RPC Response Amplification (NRDAX-T0329)},
howpublished = {NRDAX Registry},
url = {https://nrdax.com/techniques/NRDAX-T0329},
} {
"id": "nrdax-NRDAX-T0329",
"type": "dataset",
"title": "Unbounded RPC Response Amplification (NRDAX-T0329)",
"URL": "https://nrdax.com/techniques/NRDAX-T0329",
"publisher": "NRDAX Registry"
}