feat(security): C-3 — confirm DeliverTx + oracle state before oracle liveness success #23
Labels
No labels
enhancement
governance
QA
testing
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/ust1-window#23
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Close C-3 from
audits/INTERNAL_KIMIK3_1786162831.md: stop treating TerraBROADCAST_MODE_SYNC(CheckTx / mempool admission) success as confirmed on-chain success for oracle liveness.Audit ref: C-3
Related: H-3 (silence alert timing — separate issue); M-1 (local clock vs block time — may interact)
Current codebase
oracle-service/src/terra_tx.rsmode: BROADCAST_MODE_SYNC; returnsOk(txhash)whentx_response.code == 0oracle-service/src/main.rsrun_onceOk, callsrecord_successful_broadcast()and logs “submitted oracle update”oracle-service/src/liveness.rsrecord_successful_broadcastconfig.rsORACLE_MAX_SILENCE_SECSdefault 28800 (8h)Problem:
code == 0under SYNC means CheckTx passed. DeliverTx failures (policy drift, paused oracle, wrong operator, wasm OOG) still look like success. Liveness stays green while on-chain rate goes stale; window rejects swaps afterDEFAULT_MAX_ORACLE_AGE_SECS(6h).Why this is needed
Constraints / guardrails
code == 0) and oracleStatereflects the intended update (last_update_secand/orratechanged as expected).account sequence mismatch, re-query account and retry once (or small bounded N); jitter on transient LCD errors.Relevant files
oracle-service/src/terra_tx.rs— broadcast + new confirm/query helpersoracle-service/src/main.rs— success gating before liveness recordoracle-service/src/liveness.rs— semantics docs / testsoracle-service/src/config.rs— optional confirm timeout envsREADME.md/docs/DEPLOYMENT.md— liveness meaning (“confirmed on-chain update”)oracle-service(wiremock HTTP fixtures preferred)Recommended direction
code == 0, pollGET /cosmos/tx/v1beta1/txs/{hash}until included or timeout.code == 0.State; verifylast_update_secadvanced andratematches proposed (or documented acceptance rule).record_successful_broadcast().Acceptance criteria
Test plan (all paths)
check_rate_updateErr → no broadcast (unchanged); liveness untouched.Test plan (attack / hack / abuse vectors)
Verification criteria
mentioned in commit cbc0d88630e9384a1724edb9ebd3c0f1fb7c1ae2
mentioned in commit
fae6e8aebementioned in merge request !35
mentioned in merge request !36
Implemented in MR !35 (
fix/issue-23-oracle-liveness-confirmtx).Done (acceptance):
skills/oracle-liveness-confirm)Not in this MR (by design / optional):
mentioned in merge request !37
mentioned in merge request !38
mentioned in issue #24
MR !35 verification (C-3 / #23)
Verdict: PASS_WITH_NOTES — merging after rebase as needed.
AC
Tests (local)
cargo test -p ust1-oracle-service— 29/29 passedcargo clippy -p ust1-oracle-service --all-targets -- -D warnings— passedProblems / follow-ups
secret_detection(no fullrustjob on this branch historically).config.rs/liveness.rs— rebase expected when stacking merges.mentioned in commit
dee9d0e67bmentioned in commit
47e20e78b8mentioned in issue #27
mentioned in issue #28
marked as related to #28
mentioned in commit
695e577065mentioned in merge request !45
mentioned in issue #32
marked as related to #32
mentioned in merge request !46