56602 sc low function takes incorrect modifier

Submitted on Oct 18th 2025 at 09:24:40 UTC by @PotEater for Audit Comp | Alchemix V3arrow-up-right

  • Report ID: #56602

  • Report Type: Smart Contract

  • Report severity: Low

  • Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/utils/PermissionedProxy.sol

  • Impacts:

    • Temporary freezing of funds for at least 24 hour

Description

Brief/Intro

The function proxy takes an incorrect modifier onlyAdmin. It should take onlyOperator modifier instead.

Vulnerability Details

The function proxy implements this check:

require(!permissionedCalls[selector], "PD");

This check is a constraint for operators, not for an admin, because the admin can freely adjust permissioned calls using setPermissionedCall.

However, the function takes the onlyAdmin modifier, which is incorrect. The function should take onlyOperator modifier instead.

This is the intended design. Otherwise it would make no sense to implement the check.

With the current design, the operators cannot access any function through the proxy, however, the system expects operators to access the AlchemistAllocator contract through the proxy.

Impact Details

This could result in a temporary freezing of funds, because operators cannot allocate and deallocate funds, slowing the process of moving funds.

This also breaks the intended design.

References

https://github.com/alchemix-finance/v3-poc/blob/a192ab313c81ba3ab621d9ca1ee000110fbdd1e9/src/utils/PermissionedProxy.sol#L48

Proof of Concept

Proof of Concept

Paste this into src/test/PoC.t.sol:

This PoC demonstrates how an operator tries to call allocate through the proxy but fails due to the onlyAdmin modifier:

PoC:

Result.

Was this helpful?