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

Analysis Run

019bb004-7ad9-72bc-bd34-1a7bbbd54b88

complete
Chain ID
1
Address
Block Number
Created
Mon, Jan 12, 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
0
Source
Bytecode only
Review Backing
Present
Best current signal
Untrusted DELEGATECALL target reachable
crit 0 high 0 direct contract
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
39318 artifact.fetch complete 1 / 3 3 months ago
39319 proxy.resolve complete 1 / 3 3 months ago
39320 tool.cast_disasm complete 1 / 3 3 months ago
39321 analysis.bundle complete 1 / 3 3 months ago
39322 capability.graph complete 1 / 3 3 months ago
39323 detector.run complete 1 / 3 3 months ago
39324 validation.fork complete 1 / 3 3 months ago
39465 report.consolidate complete 1 / 6 3 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: no
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
1
No findings?
no
Summary
Bytecode shows a selector-based router that DELEGATECALLs to a computed target from storage; no auth guards are detected in the proxy bytecode, so safety depends entirely on how the selector→implementation mapping is managed.
View stdout
{"no_findings":false,"summary":"Bytecode shows a selector-based router that DELEGATECALLs to a computed target from storage; no auth guards are detected in the proxy bytecode, so safety depends entirely on how the selector→implementation mapping is managed.","findings":[{"severity":"medium","category":"upgradeability","title":"DELEGATECALL target is computed from storage without visible access controls","exploit_scenario":"Any caller can reach the fallback path (non-matching selector) and trigger a DELEGATECALL to the address stored in a selector-derived mapping. If that mapping can be modified by an untrusted party (e.g., via an insecure facet or storage collision in delegated logic), an attacker can point a selector to a malicious contract and execute arbitrary code in the proxy’s context, enabling storage corruption, asset theft, or contract bricking.","recommendation":"Ensure all functions that can modify the selector→implementation mapping are strictly access-controlled (admin-only, timelocked, or immutable). Consider validating that new targets have code (extcodesize > 0) and emit events for updates to aid monitoring.","evidence":"Fallback path computes a keccak-based storage slot from calldata and loads the delegatecall target, then performs DELEGATECALL with computed target; auth guards are empty in the bytecode analysis. The only callsite is a computed DELEGATECALL at pc 240.","locations":["pc:0x00f0"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-l87h39f3
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bb019-e741-74b0-b85f-e70000db09e8
--------
user
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
**Preparing to read BYTECODE_BUNDLE**
exec
/bin/bash -lc 'rg --files' in /tmp/codex-l87h39f3 succeeded in 12ms:
codex-output-schema.json
BYTECODE_BUNDLE.json

thinking
**Reading BYTECODE_BUNDLE.json**
exec
/bin/bash -lc 'cat BYTECODE_BUNDLE.json' in /tmp/codex-l87h39f3 succeeded in 6ms:
{
  "analysis_artifact": {
    "address": "0xad2b801944acb63eb31fdbc6315d2a3842615e0a",
    "artifact_hash": "0x85b44d8f484fbda995d24eec14cdc8e7752b238192cafda7d62cb87b618f82a2",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 12,
          "hash": "0xb422920917489623fe184081b17583815248c921555350d526b6bb72da0b930b",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATASIZE",
            "LT",
            "PUSH2",

thinking
**Analyzing bytecode bundle structure**
exec
/bin/bash -lc 'rg -n "storage|slot|implementation|eip" BYTECODE_BUNDLE.json' in /tmp/codex-l87h39f3 succeeded in 21ms:
1155:          "storage": {
1157:            "slots": [
1161:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000009"
1166:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
1171:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
1176:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
1194:          "storage": {
1196:            "slots": [
1200:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000009"
1205:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
1210:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
1215:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
1233:          "storage": {
1235:            "slots": [
1239:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000009"
1244:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000008"
1249:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000006"
1254:                "slot": "0x0000000000000000000000000000000000000000000000000000000000000005"
1272:          "storage": {
1274:            "slots": [

thinking
**Searching for storage references**
exec
/bin/bash -lc "sed -n '1120,1425p' BYTECODE_BUNDLE.json" in /tmp/codex-l87h39f3 succeeded in 10ms:
      "function_entries": [
        {
          "entry_pc": 2522041626,
          "selector": "0x96534d1a"
        },
        {
          "entry_pc": 4050599390,
          "selector": "0xed4cfed7"
        },
        {
          "entry_pc": null,
          "selector": "0xf16f3dde"
        },
        {
          "entry_pc": 2488959524,
          "selector": "0x29485e63"
        },
        {
          "entry_pc": null,
          "selector": "0x945a8224"


thinking
**Analyzing proxy delegatecall and fallback logic**

I'm parsing runtime bytecode and reasoning the contract acts as a proxy/router using a mapping from function selectors to target addresses, performing delegatecalls without on-chain guards. It has view functions reading storage slots but no setters visible, so upgradeability and access control are uncertain. The fallback delegatecall target is computed from calldata with a mask and mapping lookup, with a revert if zero. The main risk is untrusted delegatecall if the mapping can be modified without proper access control, suggesting a medium-to-high severity for security review.
thinking
**Examining unusual calldata masking approach**

I'm focused on decoding a peculiar 5-byte mask (`0x7fffffffff000...`) applied to calldata in the bytecode, which differs from the standard 4-byte selector mask. This might indicate a custom key used in the mapping for delegatecall targets, possibly to handle flags or extended selectors. I'm curious how this impacts selector uniqueness or collisions and looking to correlate this with other analysis artifacts or evidence available.
exec
/bin/bash -lc 'rg -n "evidence|callsites|callsite|bundle" BYTECODE_BUNDLE.json' in /tmp/codex-l87h39f3 succeeded in 20ms:
877:      "callsites": [
1416:      "proxy_evidence": {
2100:          "type": "callsite"
2146:      "evidence_json": {

thinking
**Checking callsites section**
exec
/bin/bash -lc "sed -n '840,940p' BYTECODE_BUNDLE.json" in /tmp/codex-l87h39f3 succeeded in 26ms:
          "start_pc": 728
        },
        {
          "end_pc": 761,
          "hash": "0x5f22ac148b2f92217d955a85193496130fe85f370e204a69a835719ede8a079e",
          "opcodes": [
            "OP_84",
            "OP_98",
            "OP_8E",
            "OP_1E",
            "OP_80",
            "CALLDATALOAD",
            "OP_C0",
            "PUSH22",
            "STOP"
          ],
          "start_pc": 731
        },
        {
          "end_pc": 764,


thinking
**Analyzing delegatecall proxy risks**
thinking
**Preparing detailed JSON report**

I'll organize the findings into a JSON object following the schema required, including severity, category, exploit scenario, recommendations, evidence, and relevant code locations like pc:0x00f0 for delegatecall. I want to ensure the report is clear and valid while being conservative about severity and thorough with the explanations.
codex
{"no_findings":false,"summary":"Bytecode shows a selector-based router that DELEGATECALLs to a computed target from storage; no auth guards are detected in the proxy bytecode, so safety depends entirely on how the selector→implementation mapping is managed.","findings":[{"severity":"medium","category":"upgradeability","title":"DELEGATECALL target is computed from storage without visible access controls","exploit_scenario":"Any caller can reach the fallback path (non-matching selector) and trigger a DELEGATECALL to the address stored in a selector-derived mapping. If that mapping can be modified by an untrusted party (e.g., via an insecure facet or storage collision in delegated logic), an attacker can point a selector to a malicious contract and execute arbitrary code in the proxy’s context, enabling storage corruption, asset theft, or contract bricking.","recommendation":"Ensure all functions that can modify the selector→implementation mapping are strictly access-controlled (admin-only, timelocked, or immutable). Consider validating that new targets have code (extcodesize > 0) and emit events for updates to aid monitoring.","evidence":"Fallback path computes a keccak-based storage slot from calldata and loads the delegatecall target, then performs DELEGATECALL with computed target; auth guards are empty in the bytecode analysis. The only callsite is a computed DELEGATECALL at pc 240.","locations":["pc:0x00f0"]}]}
tokens used
33,788
Metadata
{
    "codex": {
        "ran_at": "2026-01-12T02:50:37.237258+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 1534,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "Bytecode shows a selector-based router that DELEGATECALLs to a computed target from storage; no auth guards are detected in the proxy bytecode, so safety depends entirely on how the selector\u2192implementation mapping is managed.",
    "raw_final": {
        "summary": "Bytecode shows a selector-based router that DELEGATECALLs to a computed target from storage; no auth guards are detected in the proxy bytecode, so safety depends entirely on how the selector\u2192implementation mapping is managed.",
        "findings": [
            {
                "title": "DELEGATECALL target is computed from storage without visible access controls",
                "category": "upgradeability",
                "evidence": "Fallback path computes a keccak-based storage slot from calldata and loads the delegatecall target, then performs DELEGATECALL with computed target; auth guards are empty in the bytecode analysis. The only callsite is a computed DELEGATECALL at pc 240.",
                "severity": "medium",
                "locations": [
                    "pc:0x00f0"
                ],
                "recommendation": "Ensure all functions that can modify the selector\u2192implementation mapping are strictly access-controlled (admin-only, timelocked, or immutable). Consider validating that new targets have code (extcodesize > 0) and emit events for updates to aid monitoring.",
                "exploit_scenario": "Any caller can reach the fallback path (non-matching selector) and trigger a DELEGATECALL to the address stored in a selector-derived mapping. If that mapping can be modified by an untrusted party (e.g., via an insecure facet or storage collision in delegated logic), an attacker can point a selector to a malicious contract and execute arbitrary code in the proxy\u2019s context, enabling storage corruption, asset theft, or contract bricking."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
0
EXT*/BALANCE
0
Total opcodes
467
Flags
delegatecall_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x005e
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x96534d1a
00000019: GT
0000001a: PUSH2 0x0043
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0x96534d1a
00000024: EQ
00000025: PUSH2 0x0145
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xed4cfed7
0000002f: EQ
00000030: PUSH2 0x0167
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xf16f3dde
0000003a: EQ
0000003b: PUSH2 0x017c
0000003e: JUMPI
0000003f: PUSH2 0x0065
00000042: JUMP
00000043: JUMPDEST
00000044: DUP1
00000045: PUSH4 0x29485e63
0000004a: EQ
0000004b: PUSH2 0x0105
0000004e: JUMPI
0000004f: DUP1
00000050: PUSH4 0x945a8224
00000055: EQ
00000056: PUSH2 0x0130
00000059: JUMPI
0000005a: PUSH2 0x0065
0000005d: JUMP
0000005e: JUMPDEST
0000005f: CALLDATASIZE
00000060: PUSH2 0x0065
00000063: JUMPI
00000064: STOP
00000065: JUMPDEST
00000066: PUSH1 0x00
00000068: DUP1
00000069: CALLDATALOAD
0000006a: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000
0000008b: AND
0000008c: DUP2
0000008d: MSTORE
0000008e: PUSH1 0x01
00000090: PUSH1 0x20
00000092: MSTORE
00000093: PUSH1 0x40
00000095: SWAP1
00000096: KECCAK256
00000097: SLOAD
00000098: PUSH1 0x01
0000009a: PUSH1 0x01
0000009c: PUSH1 0xa0
0000009e: SHL
0000009f: SUB
000000a0: AND
000000a1: DUP1
000000a2: PUSH2 0x00e0
000000a5: JUMPI
000000a6: PUSH1 0x40
000000a8: MLOAD
000000a9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000000ca: DUP2
000000cb: MSTORE
000000cc: PUSH1 0x04
000000ce: ADD
000000cf: PUSH2 0x00d7
000000d2: SWAP1
000000d3: PUSH2 0x0288
000000d6: JUMP
000000d7: JUMPDEST
000000d8: PUSH1 0x40
000000da: MLOAD
000000db: DUP1
000000dc: SWAP2
000000dd: SUB
000000de: SWAP1
000000df: REVERT
000000e0: JUMPDEST
000000e1: PUSH1 0x40
000000e3: MLOAD
000000e4: CALLDATASIZE
000000e5: PUSH1 0x00
000000e7: DUP3
000000e8: CALLDATACOPY
000000e9: PUSH1 0x00
000000eb: DUP1
000000ec: CALLDATASIZE
000000ed: DUP4
000000ee: DUP6
000000ef: GAS
000000f0: DELEGATECALL
000000f1: RETURNDATASIZE
000000f2: DUP1
000000f3: PUSH1 0x00
000000f5: DUP5
000000f6: RETURNDATACOPY
000000f7: DUP2
000000f8: DUP1
000000f9: ISZERO
000000fa: PUSH2 0x0101
000000fd: JUMPI
000000fe: DUP2
000000ff: DUP5
00000100: RETURN
00000101: JUMPDEST
00000102: DUP2
00000103: DUP5
00000104: REVERT
00000105: JUMPDEST
00000106: CALLVALUE
00000107: DUP1
00000108: ISZERO
00000109: PUSH2 0x0111
0000010c: JUMPI
0000010d: PUSH1 0x00
0000010f: DUP1
00000110: REVERT
00000111: JUMPDEST
00000112: POP
00000113: PUSH2 0x011a
00000116: PUSH2 0x01ad
00000119: JUMP
0000011a: JUMPDEST
0000011b: PUSH1 0x40
0000011d: MLOAD
0000011e: PUSH2 0x0127
00000121: SWAP2
00000122: SWAP1
00000123: PUSH2 0x0240
00000126: JUMP
00000127: JUMPDEST
00000128: PUSH1 0x40
0000012a: MLOAD
0000012b: DUP1
0000012c: SWAP2
0000012d: SUB
0000012e: SWAP1
0000012f: RETURN
00000130: JUMPDEST
00000131: CALLVALUE
00000132: DUP1
00000133: ISZERO
00000134: PUSH2 0x013c
00000137: JUMPI
00000138: PUSH1 0x00
0000013a: DUP1
0000013b: REVERT
0000013c: JUMPDEST
0000013d: POP
0000013e: PUSH2 0x011a
00000141: PUSH2 0x01bc
00000144: JUMP
00000145: JUMPDEST
00000146: CALLVALUE
00000147: DUP1
00000148: ISZERO
00000149: PUSH2 0x0151
0000014c: JUMPI
0000014d: PUSH1 0x00
0000014f: DUP1
00000150: REVERT
00000151: JUMPDEST
00000152: POP
00000153: PUSH2 0x015a
00000156: PUSH2 0x01cb
00000159: JUMP
0000015a: JUMPDEST
0000015b: PUSH1 0x40
0000015d: MLOAD
0000015e: PUSH2 0x0127
00000161: SWAP2
00000162: SWAP1
00000163: PUSH2 0x02bf
00000166: JUMP
00000167: JUMPDEST
00000168: CALLVALUE
00000169: DUP1
0000016a: ISZERO
0000016b: PUSH2 0x0173
0000016e: JUMPI
0000016f: PUSH1 0x00
00000171: DUP1
00000172: REVERT
00000173: JUMPDEST
00000174: POP
00000175: PUSH2 0x015a
00000178: PUSH2 0x01d1
0000017b: JUMP
0000017c: JUMPDEST
0000017d: CALLVALUE
0000017e: DUP1
0000017f: ISZERO
00000180: PUSH2 0x0188
00000183: JUMPI
00000184: PUSH1 0x00
00000186: DUP1
00000187: REVERT
00000188: JUMPDEST
00000189: POP
0000018a: PUSH2 0x019c
0000018d: PUSH2 0x0197
00000190: CALLDATASIZE
00000191: PUSH1 0x04
00000193: PUSH2 0x0212
00000196: JUMP
00000197: JUMPDEST
00000198: PUSH2 0x01d7
0000019b: JUMP
0000019c: JUMPDEST
0000019d: PUSH1 0x40
0000019f: MLOAD
000001a0: PUSH2 0x0127
000001a3: SWAP6
000001a4: SWAP5
000001a5: SWAP4
000001a6: SWAP3
000001a7: SWAP2
000001a8: SWAP1
000001a9: PUSH2 0x0254
000001ac: JUMP
000001ad: JUMPDEST
000001ae: PUSH1 0x09
000001b0: SLOAD
000001b1: PUSH1 0x01
000001b3: PUSH1 0x01
000001b5: PUSH1 0xa0
000001b7: SHL
000001b8: SUB
000001b9: AND
000001ba: DUP2
000001bb: JUMP
000001bc: JUMPDEST
000001bd: PUSH1 0x08
000001bf: SLOAD
000001c0: PUSH1 0x01
000001c2: PUSH1 0x01
000001c4: PUSH1 0xa0
000001c6: SHL
000001c7: SUB
000001c8: AND
000001c9: DUP2
000001ca: JUMP
000001cb: JUMPDEST
000001cc: PUSH1 0x06
000001ce: SLOAD
000001cf: DUP2
000001d0: JUMP
000001d1: JUMPDEST
000001d2: PUSH1 0x05
000001d4: SLOAD
000001d5: DUP2
000001d6: JUMP
000001d7: JUMPDEST
000001d8: PUSH1 0x0a
000001da: PUSH1 0x20
000001dc: MSTORE
000001dd: PUSH1 0x00
000001df: SWAP1
000001e0: DUP2
000001e1: MSTORE
000001e2: PUSH1 0x40
000001e4: SWAP1
000001e5: KECCAK256
000001e6: DUP1
000001e7: SLOAD
000001e8: PUSH1 0x01
000001ea: DUP3
000001eb: ADD
000001ec: SLOAD
000001ed: PUSH1 0x02
000001ef: DUP4
000001f0: ADD
000001f1: SLOAD
000001f2: PUSH1 0x03
000001f4: DUP5
000001f5: ADD
000001f6: SLOAD
000001f7: PUSH1 0x04
000001f9: SWAP1
000001fa: SWAP5
000001fb: ADD
000001fc: SLOAD
000001fd: PUSH1 0x01
000001ff: PUSH1 0x01
00000201: PUSH1 0xa0
00000203: SHL
00000204: SUB
00000205: SWAP4
00000206: DUP5
00000207: AND
00000208: SWAP5
00000209: SWAP3
0000020a: SWAP4
0000020b: SWAP1
0000020c: SWAP2
0000020d: AND
0000020e: SWAP2
0000020f: SWAP1
00000210: DUP6
00000211: JUMP
00000212: JUMPDEST
00000213: PUSH1 0x00
00000215: PUSH1 0x20
00000217: DUP3
00000218: DUP5
00000219: SUB
0000021a: SLT
0000021b: ISZERO
0000021c: PUSH2 0x0223
0000021f: JUMPI
00000220: DUP1
00000221: DUP2
00000222: REVERT
00000223: JUMPDEST
00000224: DUP2
00000225: CALLDATALOAD
00000226: PUSH1 0x01
00000228: PUSH1 0x01
0000022a: PUSH1 0xa0
0000022c: SHL
0000022d: SUB
0000022e: DUP2
0000022f: AND
00000230: DUP2
00000231: EQ
00000232: PUSH2 0x0239
00000235: JUMPI
00000236: DUP2
00000237: DUP3
00000238: REVERT
00000239: JUMPDEST
0000023a: SWAP4
0000023b: SWAP3
0000023c: POP
0000023d: POP
0000023e: POP
0000023f: JUMP
00000240: JUMPDEST
00000241: PUSH1 0x01
00000243: PUSH1 0x01
00000245: PUSH1 0xa0
00000247: SHL
00000248: SUB
00000249: SWAP2
0000024a: SWAP1
0000024b: SWAP2
0000024c: AND
0000024d: DUP2
0000024e: MSTORE
0000024f: PUSH1 0x20
00000251: ADD
00000252: SWAP1
00000253: JUMP
00000254: JUMPDEST
00000255: PUSH1 0x01
00000257: PUSH1 0x01
00000259: PUSH1 0xa0
0000025b: SHL
0000025c: SUB
0000025d: SWAP6
0000025e: DUP7
0000025f: AND
00000260: DUP2
00000261: MSTORE
00000262: PUSH1 0x20
00000264: DUP2
00000265: ADD
00000266: SWAP5
00000267: SWAP1
00000268: SWAP5
00000269: MSTORE
0000026a: SWAP2
0000026b: SWAP1
0000026c: SWAP4
0000026d: AND
0000026e: PUSH1 0x40
00000270: DUP4
00000271: ADD
00000272: MSTORE
00000273: PUSH1 0x60
00000275: DUP3
00000276: ADD
00000277: SWAP3
00000278: SWAP1
00000279: SWAP3
0000027a: MSTORE
0000027b: PUSH1 0x80
0000027d: DUP2
0000027e: ADD
0000027f: SWAP2
00000280: SWAP1
00000281: SWAP2
00000282: MSTORE
00000283: PUSH1 0xa0
00000285: ADD
00000286: SWAP1
00000287: JUMP
00000288: JUMPDEST
00000289: PUSH1 0x20
0000028b: DUP1
0000028c: DUP3
0000028d: MSTORE
0000028e: PUSH1 0x18
00000290: SWAP1
00000291: DUP3
00000292: ADD
00000293: MSTORE
00000294: PUSH32 0x46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000
000002b5: PUSH1 0x40
000002b7: DUP3
000002b8: ADD
000002b9: MSTORE
000002ba: PUSH1 0x60
000002bc: ADD
000002bd: SWAP1
000002be: JUMP
000002bf: JUMPDEST
000002c0: SWAP1
000002c1: DUP2
000002c2: MSTORE
000002c3: PUSH1 0x20
000002c5: ADD
000002c6: SWAP1
000002c7: JUMP
000002c8: INVALID
000002c9: LOG2
000002ca: PUSH5 0x6970667358
000002d0: UNKNOWN(0x22)
000002d1: SLT
000002d2: KECCAK256
000002d3: PUSH2 0x680e
000002d6: UNKNOWN(0xDA)
000002d7: STOP
000002d8: UNKNOWN(0xDA)
000002d9: SWAP3
000002da: JUMP
000002db: DUP5
000002dc: SWAP9
000002dd: DUP15
000002de: CLZ
000002df: DUP1
000002e0: CALLDATALOAD
000002e1: UNKNOWN(0xC0)
000002e2: PUSH22 0x83e5e7d23218116403fd7d1f1fc0b2c964736f6c6343
000002f9: STOP
000002fa: MOD
000002fb: MUL
000002fc: STOP
000002fd: CALLER

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 no no
view
trace_id: 0x158f29f5ae276f1e75bb00c57d0ca18ec414d2b1e315c06d8f41d82d922dd429
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 60,
    "trace_id": "0x158f29f5ae276f1e75bb00c57d0ca18ec414d2b1e315c06d8f41d82d922dd429",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x96534d1a",
            "selector": "0x96534d1a",
            "calldata_variants": [
                "0x96534d1a",
                "0x96534d1a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xed4cfed7",
            "selector": "0xed4cfed7",
            "calldata_variants": [
                "0xed4cfed7",
                "0xed4cfed70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf16f3dde",
            "selector": "0xf16f3dde",
            "calldata_variants": [
                "0xf16f3dde",
                "0xf16f3dde0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x29485e63",
            "selector": "0x29485e63",
            "calldata_variants": [
                "0x29485e63",
                "0x29485e630000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x945a8224",
            "selector": "0x945a8224",
            "calldata_variants": [
                "0x945a8224",
                "0x945a82240000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 240,
            "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 codex DELEGATECALL target is computed from storage without visible access controls 75 no
view
evidence_json
{
    "evidence": "Fallback path computes a keccak-based storage slot from calldata and loads the delegatecall target, then performs DELEGATECALL with computed target; auth guards are empty in the bytecode analysis. The only callsite is a computed DELEGATECALL at pc 240.",
    "locations": [
        "pc:0x00f0"
    ],
    "recommendation": "Ensure all functions that can modify the selector\u2192implementation mapping are strictly access-controlled (admin-only, timelocked, or immutable). Consider validating that new targets have code (extcodesize > 0) and emit events for updates to aid monitoring.",
    "exploit_scenario": "Any caller can reach the fallback path (non-matching selector) and trigger a DELEGATECALL to the address stored in a selector-derived mapping. If that mapping can be modified by an untrusted party (e.g., via an insecure facet or storage collision in delegated logic), an attacker can point a selector to a malicious contract and execute arbitrary code in the proxy\u2019s context, enabling storage corruption, asset theft, or contract bricking."
}
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
}