A decentralized social network protocol returning data ownership back to users and helping devs build meaningful social experiences.
Low | Medium | High | Critical | Total | |
---|---|---|---|---|---|
Not fixed | 1 | - | 2 | - | 3 |
Fixed | 13 | 2 | - | - | 15 |
Total | 14 | 2 | 2 | 0 | 18 |
not_fixed/high
In the contract `Link3ProfileDescriptor` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and set new animation templates.  --- In the contract `CyberBoxNFT` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and pause/unpause the contract and set a new signer. The new signer can then call `claimBox()` and mint as many boxes as they want.  --- In the contract `Treasury` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and change the treasuryAddress to one they control or alter the value set for the treasury fee.  --- In the contract `PermissionedFeeCreationMw` the role `ENGINE` has authority over the functions shown in the diagram below. Any compromise to the `ENGINE` account may allow the hacker to take advantage of this authority and change the recipient address, the signer address, and all the values for the different fee tiers for a given namespace.  --- In the contract `Owned` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and set new malicious address as the owner of the contract.  --- In the contract `Auth` the role `owner` has authority over the functions shown in the diagram below. Any compromise to the `owner` account may allow the hacker to take advantage of this authority and change the `Authority`.  --- In the contract `ProfileNFT` the role `_namespaceOwner` has authority over the functions shown in the diagram below. Any compromise to the `_namespaceOwner` account may allow the hacker to take advantage of this authority and change the `NFTDescriptor` for the current profile, change the namespace owner, and pause/unpause the state of the contract.  In the contract `ProfileNFT` the modifier `onlyProfileOwner()` gives authority over the function setOperatorApproval(). Any compromise to the profile owner account may allow the hacker to take advantage of this authority and set malicious address as operators for a certain profile. In the contract `ProfileNFT` the modifier `onlyProfileOwnerOrOperator()` gives authority on different functions including: - `registerEssence()` - `setSubscribeData()` - `setEssenceData()` Any compromise to the profile owner or operator account may allow the hacker to take advantage of this authority and register new essences, change the essence/subscribe middleware, and change essences' token URIs. --- In the contract `EssenceNFT` the role `PROFILE` has authority over the functions shown in the diagram below. Any compromise to the `PROFILE` account may allow the hacker to take advantage of this authority and mint new essences for a given profile.  --- In the contract `CyberEngine` the role `_namespaceOwner` has authority over the functions shown in the diagram below. Any compromise to the `_namespaceOwner` account may allow the hacker to take advantage of this authority and change the profile middleware for a given namespace to a malicious one. 
not_fixed/high
`CyberEngine.sol`, `EssenceNFT.sol`, `ProfileNFT.sol`, `SubscribeNFT.sol`, `CyberBoxNFT.sol` and `Link3ProfileDescriptor.sol` are upgradeable contracts, authorized accounts can upgrade these contracts without the community's commitment. If an attacker compromises the account, they can change the implementation of the contract and drain tokens from the contract.
not_fixed/low
The functions `permit()`, `subscribeWithSig()`, `collectWithSig()`, `registerEssenceWithSig()`, `setAvatarWithSig()`, `setOperatorApprovalWithSig()`, `setMetadataWithSig()`, `setSubscribeDataWithSig()`, `setEssenceDataWithSig()`, and `setPrimaryProfileWithSig()` all use the same `nonces` mapping. It may be possible for a user to provide multiple signatures before a function is executed so that they all use the same nonce. This will only allow one of the functions to be called as all the remaining signatures will become invalid when the nonce is incremented.
# | File Name |
---|---|
1 | src/middlewares/subscribe/SubscribeOnlyOnceMw.sol |
2 | src/core/EssenceNFT.sol |
3 | src/interfaces/IProfileDeployer.sol |
4 | src/middlewares/base/PermissionedMw.sol |
5 | src/middlewares/essence/CollectOnlySubscribedMw.sol |
6 | src/middlewares/profile/PermissionedFeeCreationMw.sol |
7 | src/libraries/Actions.sol |
8 | src/libraries/DataTypes.sol |
9 | src/interfaces/IProfileMiddleware.sol |
10 | src/interfaces/IEssenceDeployer.sol |