GCVE-1988-2026-0155
Vulnerability from gna-1988 – Published: 2026-09-07 13:20 – Updated: 2026-09-11 08:13
VLAI
EPSS
VEX
Title
[NotCVE-2026-0011] Nmap 7.99 and Earlier nselib/packet.lua Zero-Length TCP Option Infinite Loop Allows Remote Denial of Service
Summary
----------------------------------------------------------------------------
NotCVE Advisory — NotCVE-2026-0011
----------------------------------------------------------------------------
[-] Summary:
Nmap 7.99 and earlier contain a loop with an unreachable exit condition in
the Packet:parse_options() method of nselib/packet.lua. A remote host that
is the target of a scan can exhaust the memory of the scanning Nmap process
and terminate it by replying with a packet that carries a zero-length header
option. No authentication and no access to the scanning machine are
required: the attacker only needs to be scanned.
CVSS:3.1 6.5 (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H).
[-] Affected:
Nmap, versions 7.99 and earlier (nselib/packet.lua).
Fixed in commit 7ef4ee0 (2026-06-11). That fix sits above the topmost
release header in the CHANGELOG (Nmap 7.99 [2026-03-26]), so as of this
writing it is present only in the development tree and no released version
carrying it has been verified.
[-] Technical Description:
Packet:parse_options(offset, length) walks the option area with a cursor,
opt_ptr, reading an option type t and, for any type other than 0 (End of
Option List) or 1 (No-Operation), a length byte l taken from
self:u8(offset + opt_ptr + 1). The cursor is then advanced by
opt_ptr = opt_ptr + l.
Before commit 7ef4ee0 the parser accepted l == 0 without validation, so the
cursor never advanced and the "while opt_ptr < length" condition never
became false. Because the loop body allocated a fresh table with
options[op] = {} and incremented op on every pass, the non-terminating loop
also grew a table without bound, and the Lua interpreter embedded in Nmap
consumed memory until the process died. The options[op] = {} assignment was
positioned before the length was validated, which is why the loop allocated
rather than merely spinning.
The method is reached from tcp_parse(), where the option area length derives
from the TCP data offset field of the received packet. A remote peer
therefore controls both the length of the option area and its contents.
nselib/packet.lua is the packet-dissection library used by NSE scripts that
capture and parse raw packets, so exploitation requires the operator to run
a scan that loads such a script against a host the attacker controls.
Nothing is persisted and the effect ends with the process, but the attacker
can repeat it on every subsequent scan, so the host remains effectively
unscannable by any script using this library.
Commit 7ef4ee0 ("Stop parsing on a zero-length packet option") adds an
"if l==0 then break end" guard before any allocation and moves the
options[op] = {} initialisation to after that check. The CHANGELOG entry
reads "[NSE][GH#3368] Fixed an out-of-memory issue in packet.lua when
parsing a zero-length TCP header option."
The step-by-step attack path, the reachability analysis of the IP options
code path and the full write-up are published at the advisory URL below.
Weaknesses:
CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')
CWE-400: Uncontrolled Resource Consumption
CWE-770: Allocation of Resources Without Limits or Throttling
CAPEC-130: Excessive Allocation
[-] Timeline:
[28/07/2026] - NotCVE ID reserved.
[28/07/2026] - Published as NotCVE-2026-0011.
[-] Credit:
Discovered by Maxim Suhanov (@errno_fail).
[-] Full Details and Updates:
https://notcve.org/notcve/NotCVE-2026-0011
[-] References:
https://github.com/nmap/nmap/issues/3368
https://github.com/nmap/nmap/commit/7ef4ee030a0023fe22616387a000032e1a678b6a
https://github.com/nmap/nmap/pull/3373
https://raw.githubusercontent.com/nmap/nmap/master/nselib/packet.lua
https://raw.githubusercontent.com/nmap/nmap/master/CHANGELOG
[-] About NotCVE:
NotCVE (https://notcve.org) assigns public, timestamped NotCVE IDs to
vulnerabilities not acknowledged by vendors. Vendor will not assign a CVE?
Request a NotCVE: https://notcve.org/form/ · Contributors:
https://notcve.org/hall/
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
13 references
{
"containers": {
"cna": {
"affected": [
{
"product": "Nmap",
"vendor": "Nmap",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "advisories"
}
],
"descriptions": [
{
"lang": "en",
"value": "----------------------------------------------------------------------------\nNotCVE Advisory \u2014 NotCVE-2026-0011\n----------------------------------------------------------------------------\n\n[-] Summary:\nNmap 7.99 and earlier contain a loop with an unreachable exit condition in\nthe Packet:parse_options() method of nselib/packet.lua. A remote host that\nis the target of a scan can exhaust the memory of the scanning Nmap process\nand terminate it by replying with a packet that carries a zero-length header\noption. No authentication and no access to the scanning machine are\nrequired: the attacker only needs to be scanned.\nCVSS:3.1 6.5 (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H).\n\n[-] Affected:\nNmap, versions 7.99 and earlier (nselib/packet.lua).\nFixed in commit 7ef4ee0 (2026-06-11). That fix sits above the topmost\nrelease header in the CHANGELOG (Nmap 7.99 [2026-03-26]), so as of this\nwriting it is present only in the development tree and no released version\ncarrying it has been verified.\n\n[-] Technical Description:\nPacket:parse_options(offset, length) walks the option area with a cursor,\nopt_ptr, reading an option type t and, for any type other than 0 (End of\nOption List) or 1 (No-Operation), a length byte l taken from\nself:u8(offset + opt_ptr + 1). The cursor is then advanced by\nopt_ptr = opt_ptr + l.\n\nBefore commit 7ef4ee0 the parser accepted l == 0 without validation, so the\ncursor never advanced and the \"while opt_ptr \u003c length\" condition never\nbecame false. Because the loop body allocated a fresh table with\noptions[op] = {} and incremented op on every pass, the non-terminating loop\nalso grew a table without bound, and the Lua interpreter embedded in Nmap\nconsumed memory until the process died. The options[op] = {} assignment was\npositioned before the length was validated, which is why the loop allocated\nrather than merely spinning.\n\nThe method is reached from tcp_parse(), where the option area length derives\nfrom the TCP data offset field of the received packet. A remote peer\ntherefore controls both the length of the option area and its contents.\nnselib/packet.lua is the packet-dissection library used by NSE scripts that\ncapture and parse raw packets, so exploitation requires the operator to run\na scan that loads such a script against a host the attacker controls.\n\nNothing is persisted and the effect ends with the process, but the attacker\ncan repeat it on every subsequent scan, so the host remains effectively\nunscannable by any script using this library.\n\nCommit 7ef4ee0 (\"Stop parsing on a zero-length packet option\") adds an\n\"if l==0 then break end\" guard before any allocation and moves the\noptions[op] = {} initialisation to after that check. The CHANGELOG entry\nreads \"[NSE][GH#3368] Fixed an out-of-memory issue in packet.lua when\nparsing a zero-length TCP header option.\"\n\nThe step-by-step attack path, the reachability analysis of the IP options\ncode path and the full write-up are published at the advisory URL below.\n\nWeaknesses:\nCWE-835: Loop with Unreachable Exit Condition (\u0027Infinite Loop\u0027)\nCWE-400: Uncontrolled Resource Consumption\nCWE-770: Allocation of Resources Without Limits or Throttling\nCAPEC-130: Excessive Allocation\n\n[-] Timeline:\n[28/07/2026] - NotCVE ID reserved.\n[28/07/2026] - Published as NotCVE-2026-0011.\n\n[-] Credit:\nDiscovered by Maxim Suhanov (@errno_fail).\n\n[-] Full Details and Updates:\nhttps://notcve.org/notcve/NotCVE-2026-0011\n\n[-] References:\nhttps://github.com/nmap/nmap/issues/3368\nhttps://github.com/nmap/nmap/commit/7ef4ee030a0023fe22616387a000032e1a678b6a\nhttps://github.com/nmap/nmap/pull/3373\nhttps://raw.githubusercontent.com/nmap/nmap/master/nselib/packet.lua\nhttps://raw.githubusercontent.com/nmap/nmap/master/CHANGELOG\n\n[-] About NotCVE:\nNotCVE (https://notcve.org) assigns public, timestamped NotCVE IDs to\nvulnerabilities not acknowledged by vendors. Vendor will not assign a CVE?\nRequest a NotCVE: https://notcve.org/form/ \u00b7 Contributors:\nhttps://notcve.org/hall/\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-400",
"description": "CWE-400",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-770",
"description": "CWE-770",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-835",
"description": "CWE-835",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-11T08:13:27Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Aug/112"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Aug/112"
},
{
"url": "https://github.com/nmap/nmap/commit/7ef4ee030a0023fe22616387a000032e1a678b6a"
},
{
"url": "https://github.com/nmap/nmap/issues/3368"
},
{
"url": "https://github.com/nmap/nmap/pull/3373"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://notcve.org"
},
{
"url": "https://notcve.org/form/"
},
{
"url": "https://notcve.org/hall/"
},
{
"url": "https://notcve.org/notcve/NotCVE-2026-0011"
},
{
"url": "https://raw.githubusercontent.com/nmap/nmap/master/CHANGELOG"
},
{
"url": "https://raw.githubusercontent.com/nmap/nmap/master/nselib/packet.lua"
},
{
"url": "https://seclists.org/fulldisclosure/"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Aug/112"
],
"discovery": "EXTERNAL"
},
"title": "[NotCVE-2026-0011] Nmap 7.99 and Earlier nselib/packet.lua Zero-Length TCP Option Infinite Loop Allows Remote Denial of Service",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0155",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Aug/112",
"automated": true,
"contentSha256": "526e75db3e65ed78ab707f18bcdbc6de452e1ba09cb695995dc1e4c091bc7ef1",
"evidenceScore": 8,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Aug/112",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-08-19T10:57:53Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-09-07T13:20:22Z",
"dateUpdated": "2026-09-11T08:13:27Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0155"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Loading…
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Loading…
Loading…