Deterministic final report assembled from existing LumosKit outputs; this finalize step does not call an agent.
- Chain: ethereum (chain_id=1)
- Tx hash:
0x3513509c71bc8e02695fad55e136b8f21933f6a4433f4dafe471800d98ca8e05 - Block: 25289192
- Final quality:
partial - Product/PoC gate:
pass - Final-quality basis:
poc_and_rca - Final-quality reason: Verified economic PoC, but RCA is partial.
- Elapsed: 570.84s (570842 ms)
- Finding: Current transaction consumes a pre-existing Axelar mint approval and drains WETH, but approval provenance is missing
- Protocol claim: Axelar
- Detector source: hack-detector:twitter:GoPlusZH
- Detected at: 2026-06-20T08:31:29+00:00
- Published at: 2026-06-20T08:31:29+00:00
- Original alert: https://x.com/GoPlusZH/status/2068250371102064655
- Source id: tw:2068250371102064655
- Lumos signal id: 09d6b5d4-51ae-4b49-b148-1f633cceae8c
- Incident group id: 16c35e55-87a3-472a-8aa0-ba15bf609d3d
- Claimed loss: 4670000
Detector summary:
Axelar assets worth $4.67M stolen via an infinite minting exploit on Secret Network's CW20-ICS20 contract.
-
Orchestrator wall time: 258.39s (258390 ms)
-
Current stage-duration sum: 570.84s (570842 ms)
| Stage | Artifact | Duration | Status |
|---|---|---|---|
cefg |
cefg |
68.06s (68065 ms) | success |
localize |
localize |
13 ms | success |
lift |
lift |
87 ms | success |
flow_context |
flow_context |
1.03s (1031 ms) | success |
enrich |
enrich |
4.09s (4087 ms) | success |
semantic |
semantic |
269 ms | success |
context_pack |
context_pack |
34 ms | success |
asset_delta |
asset_delta |
29 ms | success |
poc_sketch |
poc_sketch |
61 ms | success |
agent_poc |
agent_poc |
238.78s (238775 ms) | success |
rca |
rca |
258.39s (258391 ms) | success |
- PoC status:
verified - Forge fmt:
pass - Forge build:
pass - Forge test:
pass - Proof kind:
economic_proof - RCA status:
partial/partial - RCA confidence:
low
- Basis: holder-net USD loss
- Verdict: exact — PoC reproduces 99–101% of incident net loss.
- Incident net loss: $364151.05
- PoC net reproduced: $364151.05
- USD ratio: 1.000x
Generated by agent_poc from deterministic PoC handoff, verified Foundry execution, and economic reproduction artifacts.
- Status:
pass - Execution status:
pass - Economic status:
pass - Proof kind:
economic_proof - Forge build:
pass - Forge test:
pass
- Transaction:
0x3513509c71bc8e02695fad55e136b8f21933f6a4433f4dafe471800d98ca8e05 - Block:
25289192 - Root call type:
CALL - Target/tx.to:
0xb773bcc5b325ad9ac6b36e1a046ad4466833a16e - Attacker:
0x8dbee8f3917049bc30fef01924a7ac79d16cf2b9
- Ordered by trace evidence line from full CEFG; use this to place PoC constructor, entry, callback, and fallback bodies.
- [01] line=50 frame 1 attacker_entry:executeWithToken@0xb773…a16e --DELEGATECALL--> frame 2 delegate_context:executeWithToken@0xb773…a16e [localized_to_localized]
- [02] line=729 frame 2 delegate_context:executeWithToken@0xb773…a16e --CALL--> frame 3 external:entry@0x4f44…56a5 [localized_to_external]
- [03] line=3615 frame 2 delegate_context:executeWithToken@0xb773…a16e --STATICCALL--> frame 6 external:entry@0x4f44…56a5 [localized_to_external]
- [04] line=4707 frame 2 delegate_context:executeWithToken@0xb773…a16e --CALL--> frame 8 external:entry@0xc02a…6cc2 [localized_to_external]
| Role | Surface | Selector | Address | Frames |
|---|---|---|---|---|
| attacker_entry | executeWithToken(bytes32,string,string,bytes,string,uint256) | 0x1a98b2e0 |
0xb773bcc5b325ad9ac6b36e1a046ad4466833a16e |
1 |
- Reconciliation basis:
incident_drain - Verdict:
exact - Comparison basis:
holder_net_usd_loss
| Source | Direction | Holder | Token | Delta | USD value |
|---|---|---|---|---|---|
| incident_drain | loss | 0x4f4495243837681061c4743b74b3eedf548d56a5 |
WETH |
-223.366721790776578348 | $-364151.05 |
- Status:
pass - Basis:
incident_drain - Source:
agent_poc.economic_reproduction - Selected rows: 1
| Source | Direction | Holder | Role | Token | Delta | USD value |
|---|---|---|---|---|---|---|
| incident_drain | loss | 0x4f4495243837681061c4743b74b3eedf548d56a5 |
storage_contract |
WETH |
-223.366721790776578348 | $-364151.05 |
- Title: Current transaction consumes a pre-existing Axelar mint approval and drains WETH, but approval provenance is missing
- Severity:
critical - Confidence:
low - Violated invariant: Not proven from supplied artifacts; the candidate invariant would be that only an intended, source-authorized destination contract can consume a valid Axelar call-with-token approval for a given command/payload/token/amount.
The current transaction does not contain a source-supported, patchable root cause. It shows 0xb773bcc5b325ad9ac6b36e1a046ad4466833a16e calling AxelarGateway.validateContractCallAndMint with a command/source/payload/token/amount tuple for which the gateway approval key was already true; the gateway cleared that key and transferred WETH to msg.sender. The missing causal link is why that approval existed or why 0xb773... was allowed to consume it, because the approval-creation provenance and verified source for the caller-side executeWithToken logic are absent.
| Address | Name | Role | Implementation |
|---|---|---|---|
0xb773bcc5b325ad9ac6b36e1a046ad4466833a16e |
unknown |
source-gapped caller that consumed the Axelar approval and forwarded WETH |
0xef1ce4489962e6d6d6be8066e160b2799610cb85 |
0x4f4495243837681061c4743b74b3eedf548d56a5 |
AxelarGatewayProxyMultisig |
gateway escrow and approval validator that transferred WETH after approval consumption |
0x99b5fa03a5ea4315725c43346e55a6a6fbd94098 |
- Do not patch from this current-transaction RCA alone; first recover the approval-creation transaction and verified source for 0xb773.../0xef1c... to identify whether the missing guard belongs in approval creation, destination binding, executor authorization, replay handling, or caller-side payload routing.
- If the recovered evidence proves unauthorized approval consumption, enforce the invariant at the approval or consume point by binding command approvals to the intended destination contract/code path and rejecting consumption by unintended callers.
- prior_state_provenance_gap: the transaction consumes an existing Axelar call-with-token approval, but the artifact set does not include the transaction or governance/operator action that created that approval.
- caller_source_gap: verified source for 0xb773bcc5b325ad9ac6b36e1a046ad4466833a16e and implementation/code address 0xef1ce4489962e6d6d6be8066e160b2799610cb85 is absent from artifacts/rca/victim_sources/.
- tx_scope_gap: the decisive invariant-breaking state transition, if any, appears to be outside the supplied current-transaction frame set.
- missing_assumption
- effect_cause_confusion
- PoC is verified, but closed-world artifacts do not include the approval-provenance evidence or verified caller source needed to identify a patchable root cause.
| Artifact | Bundle path | Status |
|---|---|---|
| Bundle index | README.md |
generated |
| Machine run summary | report/run_summary.json |
generated |
| Final integrated report | report/REPORT.md |
generated |
| RCA | report/RCA.md |
included |
| RCA structured report | report/report.json |
included |
| PoC | poc/PoC.t.sol |
included |
| PoC base support | poc/Base.sol |
included |
| Asset deltas | evidence/asset_deltas.json |
included |
| Fund flows | evidence/fund_flows.json |
included |
| Asset delta graph | visuals/asset_deltas.png |
included |
| Fund-flow graph | visuals/fund_flows.png |
included |