For the complete documentation index, see llms.txt. This page is also available as Markdown.

49915 sc low misleading event emission in createwhitelistrestrictions function in restrictionsfactory contract

Submitted on Jul 20th 2025 at 14:25:54 UTC by @AasifUsmani for Attackathon | Plume Network

  • Report ID: #49915

  • Report Type: Smart Contract

  • Report severity: Low

  • Target: https://github.com/immunefi-team/attackathon-plume-network/blob/main/arc/src/restrictions/RestrictionsFactory.sol

  • Impacts: Contract fails to deliver promised returns, but doesn't lose value

Description

Brief/Intro

The createWhitelistRestrictions function in RestrictionsFactory.sol emits misleading event data when the actual admin of the created restrictions module differs from the function caller, leading to incorrect off-chain tracking and potential confusion about module ownership.

Vulnerability Details

Location RestrictionsFactory.sol - createWhitelistRestrictions() function (lines 67-91)

Root Cause

The function always emits msg.sender as the "owner" in the RestrictionsCreated event, regardless of who actually receives admin privileges in the deployed restrictions module:

function createWhitelistRestrictions(address admin) external returns (address) {
    // Actual admin logic: use provided admin or fallback to msg.sender
    bytes memory initData = abi.encodeWithSelector(
        WhitelistRestrictions.initialize.selector, 
        admin != address(0) ? admin : msg.sender
    );
    
    address proxy = _deployProxy(address(implementation), initData);
    
    // Always emits msg.sender as owner, not the actual admin!
    emit RestrictionsCreated(proxy, msg.sender, address(implementation), "Whitelist");
}

The Problem

The event field labeled as "owner" doesn't represent the actual admin/owner of the restrictions module, creating a disconnect between emitted data and contract reality.

Impact Details

Misleading Off-Chain Data Off-chain systems, indexers, and user interfaces will incorrectly display module ownership information:

Data Integrity Issues

  1. Incorrect Analytics: Dashboards will show wrong creator/owner statistics

  2. User Confusion: Users checking events will see incorrect ownership information

  3. Audit Trail Problems: Security monitoring systems will track wrong addresses as module controllers

References

https://github.com/immunefi-team/attackathon-plume-network/blob/580cc6d61b08a728bd98f11b9a2140b84f41c802/arc/src/restrictions/RestrictionsFactory.sol#L87

Proof of Concept

1

Step

Call createWhitelistRestrictions with different msg.sender and admin parameters.

2

Step

Observe the emitted event: it will show msg.sender as the "owner" instead of the admin address that actually received control.

Was this helpful?