Reactive Network

QuillAuditsFiles named in the report

Audit · firm’s term: audit report

QuillAudits reviewed Reactive Network on 11 Feb 2025: 5 findings, 0 critical; 3 marked fixed, 2 open.

No open critical findings
Open the reportOpen Reactive Network’s security record

Report hosted on quillaudits.com.

Trustblock does not review code.

Findings5

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

SeverityOpenAcknowledgedFixed
Critical000
High002
Medium101
Low100
HighDenial of Service via Incorrect Message Status Update in Rejection HandlingFixed

The _processRejection function is responsible for handling message rejections on the destination chain. If the condition holds, the function updates the message status to MessageStatus.REJECTED and subsequently calls _rejectDelivery(id). However, _rejectDelivery(id) checks whether its status is MessageStatus.DELIVERING. If the condition is met, the function updates the message status to MessageStatus.REJECTED and calls _sendDeliveryRejection(id).  The issue occurs because _processRejection modifies the message status to MessageStatus.REJECTED before _rejectDelivery(id) executes. Since _rejectDelivery explicitly requires the message status to be MessageStatus.DELIVERING, the require condition fails, causing the transaction to revert. This results in a denial of service (DoS), preventing the rejection from being processed successfully.

HighIncorrect Event Subscription Leading to Unprocessed Failed TransactionsFixed

In the current bridge implementation, event subscription is critical for ensuring that the bridge can listen for and process specific event topics. The contract subscribes to various event topics such as SEND_MESSAGE_TOPIC, CANCEL_MESSAGE_TOPIC, RETRY_TOPIC, DELIVERED_TOPIC, FAILED_TOPIC, and others to ensure that all relevant transactions are properly handled.However, an issue has been identified in the subscription logic where the REJECTION_TOPIC has been mistakenly subscribed to twice instead of subscribing to the FAILED_TOPIC. The affected code snippet is as follows: As a result of this incorrect subscription, events emitted with the FAILED_TOPIC will not be captured by the bridge. This leads to a failure in handling failed transactions, as the necessary logic to process and recover funds from failed transactions will not be executed. Consequently, affected users may permanently lose their funds, as the system fails to recognize and act upon failed transaction events

MediumLack of Bounds on Fees in AbstractFeeCalculatorFixed

The AbstractFeeCalculator contract implements a fee calculation mechanism using a fixed fee (fixed_fee) and a percentage-based fee (perc_fee). The fees are initialized via the constructor and used in the _computeFee function to determine the total fee applied to a given amount. Fees will be collected on the destination bridge once the delivery occurs. However, there are no constraints on the values of fixed_fee and perc_fee, which introduces several risks. If fixed_fee or perc_fee is set too high, users may be charged excessive fees upon message delivery, potentially making transactions infeasible.

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 (9)

  • src/AbstractDispenser.sol
  • src/AbstractBridgehead.sol
  • src/BridgeLib.sol
  • Bridge.sol
  • src/ReactiveBridge.sol
  • src/Bridge.sol
  • src/AbstractFeeCalculator.sol
  • ReactiveBridge.sol
  • AbstractBridgehead.sol

Part of Reactive Network’s security record

Reactive Network
Audits1 audit by 1 firmLast audit Feb 2025, by QuillAudits.
Critical findingsNo open critical findingsIn 1 report.
Open Reactive Network’s security record

Security firm

QuillAudits

350 projects reviewed · 459 reports · latest Apr 2025

See QuillAudits’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