Уязвимость в SDK x402 позволяла вредоносным API опустошать кошельки ИИ-агентов

· Безопасность
Исследователи V12 сообщили, что до августовских обновлений клиент x402 не ограничивал сумму платежа — и агент мог подписать перевод всего своего баланса по запросу злонамеренного сервиса.

cover.svg

22 октября компания V12 рассказала об уязвимости в SDK протокола x402, с помощью которого программы, включая ИИ-агентов, оплачивают обращения к API прямо внутри веб-запроса, без подтверждения каждого платежа человеком.

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

Как это работало

Сервер, требующий оплаты, отвечает кодом 402 Payment Required и перечисляет варианты: сумму, токен и получателя. Клиент по умолчанию брал первый вариант из списка и подписывал платёж. Враждебный API мог превратить обычный запрос данных в требование перевести весь баланс кошелька по поддерживаемому токену — предварительный небольшой платёж раскрывал адрес, и сервер мог заранее узнать баланс. Для токенов с подписанными переводами злоумышленник затем отправлял подпись и забирал средства.

Это лишь одна из 25 найденных V12 ошибок и одна из трёх, отнесённых к критическим. Все три уже были исправлены в релизах от 18 августа.

Ещё две критические ошибки

Вторая позволяла фасилитатору — сервису, проверяющему платежи, — принять транзакцию Solana, не перемещающую токены, как действительную оплату. Код проверял вызов разрешённой программы токена, но не тип инструкции, а одобрение расходов отличается от перевода лишь первым байтом. В локальном тесте фасилитатор принял такое одобрение; V12 назвала это «полным обходом оплаты». Уязвимым был только TypeScript-SDK.

Третья касалась механизма входа Sign-In-With-X: клиент подписывал сообщение входа, не проверяя, относится ли указанный в нём сайт к тому, с которым он связался. Вредоносный сервер мог подсунуть агенту сообщение от другого сайта и войти туда от имени его кошелька.

Исправления и молчание

Релизы от 18 августа добавили контроль расходов в клиенты TypeScript, Python и Go: по умолчанию каждый платёж ограничен одним долларом и разрешены только распознаваемые стейблкоины вроде USDC. Для Solana добавлена проверка типа инструкции, для входа — сверка сайта.

Фонд x402, которому Coinbase передала стандарт в этом году (проект Linux Foundation с участием Visa и Mastercard), не опубликовал бюллетень безопасности. Changelog упоминают исправления, не называя их исправлениями уязвимостей. По данным The Hacker News, ни npm audit, ни PyPI не показывали предупреждений для последних версий до фикса — разработчик, полагающийся на эти проверки, не получал сигнала к обновлению.

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


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.