Pre-auditThree days of senior audit time for $1,500, credited in full toward your Zealynx audit.3 audit days, credited toward your auditSee how →
M-08·

Weak signature validation allows multiple option mispricing vectors

Not reportedoptionsleverageblack-scholes
TL;DR

The protocol's signature validation mechanism enables option mispricing through period manipulation and stale signatures:

Severity
MEDIUM
Method
MManual review
CAT.
02Section · Severity

Severity

Impact: Medium

Likelihood: Medium

03Section · Description

Description

The protocol's signature validation mechanism enables option mispricing through period manipulation and stale signatures:

  1. Period and Maturity Mismatch
solidity
function _hash(...) internal pure returns (bytes32) {
@> return keccak256(abi.encode(iv, uAsset, oType, maturityDate, relativeStrike));
}
function iv(uint48 period, OptionType oType, uint256 strikePrice) external view returns (uint256 value) {
@> value = _ivValues[period][oType][strikePrice]; // IV is queried based on `period`, `oType` and `strikePrice`
}
  1. Missing Signature Deadline
solidity
function _recoverSigner(...) internal view returns (address) {
@> address recoveredSigner = _recoverSigner(sig, iv, strategy, period._computeMaturityDate(), relativeStrike);
}

This enables two primary attack vectors:

  1. Period Manipulation
  • User requests signature for a 14-day period on April 3 (maturity: April 17 23:59).
  • On April 10, the user executes the option with a 7-day period (maturity: April 17 23:59, results in the same maturity).
  • The process validates this position with IV intended for a 14-day period, mispricing the option.
  1. Stale Strike Price
  • User requests signature for a 10% relative strike at a spot price 3500 USD(strike = 3850 USD).
  • User waits until the market moves to some spot price, ie 4200 USD (new strike = 4620 USD).
  • User executes the option with a stale signature, still using the IV for strike 3850 USD.
  • The protocol applies an outdated IV, mispricing the option.
04Section · Recommendation

Recommendation

Include all critical parameters and enforce signature expiration validation:

diff
function _hash(...) internal pure returns (bytes32) {
return keccak256(abi.encode(
iv,
uAsset,
oType,
+ period,
maturityDate,
relativeStrike,
+ deadline
));
}
05Section · Report provenance

Report provenance

Published by Pashov Audit Group, with Carlos (Bloqarl) participating as a contractor. The source report states that its fixes review was not fully completed; no final remediation disposition is recorded for this finding. Read the full report.

M-08