This is an unlocked building directory, not an open bank vault
Tenable plugin 26920 flags hosts where SMB will accept an anonymous NULL session to IPC$/named pipes such as browser or spoolss, letting an unauthenticated user pull back host, share, user, group, or password-policy data depending on the server role and policy mix. In practice this is a configuration exposure, not a normal software memory-corruption bug: Tenable maps it broadly to Windows and Samba, and Microsoft documents the behavior as legacy/conditional anonymous access controlled by RestrictNullSessAccess, anonymous pipe/share lists, and related LSA settings rather than a clean product version boundary.
Tenable's HIGH is too hot for most enterprises. The decisive friction is that successful abuse usually requires network reachability to SMB first, which in modern estates means internal access or a badly exposed 445 listener, and the direct impact is typically reconnaissance/information disclosure, not code execution. It becomes more serious on domain controllers or legacy servers where anonymous pipe access leaks domain intel that feeds password spraying and lateral movement, but that is still usually a post-initial-access amplifier, not an initial breach itself.
4 steps from start to impact.
Find reachable SMB
TCP/445 or TCP/139 with nmap, NetExec, or standard SMB negotiation. This is just target selection; no exploit has happened yet.- Target host exposes SMB on a reachable network path
- Firewalling allows the attacker to talk to the SMB service
- Most enterprises do not intentionally expose SMB to the internet
- Internal segmentation, VPN requirements, NAC, and host firewalls cut the reachable population hard
Attempt anonymous session setup
NetExec (nxc smb <ip> -u '' -p ''), smbclient -N, rpcclient -N, or the Windows net use command, the attacker tries to establish an anonymous IPC$ session. Success depends on local policy and whether anonymous access to named pipes or shares is still enabled.- Host allows anonymous session setup to IPC$ or specific named pipes/shares
- Relevant policy and registry settings are permissive
- Modern Windows defaults and hardening baselines often block meaningful anonymous access
- Many null-session findings on scans are legacy corner cases or limited pipe exposure rather than broad anonymous file access
4624 with ANONYMOUS LOGON and share access events such as 5140, especially against IPC$.Enumerate data through exposed pipes
rpcclient, enum4linux, or NetExec query shares, users, groups, SIDs, and password policy through the exposed RPC interfaces. On domain-joined systems, especially DC-adjacent infrastructure, this can give the attacker a cleaner map of identities and trust relationships.- Anonymous token has read-level access to the relevant RPC interfaces or share metadata
- The host role exposes useful information through those interfaces
- Many systems will only reveal limited metadata
- Member servers and workstations usually leak far less strategic value than domain controllers
Turn recon into follow-on intrusion
NetExec, Impacket, or CrackMapExec-style workflows.- Attacker has another access path after recon, such as guessed credentials or an internal foothold
- Environment has weak passwords, reused local admin, or permissive lateral movement paths
- This step requires a second failure elsewhere in the estate
- MFA, tiering, LAPS, and EDR all break the chain after the recon stage
TCP/445 and 139 with host firewall and network segmentation so only approved admin, file, and application paths remain. This directly removes the attacker-position prerequisite; for a MEDIUM verdict there is no mitigation SLA, so fold this into the next hardening cycle and complete within the 365-day remediation window where cleanup is still needed.Network access: Restrict anonymous access to Named Pipes and Shares to enabled, keep Named Pipes that can be accessed anonymously empty unless there is a documented exception, and review anonymous share lists. This is the control that most directly kills the finding at its root; for MEDIUM, there is no mitigation SLA — go straight to the 365-day remediation window.4624 anonymous logons and 5140 access to IPC$, then correlate with repeated RPC enumeration from the same source. This will not remove the weakness, but it raises the cost of abuse while you clean up legacy access paths within the 365-day remediation window.SMB signingalone does not stop anonymous enumeration; it protects message integrity, not whether the server grants an anonymous token in the first place.EDR onlyis not enough because the abuse often looks like ordinary SMB/RPC traffic and may complete before process telemetry on the target becomes useful.Closing internet exposure onlyis insufficient if flat internal networks still let any workstation hit server SMB; this issue is often a lateral-movement enabler after initial access.
The supporting signals.
| In-the-wild status | No current authoritative evidence of active exploitation campaigns was found in the sources reviewed. This issue is a long-lived misconfiguration class that attackers routinely test during recon, but it is not a current headline exploitation driver. |
|---|---|
| KEV status | Not listed in CISA KEV based on the current catalog and searches for CVE-2002-1117. That matters: no government-curated evidence of widespread active exploitation pressure. |
| Proof-of-concept availability | Public tradecraft is trivial and mature: NetExec, rpcclient, smbclient, and older enum4linux workflows all support anonymous SMB/RPC testing. This is easy to verify, but easy does not equal high impact. |
| EPSS | For the mapped legacy CVE, public EPSS reporting shows about 0.66% with roughly 68.9th percentile. That is not zero, but it is nowhere near the profile of routinely weaponized enterprise-takedown bugs. |
| Vendor scoring vs reality | Tenable labels the plugin HIGH and publishes CVSS v3 7.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L). In practice, the real impact is usually confidentiality-only recon with follow-on value, so the vendor baseline overstates day-one blast radius. |
| Affected scope | This is not a neat version-range bug. It affects Windows or Samba hosts configured to permit anonymous SMB/null-session access to IPC$ or specific named pipes/shares; Tenable lists broad windows and samba CPE coverage. |
| Fixed state | There is usually no patch version to chase. The secure state is configuration-based: enable Restrict anonymous access to Named Pipes and Shares, keep anonymous pipe/share lists empty unless explicitly required, and avoid permissive anonymous LSA settings. Microsoft notes different legacy behavior across server generations. |
| Exposure reality | Do not mistake 'host answers on 445' for 'host is exploitable via null session.' The reachable population is already narrowed by SMB exposure, and the exploitable population is narrowed again by anonymous-access policy. That compounding friction is the main reason this lands at MEDIUM. |
| Disclosure / age | This is old. Tenable lists vulnerability publication back to 1999-07-14 and maps one related legacy CVE published 2002-10-04. Old bugs still matter when the misconfiguration survives, but age plus mature mitigations lower surprise factor. |
| Research / tracking | Tracked by Tenable under plugin 26920, historically linked to CVE-1999-0519, CVE-1999-0520, and CVE-2002-1117. Microsoft documentation is the best source for what modern Windows will and will not actually expose anonymously. |
Sources.
- Tenable Nessus Plugin 26920
- Tenable CVE-2002-1117 record
- NVD CVE-2002-1117
- Microsoft Learn - IPC$ share and null session behavior in Windows
- Microsoft Learn - Restrict anonymous access to Named Pipes and Shares
- Microsoft Learn - Named Pipes that can be accessed anonymously
- NetExec Wiki - Enumerate Null Sessions
- CISA Known Exploited Vulnerabilities Catalog
Why this verdict
- Requires SMB reachability first: unauthenticated remote sounds scary, but in real estates
445is usually internal-only or segmented, which sharply reduces the reachable population. - Implies prior foothold in many environments: if an attacker must already be on the LAN/VPN or pivoted into a server segment, the bug is no longer an initial-access problem; it is a recon booster after compromise.
- Impact is narrower than vendor CVSS suggests: the null session itself usually yields enumeration data, not direct code execution or privilege escalation. You need a second weakness to cash out that intel.
- Modern controls should break later steps: LAPS, MFA, segmentation, EDR, and spray detection all sit between anonymous enumeration and actual host takeover.
- Still worth fixing on identity infrastructure: on domain controllers or legacy member servers with permissive anonymous pipes, the leaked identity and policy data can materially improve password spraying and lateral movement.
Why not higher?
This is not a broadly reliable one-packet compromise. Real exploitation typically needs internal network access, SMB reachability, and a host role/configuration that actually returns useful anonymous data. Even after success, the attacker usually gets reconnaissance, not immediate system control.
Why not lower?
It is still unauthenticated network exposure and the tradecraft is commodity-level simple. On the wrong asset class, especially a DC or legacy server with permissive anonymous RPC exposure, the intel leak materially reduces attacker effort for the next stage.
Crowdsourced verification payload.
Run this on the target Windows host from an elevated PowerShell session so it can read the relevant registry keys. Invoke it as powershell.exe -ExecutionPolicy Bypass -File .\check-nullsession.ps1; local administrator is recommended. This is a configuration triage check, not a live exploit test.
# check-nullsession.ps1
# Purpose: Triage whether a Windows host is likely vulnerable to SMB NULL session exposure.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
$ErrorActionPreference = 'Stop'
function Get-RegValue {
param(
[string]$Path,
[string]$Name
)
try {
$item = Get-ItemProperty -Path $Path -Name $Name -ErrorAction Stop
return $item.$Name
}
catch {
return $null
}
}
try {
$lanmanPath = 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters'
$lsaPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa'
$restrictNullSessAccess = Get-RegValue -Path $lanmanPath -Name 'RestrictNullSessAccess'
$nullSessionPipes = Get-RegValue -Path $lanmanPath -Name 'NullSessionPipes'
$nullSessionShares = Get-RegValue -Path $lanmanPath -Name 'NullSessionShares'
$everyoneIncludesAnon = Get-RegValue -Path $lsaPath -Name 'EveryoneIncludesAnonymous'
$restrictAnonymous = Get-RegValue -Path $lsaPath -Name 'RestrictAnonymous'
$service = Get-Service -Name 'LanmanServer' -ErrorAction SilentlyContinue
if (-not $service) {
Write-Output 'UNKNOWN - Server service (LanmanServer) not found'
exit 2
}
# Normalize multi-string values
if ($nullSessionPipes -isnot [System.Array] -and $nullSessionPipes) {
$nullSessionPipes = @($nullSessionPipes)
}
if ($nullSessionShares -isnot [System.Array] -and $nullSessionShares) {
$nullSessionShares = @($nullSessionShares)
}
$reasons = @()
$unknown = @()
if ($restrictNullSessAccess -eq $null) {
$unknown += 'RestrictNullSessAccess missing'
} elseif ([int]$restrictNullSessAccess -ne 1) {
$reasons += 'RestrictNullSessAccess is not enabled (expected 1)'
}
if ($nullSessionPipes -and $nullSessionPipes.Count -gt 0) {
$reasons += ('Anonymous named pipes configured: ' + ($nullSessionPipes -join ', '))
}
if ($nullSessionShares -and $nullSessionShares.Count -gt 0) {
$reasons += ('Anonymous shares configured: ' + ($nullSessionShares -join ', '))
}
if ($everyoneIncludesAnon -ne $null -and [int]$everyoneIncludesAnon -eq 1) {
$reasons += 'EveryoneIncludesAnonymous is enabled'
}
if ($restrictAnonymous -eq $null) {
$unknown += 'RestrictAnonymous missing'
} elseif ([int]$restrictAnonymous -lt 1) {
$reasons += 'RestrictAnonymous is permissive (< 1)'
}
if ($reasons.Count -gt 0) {
Write-Output ('VULNERABLE - ' + ($reasons -join '; '))
exit 1
}
if ($unknown.Count -gt 0) {
Write-Output ('UNKNOWN - ' + ($unknown -join '; ') + '. No explicit insecure settings found, but the registry state is incomplete for a confident verdict.')
exit 2
}
Write-Output 'PATCHED - Anonymous pipe/share access appears restricted and no permissive null-session settings were found'
exit 0
}
catch {
Write-Output ('UNKNOWN - ' + $_.Exception.Message)
exit 2
}