Уязвимость в SDK x402 позволяла вредоносным API опустошать кошельки ИИ-агентов
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
Комментарии
Войдите, чтобы комментировать.