@ramilmust
Вы подделываете подписи, не так ли?
Уязвимости класса Signature Replay Vulnerabilities, SVR
Сегодня обзорный пост на виды уязвимостей, использующих подделку/повторное использование подписи
В ноябре 2025 вышла статья "One Signature, Multiple Payments: Demystifying and Detecting
Signature Replay Vulnerabilities in Smart Contracts" от коллектива авторов из Китая. Статья достаточно короткая, но любопытная
В ней авторы приводят классификацию уязвимостей, связанных с подписями, а так же презентуют свой аналитический инструмент на основе LLM, получивший название LASiR и демонстрирующий впечатляющие результаты. Я сегодня сосредоточусь на классификации
Всего выделяют 5 видов уязвимостей:
1. Межсетевая атака повторного воспроизведения (Cross-chain Replay Attack, X-CRA).
Возникает из-за отсутствия проверки идентификатора блокчейна (Blockchain ID) в сообщении подписи. Это позволяет атакующему взять валидную подпись из одной сети и использовать её для авторизации той же операции в другой сети, если там развернут аналогичный контракт. Это ведет к несанкционированному списанию активов сразу в нескольких сетях
2. Межпроектная атака повторного воспроизведения (Cross-project Replay Attack, X-PRA).
Если в подписи не проверяется адрес самого контракта (address(this)), подпись, созданная для одного проекта, может быть повторно использована в другом проекте с тем же кодом или в форке оригинального проекта
3. Повторное использование подписи контрактного аккаунта (Contract Account Signature Replay, CASR): Эта уязвимость касается подписей, созданных смарт-контрактами (стандарт EIP-1271). Если при проверке не контролируется адрес конкретного контрактного аккаунта, одна и та же подпись может быть валидирована разными аккаунтами одного и того же владельца. Это создает риск потери активов из-за возможности манипулирования несколькими идентичностями
4. Проблемы управления состоянием подписи (Signature State Management Issue, SSMI).
Возникает, когда в контракте отсутствует механизм отслеживания того, была ли подпись уже использована, следить можно через nonce или реестр использованных хешей. В результате злоумышленник может отправить одну и ту же транзакцию многократно
5. Атака на пластичность подписи (Signature Malleability Attack, SMA).
Алгоритм ECDSA позволяет изменять параметры подписи (v, r, s) таким образом, что получается новая валидная подпись для того же самого сообщения. Если контракт не ограничивает диапазоны этих значений, злоумышленник может создать «двойника» подписи и обойти защиту от повторного использования, даже если в контракте есть проверка хеша оригинальной подписи
Да, этот вид атак не входит в топ 10 (https://t.me/web3securityresearch/70), но как по мне, то это значит только то, что на них могут обращать меньше внимания.
При этом X-CRA и X-PRA виды неактуальны, если ваш контракт развернут в одной сети и у него нет форков. Если вы используете ESDCA от OpenZeppellin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/ECDSA.sol), то получаете защиту от SMA "из коробки"
А вот избежать SSMI и CASR поможет только внимательная реализация
Важно понимать, что атаки SRV класса актуальны для любых смарт-контрактов, где используется подпись для верификации полномочий, а это, например:
- Кроссчейн бриджи
- Мультисиги
- NFT + вайтлисты
- Форки проектов
- Распределение наград
https://t.me/web3securityresearch