PoC Showcase

Selected vulnerability research notes, local reproduction paths and proof-of-concept evidence across EVM, execution clients, rollup infrastructure and protocol targets.

Redacted security dossier

Public view is redacted by default: project names, targets and reproduction paths are covered with document-style black bars until disclosure. Full notes are gated per record next to each impact label.

Record

16selected PoC / finding records
6L1 / L2 chain reports
5market protocol reports
6infra / app-layer targets
Curated sample, not a full inventory

This dossier only includes selected PoC records that are useful to show research depth. Additional reports are under active remediation / disclosure coordination, and many Medium / Low, duplicate, or less representative findings are intentionally omitted from the public view.

16 records
01 #74620 · Audit Comp | Base Azul · about 2 months ago

Unbounded Snappy decompression in Base gossip message-id computation increases node resource consumption

Base consensus gossip computes message IDs by fully Snappy-decompressing inbound gossip message data. The configured gossip size limit is applied to the compressed wire payload, but the decompressed output is not bounded before allocation.

StatusSubmitted
ImpactIncreasing network processing node resource consumption by at least 30% without brute force actions, compared to the preceding 24 hours
BaseP2PPoC
02 #76470 · Audit Comp | Base Azul · about 2 months ago

Short ZK range proof can be accepted as a full AggregateVerifier interval and trigger global ZK verifier nullification

The ZK proof client can stop early after EndOfSource, but still publish public values that claim the full target range was proven. AggregateVerifier accepts this as a valid ZK proposal because the claimed ending block/root and intermediate roots are not tied to the actual block reached by execution.

StatusSubmitted
ImpactA bug in the respective layer 0/1/2 network code that results in unintended smart contract behavior with no concrete funds at direct risk
BaseZKPoC
03 #78724 · NUVA · about 1 month ago

Premature timeout sweep in DedicatedVaultRouter can permanently strand later redemption payouts

DedicatedVaultRouter.sweepUserRedemption() finalizes a redemption proxy based only on its current asset balance. A third party can transfer a dust amount of the asset token to a pending redemption proxy before the legitimate async payout arrives. If the user then calls the 7-day timeout sweep, the router sweeps the dust and deletes the proxy-to-user mapping. Any later payout to that proxy is no longer reachable through either the user sweep path or the keeper sweep path.

StatusSubmitted
ImpactPermanent freezing of funds
NuwaPoC
04 #79921 · Sei · 24 days ago

Gov precompile submitProposal undercharges repeated parameter-change validation and delays block production

Sei's EVM governance precompile exposes submitProposal(string) at 0x0000000000000000000000000000000000001006. The precompile charges a fixed 50,000 precompile gas for submitProposal, but the call can create a Cosmos SDK ParameterChangeProposal and run the full proposal ValidateBasic() path.

StatusSubmitted
ImpactBlock production delay exceeding 2.5 seconds on realistic validator hardware, caused by crafted transactions or messages (excluding malicious proposers)
SeiP2PGas / FeesPoC
05 #80076 · Sei · 23 days ago

Malformed CW1155 receipt hook can make failed transactions commit prior Bank and IBC state changes

Sei runs an EVM receipt hook after successful Cosmos message execution to project CosmWasm events into EVM logs. A malformed CW1155 batch event can make this post-message hook panic after earlier messages in the same transaction have already been committed. DeliverTx then returns a failed transaction response, but prior state changes remain finalized; in local PoC tests, a failed transaction still commits a Bank MsgSend, and another failed transaction still escrows IBC funds and stores an IBC packet commitment.

StatusSubmitted
ImpactBug in layer 0/1/2 network code that causes deterministic unintended smart contract execution, with no funds directly at risk
SeiGas / FeesIBCPoC
06 #80459 · Sei · 19 days ago

EIP-7702 empty SetCode authorization bypass allows zero-realized-cost high-priority canonical data injection and fee-market abuse

Sei's EVM CheckTx path accepts EIP-7702 SetCode transactions with an empty authorization list, while the DeliverTx path rejects the same transaction before gas is purchased. As a result, an attacker can submit failing EVM transactions that are still included in canonical blocks, have transaction hashes and receipts, increment the sender nonce, and permanently store calldata on-chain, while reporting gasUsed=0, effectiveGasPrice=0, and leaving the sender balance unchanged. By setting high maxFeePerGas and maxPriorityFeePerGas, the attacker can also obtain high mempool/proposer priority without ever paying the a...

StatusSubmitted
ImpactManipulation of transaction fee calculation resulting in fees outside protocol-defined bounds
SeiGas / FeesPoC
07 #80561 · Sei · 18 days ago

Pending nonce promotion overcounts sender balance, allowing ordinary EVM calldata tails to be included with zero gas charged

Sei v6.5.1 incorrectly promotes future-nonce EVM transactions from the pending nonce set into the ready/proposable mempool without cumulatively reserving the sender's balance across the promoted nonce range. Sei does perform nonce-continuity checks and single-transaction balance checks. The missing check is narrower: after accepting one pending transaction from a sender, promotion does not subtract that transaction's gas/value liability before evaluating the sender's next pending transaction. An attacker can first queue many future-nonce calldata transactions while nonce 0 is missing, then submit nonce 0 to fi...

StatusSubmitted
ImpactManipulation of transaction fee calculation resulting in fees outside protocol-defined bounds
SeiGas / FeesPoC
08 #82021 · Sei · 3 days ago

Unbounded server-side JS tracer allocation in default `debug_traceCall` crashes Sei RPC nodes

Sei's default full-node/RPC-node EVM JSON-RPC configuration exposes the debug namespace, including debug_traceCall, with an empty deny list. debug_traceCall accepts a user-supplied JavaScript tracer that is executed server-side inside the seid process through the go-ethereum JS tracer and goja runtime. The JS runtime has no per-request memory cap, so a single unauthenticated RPC request can allocate a very large ArrayBuffer from the tracer's result() function and cause the full seid process to be killed by the kernel OOM killer. I reproduced this against sei-node-0 in a full local 4-node Docker cluster without...

StatusSubmitted
ImpactCrash of RPC nodes running default configuration via direct unauthenticated network access to RPC/gRPC endpoints
SeiGas / FeesPoC
09 #82172 · Sei · 2 days ago

Default gRPC-Web keep-alive connections can exhaust file descriptors and crash RPC/full nodes

Sei full/RPC nodes enable the gRPC-Web HTTP server by default, but the server is created without an IdleTimeout, a connection cap, or disabled keep-alives. A remote unauthenticated client that can directly reach the default gRPC-Web listener can open many normal HTTP/1.1 gRPC-Web keep-alive connections and leave them idle, consuming file descriptors in the shared seid process. On a full 4-node local Sei cluster, this exhausted the default seid process file descriptor table (Max open files was 524287/524288) and caused sei-node-0's seid process to crash with a consensus/WAL panic caused by too many open files.

StatusSubmitted
ImpactCrash of RPC nodes running default configuration via direct unauthenticated network access to RPC/gRPC endpoints
SeiP2PPoC
10 #223 · Monad

Invalid StateSync completions can indefinitely stall the global StateSync response pipeline

monad-statesync/src/ipc.rs refreshes the active WipResponse client timeout for every received StateSyncNetworkMessage::Completion, even when the completion does not match the active response nonce or active requester.

StatusDuplicate
SeverityHigh
ImpactImpact: High
MonadP2PPoC
11 #227 · Monad

Underpriced 8 MiB RETURN data enables full-block execution amplification

MIP-3 makes the maximum 8 MiB EVM memory/output case very cheap. A child contract can RETURN 8 MiB for about 131k gas. A parent contract can then call that child many times with ret_size = 0: the parent does not copy the output into its own memory, but the execution client still creates and stores the full child return data.

StatusConfirmed
SeverityHigh
TargetReward
ImpactImpact: Medium
MonadGas / FeesPoC
12 #417 · dYdX

Single proposer can forge CLOB order removals and delete third-party stateful orders

dYdX Chain lets the current block proposer include a MsgProposedOperations transaction with CLOB operations. Honest validators execute those operations after proposal validation.

StatusDuplicate
SeverityCritical
ImpactImpact: High
dYdXPoC
13 #391 · dYdX

Permissionless market creation can erase global funding samples and distort the next funding settlement

MsgCreateMarketPermissionless creates a new perpetual through the permissionless listing flow. During that flow, the perpetuals keeper clears PremiumSamples and PremiumVotes.

StatusDuplicate
SeverityHigh
ImpactImpact: High
dYdXGas / FeesPoC
14 #379 · dYdX

Same-block stale oracle price withdrawals can convert trader losses into insurance fund bad debt

dYdX Chain executes normal user transactions before the same block's tail MsgUpdateMarketPrices transaction. MsgWithdrawFromSubaccount validates account health against the currently stored oracle price, but does not account for the pending price update that is already included later in the block.

StatusDuplicate
SeverityHigh
ImpactImpact: High
dYdXGas / FeesIBCPoC
15 #394 · dYdX

Isolated position switch bypasses cross-pool withdrawals locked after negative TNC

dYdX blocks withdrawals and transfers for 50 blocks after a negative-TNC subaccount is observed in a collateral pool. The block is keyed by collateral-pool suffix: cross-collateral markets use CrossCollateralSuffix, while isolated markets use the isolated perpetualId.

StatusIn review
SeverityHigh
ImpactImpact: High
BasedYdXIBCPoC
16 #409 · dYdX

Block-sync accepts invalid vote-extension signatures and crashes catching-up dYdX nodes on consensus switch

dYdX Chain runs the dYdX fork of CometBFT with vote extensions enabled. During block sync, a catching-up node accepts BlockResponse messages containing both a block and an ExtendedCommit.

StatusIn review
SeverityHigh
ImpactImpact: High
dYdXP2PPoC