This is a dress-code violation at the vault door, not a lock that attackers can pick
Tenable plugin 30218 is a configuration/compliance check on Windows Terminal Services / Remote Desktop Services, not a software flaw with a vendor patch. It fires when the host's RDP configuration is not set to FIPS-compliant mode—typically when MinEncryptionLevel is not 4 and the system FIPS policy is not enabled. In practice, that can apply to a broad range of Windows client and server builds wherever RDP is enabled, because the condition is about how RDP is configured, not about a vulnerable version range.
For most enterprises, Tenable's LOW is still generous; the real operational severity is IGNORE in a patch-priority queue unless you are in a formal FIPS boundary. The missing setting does not by itself give an attacker code execution, authentication bypass, or session decryption. Microsoft also recommends avoiding native RDP encryption in favor of SSL/TLS, and current DISA guidance for mainstream Windows hardening emphasizes High encryption for RDP sessions rather than blindly forcing FIPS everywhere.
4 steps from start to impact.
Find an RDP listener with nmap / rdp-enum-encryption
rdp-enum-encryption. This can reveal whether the endpoint supports native RDP security versus TLS-backed negotiation, but it does not prove the host is exploitable.- RDP reachable from the attacker position
- RDP service enabled and answering
- Most enterprises do not intentionally expose broad internal RDP populations to the internet
- The exact FIPS policy state is not reliably derivable from a simple external scan when TLS or negotiation is in use
Confirm the host is not in FIPS mode
MinEncryptionLevel and FIPSAlgorithmPolicy. That is already post-access or privileged validation, not an initial intrusion technique.- Registry or policy visibility on the target
- Knowledge of RDP listener configuration
- This prerequisite already implies internal access or management-plane visibility
- If SSL/TLS is enforced, the plugin condition becomes mostly a compliance interpretation, not a network attack surface
Turn non-FIPS posture into meaningful security impact
- A separate RDP weakness or credential path
- Potentially a MITM or downgrade opportunity depending on configuration
- No known public exploit chain turns 'MinEncryptionLevel != 4' into host compromise by itself
- Modern controls like NLA, TLS, MFA on jump hosts, NGFW policy, and exposure management usually dominate the actual risk
Actual impact is usually audit failure, not breach
- Formal FIPS/CMMC/CJIS/FedRAMP-style requirement, or customer contract that mandates validated crypto
- Outside regulated enclaves, business impact is weak
- There is no vendor patch or version-specific emergency to schedule
The supporting signals.
| In-the-wild status | No evidence of active exploitation as a standalone intrusion vector. This is a configuration/compliance check, not a tracked CVE exploit path. |
|---|---|
| Proof-of-concept availability | No exploit PoC to compromise a host from this condition alone. Enumeration tooling like Nmap rdp-enum-encryption can inspect RDP posture, but that is reconnaissance, not weaponization. |
| EPSS | N/A — no CVE, so no FIRST EPSS record applies. |
| KEV status | N/A — not a CVE and not present in CISA KEV. |
| Vendor score | Tenable marks it Low, manually scored 2.6 with vector AV:N/AC:H/Au:N/C:P/I:N/A:N. That's already soft, but still too security-centric for what is usually a compliance-only issue. |
| Affected scope | Configuration-based, not version-based. Any Windows system with Terminal Services / RDP enabled and not configured for FIPS-compliant RDP operation can trigger the plugin. |
| Fixed version / fix type | No patch version exists. Remediation is a policy/configuration change: set MinEncryptionLevel=4 or enable the Windows FIPS policy *if* your compliance scope requires it. |
| Modern hardening context | Microsoft says native RDP encryption is not recommended versus SSL/TLS, and DISA Windows guidance for RDP session encryption commonly targets High level rather than forcing FIPS in every deployment. |
| Exposure telemetry | Population sizing is poor. Internet telemetry can tell you a host exposes RDP, but not reliably whether this exact FIPS setting is absent, especially when TLS/Negotiate is used. That sharply limits external exploitability claims. |
| Disclosure / source | Tenable plugin published 2008-02-11. This is longstanding hardening/compliance logic, not a newly disclosed software defect. |
noisgate verdict.
The decisive factor is that this finding does not create a practical compromise path by itself; it measures whether RDP is running in a FIPS-validated mode, not whether attackers can break into the box. In real fleets, the true risk is driven by RDP exposure, TLS/NLA posture, and credential controls, not by this single compliance toggle.
Why this verdict
- Requires the wrong problem statement: an attacker does not win by discovering
MinEncryptionLevel != 4; they still need a separate RDP weakness, credential path, or MITM position. - Reachable population is narrower than the plugin implies: the condition is not reliably externally observable when TLS/Negotiate is used, so internet-wide exploit scaling is weak.
- Modern controls dominate the risk: NLA, TLS, MFA on jump hosts, segmentation, and exposure management are what materially change breach probability here—not the FIPS flag.
Why not higher?
There is no public evidence that this setting alone yields remote code execution, auth bypass, or deterministic session compromise. The attack chain needs additional prerequisites that are both environment-specific and usually more important than this finding itself.
Why not lower?
It is still worth recording because some regulated environments genuinely require FIPS-validated operation, and the finding can represent a real audit gap there. Also, if a host is using weak or legacy RDP security settings more broadly, this plugin can be a hint that the RDP baseline deserves review.
What to do — in priority order.
- Enforce TLS and NLA for RDP — Prioritize the controls that change breach likelihood: require TLS-backed RDP where supported, require NLA, and keep RDP behind managed access paths. For an
IGNOREverdict there is no vulnerability SLA action, so handle this as baseline hardening rather than emergency remediation. - Restrict RDP exposure — Limit 3389 to jump hosts, VPN, bastions, or administrative subnets and remove unnecessary direct exposure. This addresses the real attack surface immediately, whereas FIPS-only tuning mostly addresses audit language.
- Route FIPS-only gaps to the compliance owner — If the asset is in a formal FIPS boundary, track this under your configuration-compliance program and validate the exact approved mode required by the platform's security policy. That keeps patch governance focused on exploitable defects while still closing audit findings.
- Turning on Windows FIPS mode everywhere just to silence the plugin; that can create compatibility issues and still does not solve exposed-RDP or stolen-credential risk.
- Treating this as a patching emergency; there is no vendor security patch or version-specific fix to roll out.
- Assuming RDP exposure alone proves this finding is exploitable; the plugin checks a configuration state, not a ready-made remote exploit path.
Crowdsourced verification payload.
Run this on the target Windows host or through your normal remote administration channel, for example: powershell -ExecutionPolicy Bypass -File .\check-rdp-fips.ps1. Standard local read access to the registry is usually enough; administrator rights are only needed if your environment restricts those keys.
# check-rdp-fips.ps1
# Verifies the condition behind Tenable plugin 30218.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
$ErrorActionPreference = 'SilentlyContinue'
function Get-RegDword {
param(
[string]$Path,
[string]$Name
)
try {
$item = Get-ItemProperty -Path $Path -Name $Name -ErrorAction Stop
return [int]$item.$Name
}
catch {
return $null
}
}
$policyTsPath = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services'
$liveTsPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp'
$fipsPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy'
$rdpCorePath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server'
# Prefer policy values when present because they override local settings.
$policyMin = Get-RegDword -Path $policyTsPath -Name 'MinEncryptionLevel'
$liveMin = Get-RegDword -Path $liveTsPath -Name 'MinEncryptionLevel'
$effMin = if ($null -ne $policyMin) { $policyMin } else { $liveMin }
$policySec = Get-RegDword -Path $policyTsPath -Name 'SecurityLayer'
$liveSec = Get-RegDword -Path $liveTsPath -Name 'SecurityLayer'
$effSec = if ($null -ne $policySec) { $policySec } else { $liveSec }
$fipsEnabled = Get-RegDword -Path $fipsPath -Name 'Enabled'
$denyTsConn = Get-RegDword -Path $rdpCorePath -Name 'fDenyTSConnections'
# Helpful labels
$secLabel = switch ($effSec) {
0 { 'RDP' }
1 { 'Negotiate' }
2 { 'SSL/TLS' }
default { 'Unknown/Unset' }
}
Write-Host ('Effective SecurityLayer : {0} ({1})' -f $effSec, $secLabel)
Write-Host ('Effective MinEncryptionLevel: {0}' -f $effMin)
Write-Host ('System FIPS policy enabled : {0}' -f $fipsEnabled)
Write-Host ('RDP connections disabled : {0}' -f $denyTsConn)
# If RDP is disabled, the plugin condition is not operationally relevant.
if ($denyTsConn -eq 1) {
Write-Host 'UNKNOWN - RDP is disabled on this host; plugin applicability is operationally moot.'
exit 2
}
# Tenable-style pass condition: FIPS policy enabled or MinEncryptionLevel explicitly set to 4.
if (($fipsEnabled -eq 1) -or ($effMin -eq 4)) {
Write-Host 'PATCHED - Host is configured for FIPS-compliant RDP operation.'
exit 0
}
# If TLS is enforced and encryption is High or better, the plugin may still fail,
# but the practical risk is compliance-only rather than exploitability.
if (($effSec -eq 2) -and ($effMin -ge 3)) {
Write-Host 'UNKNOWN - TLS/High RDP is configured; not FIPS-compliant by this check, but practical security risk is not demonstrated.'
exit 2
}
Write-Host 'VULNERABLE - Host is not configured for FIPS-compliant RDP encryption per plugin 30218.'
exit 1
If you remember one thing.
IGNORE verdict, and only open a separate hardening/compliance task if the affected systems sit inside a formal FIPS-required enclave; otherwise spend your time on exposed RDP, TLS/NLA enforcement, and credential-path controls instead.Sources
- Tenable Nessus Plugin 30218
- Microsoft Learn - RemoteDesktopServices Policy CSP
- Microsoft Learn - Troubleshoot establishing Terminal Services session
- Microsoft Learn - System cryptography: Use FIPS compliant algorithms
- Microsoft Learn - Windows FIPS 140 validation
- Microsoft Learn - Remote Assistance connection with FIPS encryption issue
- STIG Viewer - Remote Desktop Services encryption level finding
- NIST CSRC - Cryptographic Module Validation Program
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.