Quadrata Passport - Audit (Addendum)

CertiKFiles named in the report

CertiK reviewed Quadrata (Quadrata Passport - Audit (Addendum)) on 3 Jul 2023: 11 findings, 0 critical; 3 marked fixed, 8 acknowledged.

No open critical findings
Open the reportOpen Quadrata’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings11

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High010
Medium031
Low042
MediumIncomplete signature verification in `_setAttribuFixed

```solidity bytes32 extractionHash = keccak256( abi.encode( _account, _config.attrKeys, _config.attrValues, _config.did, _config.verifiedAt, _config.issuedAt, _config.fee, block.chainid, address(this) ) ); ``` The `_setAttributesVerify()` function in the contract verifies a signature based on a specific set of input parameters. However, the `_config.tokenId` and `_config.attrTypes` variables are not included in the signature verification process. This could potentially allow an attacker to exploit the vulnerability and mint a token with an unexpected tokenId or assign `attrValues` in an unexpected order corresponding to `attrTypes`.

LowInaccurate `issuedAt` value returned in `attributFixed

The `attributeMetadata()` function is used to return the `issuedAt` variable of an attribute. ```solidity issuedAts[attributeIndex] = attribute.epoch; ``` However, in the `_setAttributesInternal()` function where the attribute is written, the `epoch` variable is actually the `verifiedAt` variable. As a result, the `attributeMetadata()` function may return an inaccurate `issuedAt` value. ```solidity _writeAttrToStorage( _computeAttrKey(_account, ATTRIBUTE_DID, _config.did, _issuer), _config.did, _config.verifiedAt); ```

LowIncorrect CommentsFixed

```solidity @param _attrKey attribute key (i.e. keccak256(address, keccak256("AML"))) ``` The comment of the function `_writeAttrToStorage()` is incorrect, an example of the attribute key is `keccak256(address, keccak256("AML"), address)`. The `setAttributesIssuer()` function is named and commented to imply that it should only be called by authorized issuers. However, it can be called by anyone.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (5)

  • contracts/QuadGovernance.sol
  • contracts/QuadReader.sol
  • contracts/storage/QuadPassportStoreV2.sol
  • contracts/QuadPassport.sol
  • contracts/storage/QuadGovernanceStoreV2.sol

Part of Quadrata’s security record

Quadrata
Audits3 audits by 2 firmsLast audit Jul 2023, by CertiK.
Critical findingsNo open critical findingsAcross 3 reports.
Open Quadrata’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us