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

Analysis Run

019c0ea9-07c8-738e-b792-93c75f910896

failed
Chain ID
1
Address
Block Number
Created
Fri, Jan 30, 2026 11:28 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
1
Validated
1
Source
Verified
Review Backing
Not yet
Best current signal
Untrusted DELEGATECALL target reachable
crit 1 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
41676 artifact.fetch complete 1 / 3 2 months ago
41677 proxy.resolve complete 1 / 3 2 months ago
41678 tool.cast_disasm complete 1 / 3 2 months ago
41679 analysis.bundle complete 1 / 3 2 months ago
41680 capability.graph complete 1 / 3 2 months ago
41681 detector.run complete 1 / 3 2 months ago
41682 validation.fork complete 1 / 3 2 months ago
42273 report.consolidate complete 1 / 6 2 months ago
42274 tool.slither failed 2 / 2 2 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes confirmed
Verified Source: yes
Proxy evidence
{
    "method": "etherscan+onchain",
    "status": "confirmed",
    "etherscan_hint": {
        "source": "etherscan",
        "etherscan": {
            "proxy_flag": true,
            "implementation": "0x46c64c1630f320b890d765e7c6f901574924b0c7"
        }
    },
    "implementation": "0x46c64c1630f320b890d765e7c6f901574924b0c7",
    "onchain_method": "beacon"
}

Slither

tool.slither
Status
failed slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-v2nintug) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-v2nintug) Traceback (most recent call last): File "/var/www/tripwire/.venv/bin/slither", line 10, in <module> sys.exit(main()) ~~~~^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main main_impl(all_detector_classes=detectors, all_printer_classes=printers) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl ) = process_all(filename, args, detector_classes, printer_classes) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all compilations = compile_all(target, **vars(args)) File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all compilations.append(CryticCompile(target, **kwargs)) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__ self._compile(**kwargs) ~~~~~~~~~~~~~^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile self._platform.compile(self, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile hardhat_like_parsing( ~~~~~~~~~~~~~~~~~~~~^ crytic_compile, str(self._target), build_directory, str(self._project_root) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing raise InvalidCompilation(txt) crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command? /tmp/slither-v2nintug/out/build-info is not a directory.
Attempts
2 / 2
Findings
0
Solc
View stderr
Traceback (most recent call last):
  File "/var/www/tripwire/worker/worker.py", line 198, in main
    payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
  File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
    return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 1084, in run
    stdout_text, stderr_text, result_json = _run_slither(
                                            ~~~~~~~~~~~~^
        workspace,
        ^^^^^^^^^^
    ...<4 lines>...
        target_path=target_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 958, in _run_slither
    raise RuntimeError(f"slither failed (exit {result.returncode}): {stderr_text or stdout_text}")
RuntimeError: slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-v2nintug)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-v2nintug)
Traceback (most recent call last):
  File "/var/www/tripwire/.venv/bin/slither", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main
    main_impl(all_detector_classes=detectors, all_printer_classes=printers)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
        ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all
    compilations = compile_all(target, **vars(args))
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all
    compilations.append(CryticCompile(target, **kwargs))
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__
    self._compile(**kwargs)
    ~~~~~~~~~~~~~^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile
    self._platform.compile(self, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile
    hardhat_like_parsing(
    ~~~~~~~~~~~~~~~~~~~~^
        crytic_compile, str(self._target), build_directory, str(self._project_root)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing
    raise InvalidCompilation(txt)
crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command?
/tmp/slither-v2nintug/out/build-info is not a directory.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
0
No findings?
yes
Summary
Reviewed first-party sources (Vault implementation). No exploitable issues found in scope areas based on the provided code.
View stdout
{"no_findings":true,"summary":"Reviewed first-party sources (Vault implementation). No exploitable issues found in scope areas based on the provided code.","findings":[]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-6if2ak4t
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019c0eef-704f-7d32-8eaa-f03c3888419e
--------
user
Context: The user requested the proxy at 0x528190e5169ddd5ff72c40cea6d8ba37613143ac.
Audit the implementation at 0x46c64c1630f320b890d765e7c6f901574924b0c7.
Findings should refer to the implementation unless explicitly about proxy mechanics.

You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

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 and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
exec
/bin/bash -lc ls in /tmp/codex-6if2ak4t succeeded in 7ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
node_modules
src
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-6if2ak4t succeeded in 6ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: src/Vault.sol
================================================================================
// SPDX-License-Identifier: SEE LICENSE IN LICENSE
pragma solidity ^0.8.21;

import {ERC4626} from "solady/src/tokens/ERC4626.sol";
import {Ownable} from "solady/src/auth/Ownable.sol";
import {ReentrancyGuard} from "solady/src/utils/ReentrancyGuard.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {PausableUpgradeable} from "@openzeppelin-upgradeable/utils/PausableUpgradeable.sol";
import {Initializable} from "@openzeppelin-upgradeable/proxy/utils/Initializable.sol";
import "./interfaces/Errors.sol";
import "./interfaces/IVault.sol";

contract Vault is ERC4626, Initializable, Ownable, PausableUpgradeable, ReentrancyGuard {
    IERC20 public depositToken;
codex
{"no_findings":true,"summary":"Reviewed first-party sources (Vault implementation). No exploitable issues found in scope areas based on the provided code.","findings":[]}
tokens used
9,562
Metadata
{
    "codex": {
        "ran_at": "2026-01-30T12:45:34.006826+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 17,
        "import_count": 20,
        "first_party_contracts_count": 5
    },
    "summary": "Reviewed first-party sources (Vault implementation). No exploitable issues found in scope areas based on the provided code.",
    "raw_final": {
        "summary": "Reviewed first-party sources (Vault implementation). No exploitable issues found in scope areas based on the provided code.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "proxy_context": {
        "proxy_run_id": "019c0ea9-07c8-738e-b792-93c75f910896",
        "proxy_address": "0x528190e5169ddd5ff72c40cea6d8ba37613143ac",
        "implementation_run_id": "019c0ea9-f016-739a-ad4f-c89570e9c08b",
        "implementation_address": "0x46c64c1630f320b890d765e7c6f901574924b0c7"
    },
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
0
Total opcodes
163
Flags
delegatecall_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: DUP1
00000003: PUSH1 0x40
00000005: MSTORE
00000006: PUSH32 0x5c60da1b00000000000000000000000000000000000000000000000000000000
00000027: DUP2
00000028: MSTORE
00000029: PUSH1 0x20
0000002b: DUP2
0000002c: PUSH1 0x04
0000002e: DUP2
0000002f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000044: PUSH32 0x00000000000000000000000054e44dbb92dba848ace27f44c0cb4268981ef1cc
00000065: AND
00000066: GAS
00000067: STATICCALL
00000068: SWAP1
00000069: DUP2
0000006a: ISZERO
0000006b: PUSH2 0x010e
0000006e: JUMPI
0000006f: PUSH1 0x00
00000071: SWAP2
00000072: PUSH2 0x007c
00000075: JUMPI
00000076: JUMPDEST
00000077: POP
00000078: PUSH2 0x016c
0000007b: JUMP
0000007c: JUMPDEST
0000007d: SWAP1
0000007e: POP
0000007f: PUSH1 0x20
00000081: RETURNDATASIZE
00000082: PUSH1 0x20
00000084: GT
00000085: PUSH2 0x0107
00000088: JUMPI
00000089: JUMPDEST
0000008a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000000ab: PUSH1 0x1f
000000ad: DUP3
000000ae: ADD
000000af: AND
000000b0: DUP3
000000b1: ADD
000000b2: SWAP2
000000b3: DUP1
000000b4: DUP4
000000b5: LT
000000b6: PUSH8 0xffffffffffffffff
000000bf: DUP5
000000c0: GT
000000c1: OR
000000c2: PUSH2 0x00d8
000000c5: JUMPI
000000c6: PUSH2 0x00d2
000000c9: SWAP3
000000ca: PUSH1 0x40
000000cc: MSTORE
000000cd: ADD
000000ce: PUSH2 0x011a
000000d1: JUMP
000000d2: JUMPDEST
000000d3: CODESIZE
000000d4: PUSH2 0x0076
000000d7: JUMP
000000d8: JUMPDEST
000000d9: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000000fa: PUSH1 0x00
000000fc: MSTORE
000000fd: PUSH1 0x41
000000ff: PUSH1 0x04
00000101: MSTORE
00000102: PUSH1 0x24
00000104: PUSH1 0x00
00000106: REVERT
00000107: JUMPDEST
00000108: POP
00000109: RETURNDATASIZE
0000010a: PUSH2 0x0089
0000010d: JUMP
0000010e: JUMPDEST
0000010f: PUSH1 0x40
00000111: MLOAD
00000112: RETURNDATASIZE
00000113: PUSH1 0x00
00000115: DUP3
00000116: RETURNDATACOPY
00000117: RETURNDATASIZE
00000118: SWAP1
00000119: REVERT
0000011a: JUMPDEST
0000011b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80
0000013c: PUSH1 0x20
0000013e: SWAP2
0000013f: ADD
00000140: SLT
00000141: PUSH2 0x0167
00000144: JUMPI
00000145: PUSH1 0x80
00000147: MLOAD
00000148: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000015d: DUP2
0000015e: AND
0000015f: DUP2
00000160: SUB
00000161: PUSH2 0x0167
00000164: JUMPI
00000165: SWAP1
00000166: JUMP
00000167: JUMPDEST
00000168: PUSH1 0x00
0000016a: DUP1
0000016b: REVERT
0000016c: JUMPDEST
0000016d: PUSH1 0x00
0000016f: DUP1
00000170: DUP1
00000171: SWAP3
00000172: CALLDATASIZE
00000173: DUP3
00000174: DUP1
00000175: CALLDATACOPY
00000176: DUP2
00000177: CALLDATASIZE
00000178: SWAP2
00000179: GAS
0000017a: DELEGATECALL
0000017b: RETURNDATASIZE
0000017c: DUP3
0000017d: DUP1
0000017e: RETURNDATACOPY
0000017f: ISZERO
00000180: PUSH2 0x0187
00000183: JUMPI
00000184: RETURNDATASIZE
00000185: SWAP1
00000186: RETURN
00000187: JUMPDEST
00000188: RETURNDATASIZE
00000189: SWAP1
0000018a: REVERT
0000018b: INVALID
0000018c: LOG2
0000018d: PUSH5 0x6970667358
00000193: UNKNOWN(0x22)
00000194: SLT
00000195: KECCAK256
00000196: PUSH8 0x9011f0197ed69d66
0000019f: UNKNOWN(0xA6)
000001a0: UNKNOWN(0x21)
000001a1: UNKNOWN(0x4C)
000001a2: UNKNOWN(0x2E)
000001a3: UNKNOWN(0xCE)
000001a4: UNKNOWN(0x2A)
000001a5: JUMP
000001a6: DUP7
000001a7: ADD
000001a8: PUSH21 0xb5f435cfccbd2b485e551e476664736f6c63430008
000001be: NOT
000001bf: STOP
000001c0: 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 yes yes
view
trace_id: 0x4d09f67de8619317323ce54f82f074b3da284f0bc401951e2e732edb19e0550f
call_targets: 0x3788f64a0805f3ec777ce26080bb2eeeb29c1199, 0x46c64c1630f320b890d765e7c6f901574924b0c7
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x4d09f67de8619317323ce54f82f074b3da284f0bc401951e2e732edb19e0550f",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x3788f64a0805f3ec777ce26080bb2eeeb29c1199",
        "0x46c64c1630f320b890d765e7c6f901574924b0c7"
    ],
    "matched_probe": null,
    "target_varies": true,
    "classification": "target_varies"
}
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": 378,
            "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
}