From 15c39afff3697a8cd853d992d1a3916311bb9b39 Mon Sep 17 00:00:00 2001 From: Sam Jeston Date: Mon, 6 May 2024 11:32:09 +1000 Subject: [PATCH] [TD-1397] ImmutableSignedZoneV2 internal audit fixes (#214) * update readme Signed-off-by: Frank Li * pin solidity version Signed-off-by: Frank Li * perform check before state change Signed-off-by: Frank Li * pin ImmutableSignedZoneV2 contracts to 0.8.20 * Revert if context is empty for ImmutableSignedZoneV2 * Revert "pin ImmutableSignedZoneV2 contracts to 0.8.20" This reverts commit 8da6123a601e93ae1fb480f162ad81d93260d1ac. * Restore pin * Disallow revoking role if the role member count is currently 1 * remove trailing comma * documentation rework * fix test Signed-off-by: Frank Li * fix regression Signed-off-by: Frank Li * update test name Signed-off-by: Frank Li * add audit file Signed-off-by: Frank Li * Update contracts/trading/seaport/zones/immutable-signed-zone/v2/README.md --------- Signed-off-by: Frank Li Co-authored-by: Frank Li Co-authored-by: Naveen <116692862+naveen-imtb@users.noreply.github.com> --- ...nternal-audit-immutable-signed-zone-v2.pdf | Bin 0 -> 134947 bytes .../v2/ImmutableSignedZoneV2.sol | 14 ++- .../zones/immutable-signed-zone/v2/README.md | 18 ++- .../v2/ZoneAccessControl.sol | 14 +-- .../v2/ImmutableSignedZoneV2.t.sol | 110 ++++++++++++++++-- .../zones/immutable-signed-zone/v2/README.md | 5 +- 6 files changed, 140 insertions(+), 21 deletions(-) create mode 100644 audits/trading/202405-internal-audit-immutable-signed-zone-v2.pdf diff --git a/audits/trading/202405-internal-audit-immutable-signed-zone-v2.pdf b/audits/trading/202405-internal-audit-immutable-signed-zone-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..84299495f62e5725a1f1b3c034893c33eda3abd1 GIT binary patch literal 134947 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

s&(2E}u026` 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 literal 0 HcmV?d00001 diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol index b22dd795..5d79556b 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2 // solhint-disable-next-line compiler-version -pragma solidity ^0.8.20; +pragma solidity 0.8.20; import {AccessControlEnumerable} from "openzeppelin-contracts-5.0.2/access/extensions/AccessControlEnumerable.sol"; import {ECDSA} from "openzeppelin-contracts-5.0.2/utils/cryptography/ECDSA.sol"; @@ -22,6 +22,10 @@ import {SIP7Interface} from "./interfaces/SIP7Interface.sol"; * @notice ImmutableSignedZoneV2 is a zone implementation based on the * SIP-7 standard https://github.com/ProjectOpenSea/SIPs/blob/main/SIPS/sip-7.md * implementing substandards 3, 4 and 6. + * + * The contract is not upgradable. If the contract needs to be changed a new version + * should be deployed, and the old version should be removed from the Seaport contract + * zone allowlist. */ contract ImmutableSignedZoneV2 is ERC165, @@ -397,10 +401,14 @@ contract ImmutableSignedZoneV2 is uint256 startIndex = 0; uint256 contextLength = context.length; + // The ImmutableSignedZoneV2 contract enforces at least + // one of the supported substandards is present in the context. + if (contextLength == 0) { + revert InvalidExtraData("invalid context, no substandards present", zoneParameters.orderHash); + } + // Each _validateSubstandard* function returns the length of the substandard // segment (0 if the substandard was not matched). - - if (startIndex == contextLength) return; startIndex = _validateSubstandard3(context[startIndex:], zoneParameters) + startIndex; if (startIndex == contextLength) return; diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v2/README.md b/contracts/trading/seaport/zones/immutable-signed-zone/v2/README.md index 13863d78..368fd0a6 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v2/README.md +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v2/README.md @@ -13,7 +13,7 @@ Contract threat models and audits: | Description | Date | Version Audited | Link to Report | | ------------------------------- | ---- | --------------- | -------------- | -| Not audited and no threat model | - | - | - | +| Not audited and no threat model | 2024-05-02 | V2 | - ../../../audits/trading/202405-internal-audit-immutable-signed-zone-v2.pdf | ## ImmutableSignedZoneV2 @@ -46,4 +46,18 @@ The sequence of events is as follows: 2. The client calls `fulfillAdvancedOrder` or `fulfillAvailableAdavancedOrders` on `ImmutableSeaport.sol` to fulfill an order 3. `ImmutableSeaport.sol` executes the fufilment by transferring items between parties 4. `ImmutableSeaport.sol` calls `validateOrder` on `ImmutableSignedZoneV2.sol`, passing it the fulfilment execution details as well as the `extraData` parameter - 1. `ImmutableSignedZoneV2.sol` validates the fulfilment execution details using the `extraData` payload, reverting if expectations are not met \ No newline at end of file +5. `ImmutableSignedZoneV2.sol` validates the fulfilment execution details using the `extraData` payload, reverting if expectations are not met + +## Differences compared to ImmutableSignedZone (v1) + +The contract was developed based on ImmutableSignedZone, with the addition of: + - SIP7 substandard 6 support + - Role based access control to be role based + +### ZoneAccessControl + +The contract now uses a finer grained access control with role based access with the `ZoneAccessControl` interface, rather than the `Ownable` interface in the v1 contract. A seperate `zoneManager` roles is used to manage signers and an admin role used to control roles. + +### Support of SIP7 substandard 6 + +The V2 contract now supports substandard-6 of the SIP7 specification, found here (https://github.com/immutable/platform-services/pull/12775). A server side signed order can adhere to substandard 3 + 4 (full fulfillment only) or substandard 6 + 4 (full or partial fulfillment). diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol index 19a5c50b..f45c11a2 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2 // solhint-disable-next-line compiler-version -pragma solidity ^0.8.20; +pragma solidity 0.8.20; import {AccessControl} from "openzeppelin-contracts-5.0.2/access/AccessControl.sol"; import {IAccessControl} from "openzeppelin-contracts-5.0.2/access/IAccessControl.sol"; @@ -31,21 +31,21 @@ abstract contract ZoneAccessControl is AccessControlEnumerable, ZoneAccessContro * @inheritdoc AccessControl */ function revokeRole(bytes32 role, address account) public override(AccessControl, IAccessControl) onlyRole(getRoleAdmin(role)) { - super.revokeRole(role, account); - - if (role == DEFAULT_ADMIN_ROLE && super.getRoleMemberCount(DEFAULT_ADMIN_ROLE) == 0) { + if (role == DEFAULT_ADMIN_ROLE && super.getRoleMemberCount(DEFAULT_ADMIN_ROLE) == 1) { revert LastDefaultAdminRole(account); } + + super.revokeRole(role, account); } /** * @inheritdoc AccessControl */ function renounceRole(bytes32 role, address callerConfirmation) public override(AccessControl, IAccessControl) { - super.renounceRole(role, callerConfirmation); - - if (role == DEFAULT_ADMIN_ROLE && super.getRoleMemberCount(DEFAULT_ADMIN_ROLE) == 0) { + if (role == DEFAULT_ADMIN_ROLE && super.getRoleMemberCount(DEFAULT_ADMIN_ROLE) == 1) { revert LastDefaultAdminRole(callerConfirmation); } + + super.renounceRole(role, callerConfirmation); } } diff --git a/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol b/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol index 2cb42bf2..7dabed13 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol +++ b/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol @@ -532,20 +532,45 @@ contract ImmutableSignedZoneV2Test is function test_validateOrder_revertsIfSignerIsNotActive() public { ImmutableSignedZoneV2Harness zone = _newZoneHarness(OWNER); + // no signer added + bytes32 orderHash = bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9); uint64 expiration = 100; - bytes memory extraData = - _buildExtraData(zone, SIGNER_PRIVATE_KEY, FULFILLER, expiration, orderHash, new bytes(0)); + SpentItem[] memory spentItems = new SpentItem[](1); + spentItems[0] = SpentItem({itemType: ItemType.ERC1155, token: address(0x5), identifier: 222, amount: 10}); + + ReceivedItem[] memory receivedItems = new ReceivedItem[](1); + ReceivedItem memory receivedItem = ReceivedItem({ + itemType: ItemType.ERC20, + token: address(0x4), + identifier: 0, + amount: 20, + recipient: payable(address(0x3)) + }); + receivedItems[0] = receivedItem; + + bytes32[] memory orderHashes = new bytes32[](1); + orderHashes[0] = bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9); + + // console.logBytes32(zone.exposed_deriveReceivedItemsHash(receivedItems, 1, 1)); + bytes32 substandard3Data = bytes32(0xec07a42041c18889c5c5dcd348923ea9f3d0979735bd8b3b687ebda38d9b6a31); + bytes memory substandard4Data = abi.encode(orderHashes); + bytes memory substandard6Data = abi.encodePacked(uint256(10), substandard3Data); + bytes memory context = abi.encodePacked( + bytes1(0x03), substandard3Data, bytes1(0x04), substandard4Data, bytes1(0x06), substandard6Data + ); + + bytes memory extraData = _buildExtraData(zone, SIGNER_PRIVATE_KEY, FULFILLER, expiration, orderHash, context); ZoneParameters memory zoneParameters = ZoneParameters({ orderHash: bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9), fulfiller: FULFILLER, offerer: OFFERER, - offer: new SpentItem[](0), - consideration: new ReceivedItem[](0), + offer: spentItems, + consideration: receivedItems, extraData: extraData, - orderHashes: new bytes32[](0), + orderHashes: orderHashes, startTime: 0, endTime: 0, zoneHash: bytes32(0) @@ -556,6 +581,54 @@ contract ImmutableSignedZoneV2Test is zone.validateOrder(zoneParameters); } + function test_validateOrder_revertsIfContextIsEmpty() public { + ImmutableSignedZoneV2Harness zone = _newZoneHarness(OWNER); + bytes32 managerRole = zone.ZONE_MANAGER_ROLE(); + vm.prank(OWNER); + zone.grantRole(managerRole, OWNER); + vm.prank(OWNER); + zone.addSigner(SIGNER); + + bytes32 orderHash = bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9); + uint64 expiration = 100; + + SpentItem[] memory spentItems = new SpentItem[](1); + spentItems[0] = SpentItem({itemType: ItemType.ERC1155, token: address(0x5), identifier: 222, amount: 10}); + + ReceivedItem[] memory receivedItems = new ReceivedItem[](1); + ReceivedItem memory receivedItem = ReceivedItem({ + itemType: ItemType.ERC20, + token: address(0x4), + identifier: 0, + amount: 20, + recipient: payable(address(0x3)) + }); + receivedItems[0] = receivedItem; + + bytes32[] memory orderHashes = new bytes32[](1); + orderHashes[0] = bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9); + + bytes memory extraData = _buildExtraDataWithoutContext(zone, SIGNER_PRIVATE_KEY, FULFILLER, expiration, orderHash, new bytes(0)); + + ZoneParameters memory zoneParameters = ZoneParameters({ + orderHash: bytes32(0x43592598d0419e49d268e9b553427fd7ba1dd091eaa3f6127161e44afb7b40f9), + fulfiller: FULFILLER, + offerer: OFFERER, + offer: spentItems, + consideration: receivedItems, + extraData: extraData, + orderHashes: orderHashes, + startTime: 0, + endTime: 0, + zoneHash: bytes32(0) + }); + + vm.expectRevert( + abi.encodeWithSelector(InvalidExtraData.selector, "invalid context, no substandards present", zoneParameters.orderHash) + ); + zone.validateOrder(zoneParameters); + } + function test_validateOrder_returnsMagicValueOnSuccessfulValidation() public { ImmutableSignedZoneV2Harness zone = _newZoneHarness(OWNER); bytes32 managerRole = zone.ZONE_MANAGER_ROLE(); @@ -671,8 +744,7 @@ contract ImmutableSignedZoneV2Test is } /* _validateSubstandards */ - - function test_validateSubstandards_emptyContext() public { + function test_validateSubstandards_revertsIfEmptyContext() public { ImmutableSignedZoneV2Harness zone = _newZoneHarness(OWNER); ZoneParameters memory zoneParameters = ZoneParameters({ @@ -688,6 +760,12 @@ contract ImmutableSignedZoneV2Test is zoneHash: bytes32(0) }); + vm.expectRevert( + abi.encodeWithSelector( + InvalidExtraData.selector, "invalid context, no substandards present", zoneParameters.orderHash + ) + ); + zone.exposed_validateSubstandards(new bytes(0), zoneParameters); } @@ -1435,6 +1513,24 @@ contract ImmutableSignedZoneV2Test is ); return extraData; } + + function _buildExtraDataWithoutContext( + ImmutableSignedZoneV2Harness zone, + uint256 signerPrivateKey, + address fulfiller, + uint64 expiration, + bytes32 orderHash, + bytes memory context + ) private view returns (bytes memory) { + bytes32 eip712SignedOrderHash = zone.exposed_deriveSignedOrderHash(fulfiller, expiration, orderHash, context); + bytes memory extraData = abi.encodePacked( + bytes1(0), + fulfiller, + expiration, + _signCompact(signerPrivateKey, ECDSA.toTypedDataHash(zone.exposed_domainSeparator(), eip712SignedOrderHash)) + ); + return extraData; + } } // solhint-enable func-name-mixedcase diff --git a/test/trading/seaport/zones/immutable-signed-zone/v2/README.md b/test/trading/seaport/zones/immutable-signed-zone/v2/README.md index a5dc1cc8..7c59b662 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v2/README.md +++ b/test/trading/seaport/zones/immutable-signed-zone/v2/README.md @@ -50,6 +50,7 @@ Operational function tests: | `test_validateOrder_revertsIfActualFulfillerDoesNotMatchExpectedFulfiller` | Validate order with unexpected fufiller. | No | Yes | | `test_validateOrder_revertsIfActualFulfillerDoesNotMatchExpectedFulfiller` | Validate order with expected *any* fufiller. | Yes | No | | `test_validateOrder_revertsIfSignerIsNotActive` | Validate order with inactive signer. | No | Yes | +| `test_validateOrder_revertsIfContextIsEmpty` | Validate order with an empty context. | No | Yes | | `test_validateOrder_returnsMagicValueOnSuccessfulValidation` | Validate order successfully. | Yes | Yes | Internal operational function tests: @@ -61,7 +62,7 @@ Internal operational function tests: | `test_deriveDomainSeparator_returnsDomainSeparatorForChainID` | Domain separator derivation. | Yes | Yes | | `test_getSupportedSubstandards` | Retrieve Zone's supported substandards. | Yes | Yes | | `test_deriveSignedOrderHash_returnsHashOfSignedOrder` | Signed order hash derivation. | Yes | Yes | -| `test_validateSubstandards_emptyContext` | Empty context without substandards. | Yes | Yes | +| `test_validateSubstandards_revertsIfEmptyContext` | Empty context without substandards should revert. | No | Yes | | `test_validateSubstandards_substandard3` | Context with substandard 3. | Yes | Yes | | `test_validateSubstandards_substandard4` | Context with substandard 4. | Yes | Yes | | `test_validateSubstandards_substandard6` | Context with substandard 6. | Yes | Yes | @@ -98,4 +99,4 @@ All of these tests are in [test/trading/seaport/ImmutableSeaportSignedZoneV2Inte | `test_fulfillAdvancedOrder_withCompleteFulfilment` | Full fulfilment. | Yes | Yes | | `test_fulfillAdvancedOrder_withPartialFill` | Partial fulfilment. | Yes | Yes | | `test_fulfillAdvancedOrder_withMultiplePartialFills` | Sequential partial fulfilments. | Yes | Yes | -| `test_fulfillAdvancedOrder_withOverfilling` | Over fulfilment. | Yes | Yes | \ No newline at end of file +| `test_fulfillAdvancedOrder_withOverfilling` | Over fulfilment. | Yes | Yes |