BTC80 132▼ 1,09%ETH2 324▼ 1,05%SOL100,33▼ 1,71%XRP1,29▼ 2,13%BNB740,63▼ 2,32%
🇬🇧 cryptoslate Добавлено: 28.10.2026 08:42 Liam 'Akiba' Wright

Bitcoin apps risk massive fee drain, and 2 library bugs are blamed

Тональность: Нейтральная
Фактичность: Подтверждено
Полезность: 90%
Фокус: Смешанное
Эмоции: Неопределённость 20%

Краткое содержание

  1. В уведомлениях от 26 октября библиотека Bitcoinjs-lib сообщает об исправлениях, связанных с расчетом комиссий, в версиях 5.2.2, 6.1.9 и 7.0.4 для соответствующих веток разработки.
  2. Конфликтующие или отсутствующие записи о значениях входных данных могут приводить к занижению комиссий майнеров и нарушению механизмов защиты, когда приложения доверяют расчетам уязвимой библиотеки.
  3. Фактические потери возможны только в случае авторизованной и действительной транзакции, которая была отправлена и принята; разработчикам следует обновить библиотеку или самостоятельно проверять значения входных данных.

Bitcoinjs-lib, библиотека, используемая для создания приложений для работы с биткоином, устранила две ошибки, из-за которых программное обеспечение может занижать комиссию майнера для действительной транзакции, если она будет отправлена и принята.

В уведомлениях от 26 октября об уязвимостях в системе безопасности сообщается об исправлениях в версиях 5.2.2, 6.1.9 и 7.0.4 для соответствующих веток разработки.

Затронутый формат — частично подписанная транзакция биткоина (PSBT), и BIP 174 определяет ее как способ передачи информации о транзакциях и подписей между клиентами. Подписание, объединение подписей, завершение обработки входных данных и извлечение транзакции — это отдельные функции, даже если одно приложение выполняет несколько из них.

Риск касается приложений, которые импортируют эти пакеты и доверяют расчетам комиссий или механизмам защиты от чрезмерных комиссий в bitcoinjs-lib, не проверяя самостоятельно выходные данные. Разработчикам необходимо проверить версию используемой библиотеки и способ проверки импортированных PSBT.

Почему действительные подписи могут сопровождаться вводящими в заблуждение комиссиями

Комиссия за транзакцию биткоина — это разница между стоимостью входных и выходных данных, поэтому занижение значения входных данных приводит к тому, что рассчитанная комиссия кажется меньше.

В первой ошибке при подписании и расчете комиссии могут использоваться разные значения для одних и тех же входных данных. При подписании используется полная предыдущая транзакция, а при расчете комиссии предпочтение отдается конфликтующей записи, содержащей меньшее значение. В результате уязвимое программное обеспечение может авторизовать реальную транзакцию, оценивая при этом неверную комиссию.

В уведомлении описывается демонстрация в bitcoinjs-lib 7.0.1, в которой фактическая комиссия составляла 900 000 000 сатоши, но библиотека сообщала о 200 сатоши. Подпись была подтверждена, и извлечение данных прошло без стандартного предупреждения о размере комиссии.

Второе уведомление описывает завершенные входные данные, в которых отсутствуют обе записи о значениях входных данных. Калькулятор считает эти входные данные равными нулю, и уже подписанная PSBT, импортированная от другой стороны, может использовать эти данные без необходимости выполнения дополнительной операции подписи.

В гипотетическом примере фактическая комиссия составляет 91 000 сатоши, но сообщается о комиссии в 1000 сатоши. Одних только завершенных сценариев и подписей недостаточно для определения значения отсутствующих входных данных.

Hypothetical Bitcoin library bitcoinjs-lib example: a finalized PSBT with missing input-value records produces a reported fee of 1,000 satoshi against a true fee of 91,000 satoshi. Patched versions require a value for every input during fee calculation. В библиотеке bitcoinjs-lib обнаружена уязвимость, из-за которой отсутствующие значения входных данных PSBT могут интерпретироваться как ноль, что приводит к сокрытию значительно большей комиссии; в обновленных версиях теперь требуется указание каждого значения.

Для того чтобы произошла реальная потеря средств, необходимо, чтобы авторизованная и действительная транзакция была отправлена в сеть и принята ею. Данные недостатки не приводят к созданию подписей, а избыточное значение превращается в комиссию для майнера.

В случае противоречивых записей, затронуты следующие версии: 5.2.0–5.2.1, 6.0.0–6.1.8, включая 6.1.0-rc.0, и 7.0.0-rc.0–7.0.3. Уязвимость, связанная с отсутствием записей, затрагивает те же диапазоны версий v6 и v7, а также версии 5.1.0–5.2.1 в линейке v5.

Исправление предоставляет общий метод для подписи и учета, который позволяет разрешать предыдущие выходные данные, отклоняет противоречивые значения или скрипты и требует указания суммы для каждого входного значения при расчете комиссии. Кроме того, он очищает кэшированные комиссии и извлеченные транзакции после внесения соответствующих изменений или комбинаций метаданных.

Пользователям, которые не могут обновить версию, следует самостоятельно проверить указанные значения выходных данных. Перед подписанием или использованием комиссий следует отклонять противоречивые записи, а также проверять каждое входное значение перед использованием комиссий или извлечением транзакции.

Контекст статьи.

Упоминания

Организации