F-2025-0018·false-security-control

Unnecessary and misleading check in implementation()

Fixednfterc721erc20
TL;DR

The proxy's implementation() restricts access to the admin even though the same address is publicly readable through ProxyAdmin and the EIP-1967 storage slot, creating only a false sense of security.

Severity
INFO
Impact
LOW
Likelihood
LOW
Method
MManual review
CAT.
Complexity
LOW
Exploitability
LOW
02Section · Description

Description

The proxy contract includes a misleading access control check in the implementation() function that serves no practical security purpose:

  1. In KnowledgeMarketProxy.sol (line 54), the implementation address is restricted to admin-only access:
solidity
require(msg.sender == _getAdmin(), "Only admin can view implementation");
  1. However, in ProxyAdmin.sol (line 47), the same implementation address is exposed publicly:
solidity
function getProxyImplementation(KnowledgeMarketProxy proxy) external view returns (address) {
// We use the implementation getter directly on the proxy (no need to be admin)
return proxy.implementation();
}
  1. Additionally, the implementation address is stored in a standardized storage slot (EIP-1967) that anyone can read directly from the blockchain.

This creates a false sense of security and architectural inconsistency. The access control in the proxy is ineffective since the same information is available through multiple public channels.

03Section · Impact

Impact

Misleading access control that suggests confidentiality where none exists; the implementation address is public anyway via EIP-1967 and the helper.

04Section · Recommendation

Recommendation

The recommended solution is to remove the admin-only check from the KnowledgeMarketProxy implementation() function:

solidity
function implementation() external view returns (address) {
// require(msg.sender == _getAdmin(), "Only admin can view implementation"); // remove
return _getImplementation();
}

Since the implementation address is publicly accessible through the ProxyAdmin contract and direct storage-slot queries, the check provides a false sense of security without offering any real protection.

05Section · Resolution

Resolution

Ipal Network: Confirmed. We agreed with the recommendation.

Zealynx: Not Fixed: The admin-only check in the implementation() function remains, but this is purely cosmetic since the implementation address is publicly readable through standard EIP-1967 storage slots anyway.

UPDATE: Fixed.

Status
Fixed
F-2025-0018

oog
zealynx

Smart Contract Security Digest

Monthly exploit breakdowns, audit checklists, and DeFi security research — straight to your inbox

© 2026 Zealynx