TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

019ba5b8-1c4c-7169-aef9-a25066552b6e

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 10, 2026 2:24 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
1
Source
Bytecode only
Review Backing
Present
Best current signal
Untrusted DELEGATECALL target reachable
crit 0 high 0 proxy context implementation known
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31869 artifact.fetch complete 1 / 3 3 months ago
31870 proxy.resolve complete 1 / 3 3 months ago
31871 tool.cast_disasm complete 1 / 3 3 months ago
31872 analysis.bundle complete 1 / 3 3 months ago
31873 capability.graph complete 1 / 3 3 months ago
31874 detector.run complete 1 / 3 3 months ago
31875 validation.fork complete 1 / 3 3 months ago
31883 report.consolidate complete 1 / 3 3 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes onchain_only
Verified Source: no
Proxy evidence
{
    "method": "minimal_proxy",
    "status": "onchain_only",
    "implementation": "0x0d424072d658e6abd92c36f8fc16fd6479ae15a0",
    "onchain_method": "minimal_proxy"
}

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 3
Findings
3
No findings?
no
Summary
Bytecode shows two computed CALLs (with possible ETH value) plus a reachable CREATE opcode; no delegatecall or upgrade-slot writes detected. Access control and success checking are unclear from bytecode-only analysis, so findings focus on potential unguarded external execution paths.
View stdout
{"no_findings":false,"summary":"Bytecode shows two computed CALLs (with possible ETH value) plus a reachable CREATE opcode; no delegatecall or upgrade-slot writes detected. Access control and success checking are unclear from bytecode-only analysis, so findings focus on potential unguarded external execution paths.","findings":[{"severity":"medium","category":"access_control","title":"Computed external CALL with value; access control/target constraints unclear","exploit_scenario":"If any of the public selectors allow user-controlled target/value, a caller could direct the contract to CALL arbitrary addresses and forward ETH from the contract balance, potentially draining funds or triggering unintended external side effects. This is especially risky if these paths are intended to be owner‑only; guard detection did not identify any access control in bytecode, so authorization is uncertain.","recommendation":"Ensure the CALL paths are gated (owner/role/whitelist) or strictly validate target/value/call data. If the behavior is intended (executor/factory), document it and minimize value forwarding or add per‑call limits.","evidence":"artifact_json.callsites lists CALL at pc 1653 and 3172 with target_expression_category/value_expression_category = computed and returndata_checked = null; detector findings flag “Untrusted CALL target/value reachable” and “ETH value transfer possible”; auth.guards is empty across functions.","locations":["pc:0x675","pc:0xC64"]},{"severity":"low","category":"other","title":"Low-level CALL return status not explicitly validated","exploit_scenario":"If the contract assumes external calls succeed but ignores the CALL success flag, an attacker can force failures (revert/out‑of‑gas) while the contract continues, potentially causing inconsistent state or bypassing intended effects (e.g., token transfer not executed). Bytecode indicates return data handling but no clear success check, so this risk is uncertain.","recommendation":"Check the CALL success flag and revert on failure; for token transfers, enforce expected return values or use a safe transfer wrapper that handles non‑standard ERC20s.","evidence":"Both CALL sites report returndata_checked = null in the callsite list. The basic blocks around pc 0x675 and 0xC64 show CALL followed by returndata handling without an obvious ISZERO-on-success branch in the disassembly view.","locations":["pc:0x675","pc:0xC64"]},{"severity":"low","category":"other","title":"CREATE opcode present; deployment capability may be unintentionally exposed","exploit_scenario":"If the CREATE path is externally reachable and accepts user‑provided init code/value, any caller could deploy arbitrary contracts from this address. This can be abused for griefing or to create confusing/undesired deployments if the contract is not intended to be a factory. Reachability from public entrypoints is not proven in bytecode‑only analysis.","recommendation":"Confirm whether contract creation is intended. If not, remove or gate the CREATE path; if intended, enforce access control and validate init code/value.","evidence":"A basic block at start_pc 7881 includes a CREATE opcode; detector findings report “CREATE/CREATE2 reachable.”","locations":["pc:0x1ec9"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-ivr3wyok
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: xhigh
reasoning summaries: auto
session id: 019ba5b8-2da8-7da3-8543-1f4435681a40
--------
user
Context: The user requested the proxy at 0xf207b2f9f9417fc73cad069f7aa5ae1c6a5b428d.
Audit the implementation at 0x0d424072d658e6abd92c36f8fc16fd6479ae15a0.
Findings should refer to the implementation unless explicitly about proxy mechanics.

You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.

Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".

Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
mcp startup: no servers

thinking
**Listing files to find BYTECODE_BUNDLE.json**
exec
/bin/bash -lc ls in /tmp/codex-ivr3wyok succeeded in 7ms:
BYTECODE_BUNDLE.json
codex-output-schema.json

thinking
**Planning to read BYTECODE_BUNDLE.json**
exec
/bin/bash -lc 'cat BYTECODE_BUNDLE.json' in /tmp/codex-ivr3wyok succeeded in 8ms:
{
  "analysis_artifact": {
    "address": "0x0d424072d658e6abd92c36f8fc16fd6479ae15a0",
    "artifact_hash": "0xffd40521d2e408ef8057e8d7698c36d09db21889a8397564a306fbafbcca9141",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 12,
          "hash": "0xb3332d79ce918c752c021f41cb131735a13d216ea053c44a3f3eee21334f6196",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATASIZE",
            "LT",
            "PUSH2",

thinking
**Extracting relevant contract data**
exec
/bin/bash -lc 'rg -n "storage|slot|callsite|function|selector|delegatecall|CALL|STATICCALL|CREATE" BYTECODE_BUNDLE.json | head -n 200' in /tmp/codex-ivr3wyok succeeded in 16ms:
18:            "CALLDATASIZE",
30:            "CALLDATALOAD",
161:            "CALLDATASIZE",
172:            "CALLVALUE",
185:            "CALLER",
186:            "CALLVALUE",
228:            "CALLVALUE",
241:            "CALLER",
242:            "CALLVALUE",
244:            "CALLDATASIZE",
287:            "CALLVALUE",
352:            "CALLVALUE",
379:            "CALLDATASIZE",
416:            "CALLVALUE",
443:            "CALLDATASIZE",
501:            "CALLVALUE",
528:            "CALLDATASIZE",
586:            "CALLVALUE",
651:            "CALLVALUE",
678:            "CALLDATASIZE",

thinking
**Exploring callsites for function analysis**
exec
/bin/bash -lc "sed -n '7920,8040p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 7ms:
            "POP",
            "JUMP"
          ],
          "start_pc": 7871
        },
        {
          "end_pc": 7880,
          "hash": "0xfd7deb2d71db6c6f263eb811085fc50fbf2756a3f40872796a945923f6b3aa9d",
          "opcodes": [
            "INVALID"
          ],
          "start_pc": 7880
        },
        {
          "end_pc": 7913,
          "hash": "0x9a2d1ed25054744c0f50fb93ef38b3e59829803a77b2668e585fb630353d1548",
          "opcodes": [
            "OP_A2",
            "PUSH5",
            "OP_22",

thinking
**Investigating callsite addresses in JSON**
exec
/bin/bash -lc "rg -n \"\\\"start_pc\\\": 16|\\\"start_pc\\\": 165|\\\"start_pc\\\": 164\" BYTECODE_BUNDLE.json | head -n 40" in /tmp/codex-ivr3wyok succeeded in 7ms:
1673:          "start_pc": 1640
1705:          "start_pc": 1668
13400:          "start_pc": 1640,
13407:          "start_pc": 1668,

thinking
**Inspecting opcodes around line 1673**
exec
/bin/bash -lc "sed -n '1600,1735p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 7ms:
            "OP_90",
            "POP",
            "PUSH1",
            "OP_80",
            "PUSH2",
            "OP_89",
            "OP_84",
            "OP_86",
            "OP_88",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1551
        },
        {
          "end_pc": 1639,
          "hash": "0x34874d12c78cf8ef83d7fbbb1674cf9f0dacbac9e7dc0fcd7809d81b537f64a7",
          "opcodes": [
            "JUMPDEST",
            "OP_80",

thinking
**Analyzing call and returndata size checks**
exec
/bin/bash -lc "rg -n \"\\\"start_pc\\\": 31|\\\"start_pc\\\": 316|\\\"start_pc\\\": 317\" BYTECODE_BUNDLE.json | head -n 40" in /tmp/codex-ivr3wyok succeeded in 7ms:
358:          "start_pc": 318
2778:          "start_pc": 3158
2810:          "start_pc": 3186
12847:          "start_pc": 318,
13799:          "start_pc": 3158,
13806:          "start_pc": 3186,

thinking
**Scrolling through code around line 2720**
exec
/bin/bash -lc "sed -n '2720,2835p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 14ms:
            "MSTORE",
            "OP_90",
            "PUSH1",
            "SHL",
            "PUSH1",
            "OP_82",
            "ADD",
            "OP_80",
            "MLOAD",
            "PUSH28",
            "OP_83",
            "OP_81",
            "OP_83",
            "AND",
            "OR",
            "OP_83",
            "MSTORE",
            "POP",
            "POP",
            "POP",

thinking
**Analyzing CALL instruction stack usage**
exec
/bin/bash -lc "rg -n \"\\\"start_pc\\\": 36|\\\"start_pc\\\": 367|\\\"start_pc\\\": 368\" BYTECODE_BUNDLE.json | head -n 40" in /tmp/codex-ivr3wyok succeeded in 8ms:
432:          "start_pc": 367
3139:          "start_pc": 3621
3171:          "start_pc": 3630
3198:          "start_pc": 3665
3212:          "start_pc": 3690
3238:          "start_pc": 3699
12889:          "start_pc": 367,
13946:          "start_pc": 3621,
13953:          "start_pc": 3630,
13960:          "start_pc": 3665,
13967:          "start_pc": 3690,
13974:          "start_pc": 3699,

thinking
**Scrolling through lines 3600-3705**
exec
/bin/bash -lc "sed -n '3590,3715p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 7ms:
            "OP_90",
            "POP",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 3991
        },
        {
          "end_pc": 4022,
          "hash": "0xa7f316690b2131e167a44dc17929c7328cace2acff713bf23451c24f81d8fdbb",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_82",
            "ADD",

thinking
**Analyzing line and start_pc mismatch**
exec
/bin/bash -lc "sed -n '3100,3230p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 6ms:
            "SHR",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 3528
        },
        {
          "end_pc": 3620,
          "hash": "0x9356602ad6b5a993e0711082c4e7b2273499bea1d633c3dfaeb72fcad4bd7116",
          "opcodes": [
            "PUSH1",
            "MLOAD",
            "PUSH32",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH2",

thinking
**Inspecting function callsites and mappings**
exec
/bin/bash -lc "sed -n '10020,10280p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 8ms:
        {
          "from": "bb:7858",
          "to": "bb:6090",
          "type": "control_flow"
        },
        {
          "from": "bb:7881",
          "to": "bb:7914",
          "type": "control_flow_fallthrough"
        }
      ],
      "cfg_hash": "0x3af64c1e3547b3dc6e6513df3a0cace3c8d1f5b991483a2c55682bb5bcf8eef0",
      "dispatcher_type": "selector_jump_table",
      "function_entries": [
        {
          "entry_pc": 2883789212,
          "selector": "0xabe3219c"
        },
        {
          "entry_pc": 3392439163,

thinking
**Scrolling further for function list**
exec
/bin/bash -lc "sed -n '10280,10480p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 10ms:
                "op": "SLOAD",
                "pc": 2379,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              }
            ],
            "writes": 3
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 1936461147,
          "selector": "0x72276991",
          "sinks": {
            "call": 2,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 1
          },

thinking
**Analyzing reachable CREATE opcode**
exec
/bin/bash -lc "rg -n \"to\\\": \\\"bb:7881\\\"\" BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok exited 1 in 6ms:


thinking
**Searching for "bb:7881" occurrences**
exec
/bin/bash -lc 'rg -n "bb:7881" BYTECODE_BUNDLE.json' in /tmp/codex-ivr3wyok succeeded in 6ms:
10026:          "from": "bb:7881",
12595:          "from": "bb:7881",
16143:          "id": "bb:7881",

thinking
**Evaluating external call risks and protections**
exec
/bin/bash -lc 'rg -n "SSTORE" BYTECODE_BUNDLE.json | head -n 50' in /tmp/codex-ivr3wyok succeeded in 7ms:
1426:            "SSTORE",
1475:            "SSTORE",
1902:            "SSTORE",

thinking
**Examining SSTORE instructions around line 1400**
exec
/bin/bash -lc "sed -n '1360,1505p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 7ms:
          "end_pc": 1290,
          "hash": "0x8907261b938b1c92008a23688cb6e7bc83d6b2b0aa2c11c8445929ae3d2e8f7e",
          "opcodes": [
            "JUMPDEST"
          ],
          "start_pc": 1290
        },
        {
          "end_pc": 1311,
          "hash": "0x5bdfde74fe84e525f2bafb1d5dc31dae3cc54bc6659d0139e69f298a9fa59b19",
          "opcodes": [
            "JUMPDEST",
            "OP_90",
            "POP",
            "PUSH1",
            "MUL",
            "ADD",
            "PUSH1",
            "OP_81",
            "ADD",

thinking
**Inspecting SSTORE operations in blocks**
exec
/bin/bash -lc "sed -n '1460,1525p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 6ms:
            "EXP",
            "OP_81",
            "SLOAD",
            "OP_81",
            "PUSH1",
            "MUL",
            "NOT",
            "AND",
            "OP_90",
            "OP_83",
            "ISZERO",
            "ISZERO",
            "MUL",
            "OR",
            "OP_90",
            "SSTORE",
            "POP",
            "POP",
            "POP",
            "JUMP"

thinking
**Checking additional SSTORE occurrences**
exec
/bin/bash -lc "sed -n '1860,1945p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 15ms:
          ],
          "start_pc": 1869
        },
        {
          "end_pc": 1926,
          "hash": "0xfd23aacc688b132f56445a4d68ebb9fe3a00f189de15c9f5689f079f6b96c858",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "REVERT"
          ],
          "start_pc": 1918
        },
        {
          "end_pc": 1999,

thinking
**Analyzing storage writes and external calls**
exec
/bin/bash -lc "sed -n '820,910p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 6ms:
          "hash": "0xc4192fbda2732631b7eec8d3c7b296b160d54503adda23f6ee13ddda0cc2672f",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "OP_90",
            "PUSH2",
            "EXP",
            "OP_90",
            "DIV",
            "PUSH1",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 629
        },
        {
          "end_pc": 654,

thinking
**Analyzing control flow and call safety**
exec
/bin/bash -lc "sed -n '1688,1768p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 6ms:
            "AND",
            "OP_82",
            "ADD",
            "PUSH1",
            "MSTORE",
            "RETURNDATASIZE",
            "OP_82",
            "MSTORE",
            "RETURNDATASIZE",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "ADD",
            "RETURNDATACOPY",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1668
        },
        {

thinking
**Analyzing call usage and storage slots**
exec
/bin/bash -lc "sed -n '600,760p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 6ms:
            "REVERT"
          ],
          "start_pc": 489
        },
        {
          "end_pc": 501,
          "hash": "0x6c1aaf110c1b8008db056f9a0b95c3f022349b99e6cd942afe805a2a7232aa36",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "PUSH2",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 493
        },
        {
          "end_pc": 514,
          "hash": "0xf786b74cbfb2fa1908466852aac3f50c9f36d7fa718ecdf87de96e9b83c654dd",
          "opcodes": [

thinking
**Inspecting access checks with CALLER and SLOAD**
exec
/bin/bash -lc "sed -n '1764,1865p' BYTECODE_BUNDLE.json" in /tmp/codex-ivr3wyok succeeded in 27ms:
          "start_pc": 1765
        },
        {
          "end_pc": 1834,
          "hash": "0xb508acd835d43b3618a9b9cc6837880e71b0114cb632e8c6f2e4b73defeb15ab",
          "opcodes": [
            "JUMPDEST",
            "PUSH32",
            "CALLER",
            "OP_84",
            "OP_84",
            "OP_87",
            "OP_8E",
            "OP_8E",
            "OP_8E",
            "OP_8E",
            "PUSH1",
            "MLOAD",
            "PUSH2",
            "OP_98",

thinking
**Analyzing callsites and evidence bundles**

I’m thinking it’s tricky to determine if there’s real access control here since there are computed external calls without obvious auth. I want to check callsites and evidence bundles in the JSON artifact to find if targets come from user-controlled data or storage, so I’m planning to parse the artifact with a Python script to extract relevant details about calls and functions to get better insight.
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
path=Path('BYTECODE_BUNDLE.json')
obj=json.loads(path.read_text())
# Print top-level keys
print(obj.keys())
# get analysis_artifact artifact_json
artifact=obj['analysis_artifact']['artifact_json']
print('artifact_json keys', artifact.keys())
# Print callsites
print('callsites', artifact.get('callsites'))
# Print functions selectors and sinks
funcs=artifact.get('functions', [])
print('functions', len(funcs))
for f in funcs:
    print(f['selector'], 'entry_pc', f.get('entry_pc'), 'sinks', f.get('sinks'))
# Print storage slots
print('storage', artifact.get('storage'))
# Print detector findings titles
for det in obj.get('detector_findings', []):
    print('detector', det['title'], det['severity'], det['confidence'])
PY" in /tmp/codex-ivr3wyok succeeded in 81ms:
dict_keys(['analysis_artifact', 'analysis_run', 'artifact', 'capability_graph', 'detector_findings', 'heuristics_summary'])
artifact_json keys dict_keys(['auth', 'basic_blocks', 'callsites', 'cfg_edges', 'cfg_hash', 'dispatcher_type', 'function_entries', 'functions', 'selectors', 'sinks', 'storage', 'version'])
callsites [{'opcode': 'CALL', 'pc': 1653, 'returndata_checked': None, 'target_expression_category': 'computed', 'value_expression_category': 'computed'}, {'opcode': 'CALL', 'pc': 3172, 'returndata_checked': None, 'target_expression_category': 'computed', 'value_expression_category': 'computed'}, {'opcode': 'STATICCALL', 'pc': 3682, 'returndata_checked': None, 'target_expression_category': 'computed', 'value_expression_category': 'n/a'}]
functions 8
0xabe3219c entry_pc 2883789212 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0xc6044c46 entry_pc 3392439163 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0xca34837b entry_pc 4228856109 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0xfc0f392d entry_pc None sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0x158ef93e entry_pc 1915185553 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0x72276991 entry_pc 1936461147 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0x736c0d5b entry_pc 2113355303 sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
0x7df73e27 entry_pc None sinks {'call': 2, 'delegatecall': 0, 'selfdestruct': 0, 'staticcall': 1}
storage {'keccak_count': 6, 'reads': 9, 'slots': [{'op': 'SLOAD', 'pc': 633, 'slot': '0x0000000000000000000000000000000000000000000000000000000000000001'}, {'op': 'SLOAD', 'pc': 909, 'slot': '0x0000000000000000000000000000000000000000000000000000000000000000'}, {'op': 'SLOAD', 'pc': 932, 'slot': '0x0000000000000000000000000000000000000000000000000000000000000000'}, {'op': 'SLOAD', 'pc': 949, 'slot': '0x0000000000000000000000000000000000000000000000000000000000000001'}, {'op': 'SLOAD', 'pc': 2379, 'slot': '0x0000000000000000000000000000000000000000000000000000000000000000'}], 'writes': 3}
detector Untrusted CALL target/value reachable high 60
detector ETH value transfer possible high 55
detector CREATE/CREATE2 reachable medium 45

thinking
**Inspecting additional artifact keys**
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
print('analysis_run keys', obj.get('analysis_run', {}).keys())
print('artifact keys', obj.get('artifact', {}).keys())
print('capability_graph keys', obj.get('capability_graph', {}).keys())
PY" in /tmp/codex-ivr3wyok succeeded in 30ms:
analysis_run keys dict_keys(['address', 'block_number', 'chain_id', 'child_links', 'created_at', 'id', 'parent_links', 'status', 'updated_at'])
artifact keys dict_keys(['codehash', 'compiler_json', 'implementation_address', 'is_proxy', 'runtime_bytecode', 'verified_source'])
capability_graph keys dict_keys(['address', 'block_number', 'chain_id', 'codehash', 'created_at', 'graph_hash', 'graph_json', 'id', 'updated_at', 'version'])

thinking
**Inspecting artifact for proxy**
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
artifact=obj.get('artifact', {})
print('is_proxy', artifact.get('is_proxy'))
print('implementation_address', artifact.get('implementation_address'))
PY" in /tmp/codex-ivr3wyok succeeded in 35ms:
is_proxy False
implementation_address None

thinking
**Inspecting capability graph**
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
graph=obj['capability_graph']['graph_json']
print(graph.keys())
print('nodes', len(graph.get('nodes', [])))
print('edges', len(graph.get('edges', [])))
# Print callsite nodes
nodes=graph.get('nodes', [])
call_nodes=[n for n in nodes if n.get('type')=='callsite']
print('callsite nodes', call_nodes)
# maybe functions
func_nodes=[n for n in nodes if n.get('type')=='function']
print('function nodes', func_nodes)
PY" in /tmp/codex-ivr3wyok succeeded in 36ms:
dict_keys(['edges', 'nodes', 'version'])
nodes 512
edges 421
callsite nodes [{'id': 'call:1653', 'opcode': 'CALL', 'pc': 1653, 'type': 'callsite'}, {'id': 'call:3172', 'opcode': 'CALL', 'pc': 3172, 'type': 'callsite'}, {'id': 'call:3682', 'opcode': 'STATICCALL', 'pc': 3682, 'type': 'callsite'}]
function nodes [{'entry_pc': 2883789212, 'id': 'fn:0xabe3219c', 'selector': '0xabe3219c', 'type': 'function'}, {'entry_pc': 3392439163, 'id': 'fn:0xc6044c46', 'selector': '0xc6044c46', 'type': 'function'}, {'entry_pc': 4228856109, 'id': 'fn:0xca34837b', 'selector': '0xca34837b', 'type': 'function'}, {'entry_pc': None, 'id': 'fn:0xfc0f392d', 'selector': '0xfc0f392d', 'type': 'function'}, {'entry_pc': 1915185553, 'id': 'fn:0x158ef93e', 'selector': '0x158ef93e', 'type': 'function'}, {'entry_pc': 1936461147, 'id': 'fn:0x72276991', 'selector': '0x72276991', 'type': 'function'}, {'entry_pc': 2113355303, 'id': 'fn:0x736c0d5b', 'selector': '0x736c0d5b', 'type': 'function'}, {'entry_pc': None, 'id': 'fn:0x7df73e27', 'selector': '0x7df73e27', 'type': 'function'}]

thinking
**Inspecting function-to-callsite edges**
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
edges=obj['capability_graph']['graph_json']['edges']
# Filter edges where dst is callsite or src is function
callsites={'call:1653','call:3172','call:3682'}
funcs={e['id'] for e in obj['capability_graph']['graph_json']['nodes'] if e.get('type')=='function'}
# find edges connecting functions to callsites
rel=[]
for e in edges:
    if e.get('to') in callsites or e.get('from') in callsites:
        rel.append(e)
# print unique edges
print('edges to/from callsites', len(rel))
# print some
for e in rel[:50]:
    print(e)
PY" in /tmp/codex-ivr3wyok succeeded in 35ms:
edges to/from callsites 6
{'from': 'bb:1640', 'to': 'call:1653', 'type': 'contains'}
{'from': 'call:1653', 'to': 'sink:call', 'type': 'capability'}
{'from': 'bb:3158', 'to': 'call:3172', 'type': 'contains'}
{'from': 'call:3172', 'to': 'sink:call', 'type': 'capability'}
{'from': 'bb:3665', 'to': 'call:3682', 'type': 'contains'}
{'from': 'call:3682', 'to': 'sink:staticcall', 'type': 'capability'}

thinking
**Investigating function-to-callsite links**
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
obj=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
edges=obj['capability_graph']['graph_json']['edges']
# edges from function nodes
func_ids=[n['id'] for n in obj['capability_graph']['graph_json']['nodes'] if n.get('type')=='function']
for fid in func_ids:
    e=[ed for ed in edges if ed.get('from')==fid][:5]
    if e:
        print(fid, e)
PY" in /tmp/codex-ivr3wyok succeeded in 41ms:
fn:0xabe3219c [{'from': 'fn:0xabe3219c', 'to': 'bb:2883789212', 'type': 'entry'}]
fn:0xc6044c46 [{'from': 'fn:0xc6044c46', 'to': 'bb:3392439163', 'type': 'entry'}]
fn:0xca34837b [{'from': 'fn:0xca34837b', 'to': 'bb:4228856109', 'type': 'entry'}]
fn:0x158ef93e [{'from': 'fn:0x158ef93e', 'to': 'bb:1915185553', 'type': 'entry'}]
fn:0x72276991 [{'from': 'fn:0x72276991', 'to': 'bb:1936461147', 'type': 'entry'}]
fn:0x736c0d5b [{'from': 'fn:0x736c0d5b', 'to': 'bb:2113355303', 'type': 'entry'}]

thinking
**Analyzing contract bytecode findings**
exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-ivr3wyok succeeded in 10ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}

thinking
**Preparing detailed JSON findings**
codex
{"no_findings":false,"summary":"Bytecode shows two computed CALLs (with possible ETH value) plus a reachable CREATE opcode; no delegatecall or upgrade-slot writes detected. Access control and success checking are unclear from bytecode-only analysis, so findings focus on potential unguarded external execution paths.","findings":[{"severity":"medium","category":"access_control","title":"Computed external CALL with value; access control/target constraints unclear","exploit_scenario":"If any of the public selectors allow user-controlled target/value, a caller could direct the contract to CALL arbitrary addresses and forward ETH from the contract balance, potentially draining funds or triggering unintended external side effects. This is especially risky if these paths are intended to be owner‑only; guard detection did not identify any access control in bytecode, so authorization is uncertain.","recommendation":"Ensure the CALL paths are gated (owner/role/whitelist) or strictly validate target/value/call data. If the behavior is intended (executor/factory), document it and minimize value forwarding or add per‑call limits.","evidence":"artifact_json.callsites lists CALL at pc 1653 and 3172 with target_expression_category/value_expression_category = computed and returndata_checked = null; detector findings flag “Untrusted CALL target/value reachable” and “ETH value transfer possible”; auth.guards is empty across functions.","locations":["pc:0x675","pc:0xC64"]},{"severity":"low","category":"other","title":"Low-level CALL return status not explicitly validated","exploit_scenario":"If the contract assumes external calls succeed but ignores the CALL success flag, an attacker can force failures (revert/out‑of‑gas) while the contract continues, potentially causing inconsistent state or bypassing intended effects (e.g., token transfer not executed). Bytecode indicates return data handling but no clear success check, so this risk is uncertain.","recommendation":"Check the CALL success flag and revert on failure; for token transfers, enforce expected return values or use a safe transfer wrapper that handles non‑standard ERC20s.","evidence":"Both CALL sites report returndata_checked = null in the callsite list. The basic blocks around pc 0x675 and 0xC64 show CALL followed by returndata handling without an obvious ISZERO-on-success branch in the disassembly view.","locations":["pc:0x675","pc:0xC64"]},{"severity":"low","category":"other","title":"CREATE opcode present; deployment capability may be unintentionally exposed","exploit_scenario":"If the CREATE path is externally reachable and accepts user‑provided init code/value, any caller could deploy arbitrary contracts from this address. This can be abused for griefing or to create confusing/undesired deployments if the contract is not intended to be a factory. Reachability from public entrypoints is not proven in bytecode‑only analysis.","recommendation":"Confirm whether contract creation is intended. If not, remove or gate the CREATE path; if intended, enforce access control and validate init code/value.","evidence":"A basic block at start_pc 7881 includes a CREATE opcode; detector findings report “CREATE/CREATE2 reachable.”","locations":["pc:0x1ec9"]}]}
tokens used
56,666
Metadata
{
    "codex": {
        "ran_at": "2026-01-10T02:28:43.457994+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 15870,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "Bytecode shows two computed CALLs (with possible ETH value) plus a reachable CREATE opcode; no delegatecall or upgrade-slot writes detected. Access control and success checking are unclear from bytecode-only analysis, so findings focus on potential unguarded external execution paths.",
    "raw_final": {
        "summary": "Bytecode shows two computed CALLs (with possible ETH value) plus a reachable CREATE opcode; no delegatecall or upgrade-slot writes detected. Access control and success checking are unclear from bytecode-only analysis, so findings focus on potential unguarded external execution paths.",
        "findings": [
            {
                "title": "Computed external CALL with value; access control/target constraints unclear",
                "category": "access_control",
                "evidence": "artifact_json.callsites lists CALL at pc 1653 and 3172 with target_expression_category/value_expression_category = computed and returndata_checked = null; detector findings flag \u201cUntrusted CALL target/value reachable\u201d and \u201cETH value transfer possible\u201d; auth.guards is empty across functions.",
                "severity": "medium",
                "locations": [
                    "pc:0x675",
                    "pc:0xC64"
                ],
                "recommendation": "Ensure the CALL paths are gated (owner/role/whitelist) or strictly validate target/value/call data. If the behavior is intended (executor/factory), document it and minimize value forwarding or add per\u2011call limits.",
                "exploit_scenario": "If any of the public selectors allow user-controlled target/value, a caller could direct the contract to CALL arbitrary addresses and forward ETH from the contract balance, potentially draining funds or triggering unintended external side effects. This is especially risky if these paths are intended to be owner\u2011only; guard detection did not identify any access control in bytecode, so authorization is uncertain."
            },
            {
                "title": "Low-level CALL return status not explicitly validated",
                "category": "other",
                "evidence": "Both CALL sites report returndata_checked = null in the callsite list. The basic blocks around pc 0x675 and 0xC64 show CALL followed by returndata handling without an obvious ISZERO-on-success branch in the disassembly view.",
                "severity": "low",
                "locations": [
                    "pc:0x675",
                    "pc:0xC64"
                ],
                "recommendation": "Check the CALL success flag and revert on failure; for token transfers, enforce expected return values or use a safe transfer wrapper that handles non\u2011standard ERC20s.",
                "exploit_scenario": "If the contract assumes external calls succeed but ignores the CALL success flag, an attacker can force failures (revert/out\u2011of\u2011gas) while the contract continues, potentially causing inconsistent state or bypassing intended effects (e.g., token transfer not executed). Bytecode indicates return data handling but no clear success check, so this risk is uncertain."
            },
            {
                "title": "CREATE opcode present; deployment capability may be unintentionally exposed",
                "category": "other",
                "evidence": "A basic block at start_pc 7881 includes a CREATE opcode; detector findings report \u201cCREATE/CREATE2 reachable.\u201d",
                "severity": "low",
                "locations": [
                    "pc:0x1ec9"
                ],
                "recommendation": "Confirm whether contract creation is intended. If not, remove or gate the CREATE path; if intended, enforce access control and validate init code/value.",
                "exploit_scenario": "If the CREATE path is externally reachable and accepts user\u2011provided init code/value, any caller could deploy arbitrary contracts from this address. This can be abused for griefing or to create confusing/undesired deployments if the contract is not intended to be a factory. Reachability from public entrypoints is not proven in bytecode\u2011only analysis."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "proxy_context": {
        "proxy_run_id": "019ba5b8-1c4c-7169-aef9-a25066552b6e",
        "proxy_address": "0xf207b2f9f9417fc73cad069f7aa5ae1c6a5b428d",
        "implementation_run_id": "019ba5b8-2038-72ea-aa59-bde74b3dad8c",
        "implementation_address": "0x0d424072d658e6abd92c36f8fc16fd6479ae15a0"
    },
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
0
EXT*/BALANCE
0
Total opcodes
24
Flags
delegatecall_present
View cast disassembly output
00000000: CALLDATASIZE
00000001: RETURNDATASIZE
00000002: RETURNDATASIZE
00000003: CALLDATACOPY
00000004: RETURNDATASIZE
00000005: RETURNDATASIZE
00000006: RETURNDATASIZE
00000007: CALLDATASIZE
00000008: RETURNDATASIZE
00000009: PUSH20 0x0d424072d658e6abd92c36f8fc16fd6479ae15a0
0000001e: GAS
0000001f: DELEGATECALL
00000020: RETURNDATASIZE
00000021: DUP3
00000022: DUP1
00000023: RETURNDATACOPY
00000024: SWAP1
00000025: RETURNDATASIZE
00000026: SWAP2
00000027: PUSH1 0x2b
00000029: JUMPI
0000002a: REVERT
0000002b: JUMPDEST
0000002c: RETURN

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
critical upgradeability detector Untrusted DELEGATECALL target reachable 70 yes
view
trace_id: 0x61e9f4dbdec7c7c87ab9fbccc72f0bdd5d3a0fa9389b80b99ca2d924b2b5f973
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "validated",
    "attempts": 1,
    "trace_id": "0x61e9f4dbdec7c7c87ab9fbccc72f0bdd5d3a0fa9389b80b99ca2d924b2b5f973"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x",
            "selector": "fallback",
            "calldata_variants": [
                "0x"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 31,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}
medium access_control codex Computed external CALL with value; access control/target constraints unclear 75 no
view
evidence_json
{
    "evidence": "artifact_json.callsites lists CALL at pc 1653 and 3172 with target_expression_category/value_expression_category = computed and returndata_checked = null; detector findings flag \u201cUntrusted CALL target/value reachable\u201d and \u201cETH value transfer possible\u201d; auth.guards is empty across functions.",
    "locations": [
        "pc:0x675",
        "pc:0xC64"
    ],
    "recommendation": "Ensure the CALL paths are gated (owner/role/whitelist) or strictly validate target/value/call data. If the behavior is intended (executor/factory), document it and minimize value forwarding or add per\u2011call limits.",
    "exploit_scenario": "If any of the public selectors allow user-controlled target/value, a caller could direct the contract to CALL arbitrary addresses and forward ETH from the contract balance, potentially draining funds or triggering unintended external side effects. This is especially risky if these paths are intended to be owner\u2011only; guard detection did not identify any access control in bytecode, so authorization is uncertain."
}
low other codex Low-level CALL return status not explicitly validated 65 no
view
evidence_json
{
    "evidence": "Both CALL sites report returndata_checked = null in the callsite list. The basic blocks around pc 0x675 and 0xC64 show CALL followed by returndata handling without an obvious ISZERO-on-success branch in the disassembly view.",
    "locations": [
        "pc:0x675",
        "pc:0xC64"
    ],
    "recommendation": "Check the CALL success flag and revert on failure; for token transfers, enforce expected return values or use a safe transfer wrapper that handles non\u2011standard ERC20s.",
    "exploit_scenario": "If the contract assumes external calls succeed but ignores the CALL success flag, an attacker can force failures (revert/out\u2011of\u2011gas) while the contract continues, potentially causing inconsistent state or bypassing intended effects (e.g., token transfer not executed). Bytecode indicates return data handling but no clear success check, so this risk is uncertain."
}
low other codex CREATE opcode present; deployment capability may be unintentionally exposed 65 no
view
evidence_json
{
    "evidence": "A basic block at start_pc 7881 includes a CREATE opcode; detector findings report \u201cCREATE/CREATE2 reachable.\u201d",
    "locations": [
        "pc:0x1ec9"
    ],
    "recommendation": "Confirm whether contract creation is intended. If not, remove or gate the CREATE path; if intended, enforce access control and validate init code/value.",
    "exploit_scenario": "If the CREATE path is externally reachable and accepts user\u2011provided init code/value, any caller could deploy arbitrary contracts from this address. This can be abused for griefing or to create confusing/undesired deployments if the contract is not intended to be a factory. Reachability from public entrypoints is not proven in bytecode\u2011only analysis."
}