← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
tenable:171079 · CWE-843 · Disclosed 2023-02-07

OpenSSL 1

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a sharp blade locked inside three nested cabinets

Tenable plugin 171079 is a bundle finding for OpenSSL 1.1.1 before 1.1.1t. The headline driver is CVE-2023-0286: an X.400 GeneralName type confusion that can expose memory or crash the process, but only when the application enables CRL checking and the attacker can usually supply both the certificate chain and the CRL. The same release also fixed CVE-2022-4304 (RSA timing oracle) plus several mostly crash-grade parsing/API bugs such as CVE-2022-4450 and CVE-2023-0215.

The vendor's HIGH label is technically understandable because OpenSSL is everywhere and the lead CVE crosses a security boundary. In real enterprise deployments, though, the exploitable path is much narrower than the label suggests: uncommon X.400 handling, CRL-specific verification behavior, custom network CRL retrieval, or legacy RSA usage. That makes this a patch-worthy library issue, not a fleet-wide fire drill.

"Real issue, but the dangerous path is gated behind uncommon CRL and legacy RSA conditions."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach a service that actually uses vulnerable OpenSSL 1.1.1 code

The attacker first needs a reachable application linked against OpenSSL 1.1.1s or earlier and exposed over a protocol that lets the peer influence certificate validation or decryption behavior. In practice this is usually a TLS service, mail stack, VPN, middleware appliance, or an app using OpenSSL APIs directly. Tenable detects this mostly through package/version checks, not because the internet can reliably fingerprint libssl minor versions.
Conditions required:
  • Target service is reachable from the attacker's network position
  • The process is actually linked to vulnerable OpenSSL 1.1.1 code
  • The distro/vendor has not already backported the fix
Where this breaks in practice:
  • A lot of enterprise findings are backport false positives when scanners key off upstream version strings
  • Library presence does not mean the vulnerable code path is reachable from the network
Detection/coverage: Good local/package coverage from Nessus and distro advisories; poor internet-scale fingerprinting fidelity for exact OpenSSL library minors.
STEP 02

Force the uncommon validation path for CVE-2023-0286

For the lead High CVE, the attacker needs the application to enable X509_V_FLAG_CRL_CHECK or equivalent CRL processing and then accept attacker-influenced certificate material. Per the OpenSSL advisory, the most realistic case is software with custom functionality for retrieving CRLs over a network. Weaponization here looks more like a custom test harness using openssl s_server/s_client plus crafted X.509 material than a turnkey spray-and-pray exploit.
Conditions required:
  • CRL checking is enabled in the application
  • Attacker can provide the certificate chain and usually the CRL
  • Target path processes X.400 address content in GeneralName
Where this breaks in practice:
  • Most mainstream TLS deployments do not rely on this exact CRL/X.400 combination
  • If the attacker controls only one of the two inputs, the other must already contain an uncommon X.400 CRL distribution point
Detection/coverage: Generic network scanners do not prove this precondition. You need config review, app telemetry, or targeted validation testing.
STEP 03

Alternative path: grind a Bleichenbacher-style timing campaign for CVE-2022-4304

If the target still uses vulnerable OpenSSL RSA decryption paths, an attacker can attempt the RSA timing oracle route with a large-volume request harness and careful latency analysis. OpenSSL explicitly notes that success requires a very large number of trial decryptions to recover plaintext across the network. This is not a one-shot exploit; it is a noisy cryptanalytic campaign against a very specific legacy configuration.
Conditions required:
  • Target exposes RSA decryption behavior reachable across the network
  • Attacker can collect many timing samples with low enough noise
  • Observed traffic or a live session provides useful ciphertext targets
Where this breaks in practice:
  • Modern ECDHE-forward-secret handshakes and TLS defaults cut down applicability
  • Network jitter, rate limits, and load balancers make remote timing attacks hard
  • High query volume is likely to stand out in telemetry
Detection/coverage: Limited signature-style scanner value. Better detected through abnormal handshake volume, repeated failed decryptions, and protocol-specific rate anomalies.
STEP 04

Land impact: mostly memory read or process crash, not turnkey RCE

If the attacker clears those gates, the realistic outcome is process crash/DoS or, in the worst case for CVE-2023-0286, memory disclosure from the affected process. The rest of the bundled bugs are heavily API- and parser-dependent and usually collapse to denial of service. That matters operationally: this bundle is dangerous in the right app, but it is not broadly wormable across 10,000 hosts.
Conditions required:
  • Exploit path reaches the specific vulnerable function
  • The surrounding application behavior does not sanitize or short-circuit the bad input
Where this breaks in practice:
  • Impact often stops at one service process
  • No strong evidence of a reliable mass-exploitation chain for the 1.1.1t bundle
Detection/coverage: EDR and service monitoring should catch repeated crashes/restarts; memory disclosure attempts are harder to prove without app-specific logging.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo solid active exploitation signal found. CVE-2022-4304 is marked Has Public Exploit: No and Has CISA KEV Exploit: No by Wiz; Docker Scout shows Exploits Found: - for CVE-2023-0286.
KEV statusNot in the current CISA KEV catalog for the lead issues in this bundle. Treat this as a broad hygiene patch, not a KEV-driven emergency.
Proof-of-concept availabilityWeak practical PoC signal. There are public advisories, commit diffs, and research writeups, but no authoritative evidence here of a mature, broadly weaponized exploit chain for the 1.1.1t bundle.
EPSSCVE-2023-0286 shows a high EPSS signal in Docker Scout: 0.88452 (99.5th percentile). CVE-2022-4304 is much lower in Wiz: 0.2 (44.9th percentile). For defenders, that mismatch says library prevalence is inflating attention more than reachable enterprise exploitability.
CVSS reality checkLead CVE CVE-2023-0286 is 7.4 / HIGH with CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:H. That AC:H matters; this is not a clean unauthenticated RCE path.
Affected versionsOpenSSL lists CVE-2023-0286 and CVE-2022-4304 as affecting 1.1.1 before 1.1.1t. The bundled Tenable finding also includes additional February 7, 2023 fixes in that same upgrade train.
Fixed versionsUpstream fix is 1.1.1t. Distro backports matter: Ubuntu fixed 20.04 with 1.1.1f-1ubuntu2.17 and 18.04 with 1.1.1-1ubuntu2.1~18.04.21; Red Hat shipped backported fixes via advisory streams rather than requiring an upstream-looking 1.1.1t string.
Exposure/scanning realityInternet-wide search engines are a poor fit here. You generally cannot prove this exact issue with Shodan/Censys/FOFA alone because they see the service banner, not the reachable CRL/X.400 code path inside the linked library.
DisclosureOpenSSL published the advisory on 2023-02-07. CERT-EU summarized it the same day as an 8-bug OpenSSL security update with one High issue.
Reporting researchersThe lead issue CVE-2023-0286 was found by David Benjamin (Google). CVE-2022-4304 was found by Hubert Kario (Red Hat).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.6/10)

The decisive factor is prerequisite friction: the most serious path usually needs CRL checking plus attacker control of certificate material and, in many cases, custom CRL retrieval behavior. That sharply narrows the reachable population compared with a typical network-facing OpenSSL panic bug, so the vendor's HIGH label overstates fleet-level urgency.

HIGH Technical prerequisites for `CVE-2023-0286` are unusually narrow
MEDIUM Real-world exposure across your environment depends on app-specific CRL and RSA usage
MEDIUM Bundle-level risk is dominated by the lead CVE rather than the moderate companion bugs

Why this verdict

  • CRL gate drops the population hard: the lead High bug only becomes interesting when the app enables CRL checking and the attacker can usually feed both the cert chain and CRL. That is a major downward adjustment from the vendor baseline because most enterprise TLS stacks do not expose that path to arbitrary remote peers.
  • AC:H is doing real work here: the 7.4 CVSS is not lying about technical severity, but the high attack complexity maps to real deployment friction. This is not a default-handshake bug that every exposed HTTPS daemon will happily hand to an unauthenticated internet attacker.
  • The second-best path is legacy crypto abuse, not mass exploitation: CVE-2022-4304 needs a Bleichenbacher-style timing campaign, large query volume, and favorable network conditions. Requiring legacy RSA decryption behavior and lots of trial traffic is another explicit downward adjustment.
  • Most of the bundle is crash-grade or API-specific: the other February 7 fixes in 1.1.1t are mostly parser/DoS issues or misuse-prone public API problems. They matter, but they do not justify treating every 1.1.1 < 1.1.1t hit like imminent remote code execution.
  • Ubiquity prevents a LOW: OpenSSL is embedded everywhere, and a few internal PKI, mutual-TLS, VPN, mail, and security products absolutely do use CRLs or brittle certificate parsing paths. That keeps this above backlog noise even after the friction audit.

Why not higher?

There is no strong evidence here of KEV listing, live mass exploitation, or a low-friction unauthenticated RCE path. The attack chain compounds downward: network reachability alone is insufficient, then CRL behavior narrows the population further, and legacy RSA timing attacks narrow it again.

Why not lower?

The lead issue can cross from crash to memory disclosure in the right application, and OpenSSL sits on critical trust boundaries. If you run custom PKI services, mTLS gateways, or products with network CRL retrieval, this bundle is very real even if it is not broadly sprayable.

05 · Compensating Control

What to do — in priority order.

  1. Inventory actual CRL use — Identify which flagged services enable CRL checking or custom CRL retrieval and prioritize those first. For a MEDIUM verdict there is no mitigation SLA — fold this into normal hardening while you work toward the 365-day remediation window.
  2. Disable legacy TLS_RSA where possible — Reduce exposure to the CVE-2022-4304 timing-oracle path by preferring modern forward-secret cipher suites and removing RSA key-exchange dependencies on externally reachable services. For this verdict there is no mitigation SLA, but do it during the same hardening cycle as your patch validation.
  3. Constrain untrusted certificate material — For internal PKI apps, mTLS gateways, S/MIME/CMS processors, and security appliances, restrict who can feed certificate chains, CRLs, PEM, PKCS7, or CMS content into OpenSSL-backed workflows. With MEDIUM severity, use change-control windows rather than emergency blocks.
  4. Restart linked services after package updates — OpenSSL fixes do nothing until processes reload the patched library. When you patch, explicitly restart or roll the services that link against libssl so the remediation actually lands inside the running process set.
What doesn't work
  • A WAF does not meaningfully protect certificate-validation, CRL-processing, or RSA-decryption code paths inside backend services.
  • Pure perimeter exposure counts do not tell you if the vulnerable CRL/X.400 path is reachable; this is configuration- and application-dependent.
  • An SBOM alone is not enough, because distro backports can make an old-looking version string patched or a bundled private OpenSSL copy invisible to OS package inventory.
06 · Verification

Crowdsourced verification payload.

Run this on the target Linux host that Nessus flagged, not from an auditor workstation. Invoke it as sudo bash ./check_openssl_111t.sh or sudo bash ./check_openssl_111t.sh /usr/bin/openssl; root is recommended so it can query package metadata and inspect common library paths.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_openssl_111t.sh
# Purpose: classify OpenSSL 1.1.1 < 1.1.1t findings as VULNERABLE / PATCHED / UNKNOWN
# Notes:
# - Understands upstream OpenSSL versioning for the 1.1.1 line.
# - Includes a few common distro backport checks (Ubuntu 18.04/20.04).
# - For other distro-backported builds, outputs UNKNOWN rather than guessing.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

OPENSSL_BIN="${1:-$(command -v openssl 2>/dev/null || true)}"

say() { printf '%s\n' "$*"; }
fail_unknown() { say "UNKNOWN: $*"; exit 2; }
fail_vuln() { say "VULNERABLE: $*"; exit 1; }
pass_patched() { say "PATCHED: $*"; exit 0; }

if [[ -z "$OPENSSL_BIN" || ! -x "$OPENSSL_BIN" ]]; then
  fail_unknown "openssl binary not found; provide a path, e.g. sudo bash ./check_openssl_111t.sh /usr/bin/openssl"
fi

raw_ver="$($OPENSSL_BIN version 2>/dev/null || true)"
[[ -n "$raw_ver" ]] || fail_unknown "unable to execute openssl version"

# Extract versions like 1.1.1s, 1.1.1t, 3.0.8
ver="$(printf '%s' "$raw_ver" | awk '{print $2}')"
[[ -n "$ver" ]] || fail_unknown "could not parse OpenSSL version from: $raw_ver"

# Compare upstream 1.1.1 letter suffixes.
# Returns numeric ordinal for suffix after 1.1.1 (empty => 0, a => 1, ..., t => 20)
letter_ord() {
  local suffix="$1"
  if [[ -z "$suffix" ]]; then echo 0; return; fi
  local c
  c="${suffix:0:1}"
  printf '%d' "$(( $(printf '%d' "'${c}") - 96 ))"
}

check_upstream_111() {
  local v="$1"
  if [[ "$v" =~ ^1\.1\.1([a-z]?)$ ]]; then
    local sfx="${BASH_REMATCH[1]}"
    local ord
    ord="$(letter_ord "$sfx")"
    # 1.1.1t == 20
    if (( ord >= 20 )); then
      pass_patched "upstream OpenSSL version is $v (>= 1.1.1t)"
    else
      fail_vuln "upstream OpenSSL version is $v (< 1.1.1t)"
    fi
  fi
}

# Handle obvious upstream cases first.
if [[ "$ver" =~ ^3\.|^1\.0\.2|^1\.1\.0|^1\.0\. ]]; then
  fail_unknown "binary reports $ver; this script only verifies the Tenable 1.1.1 < 1.1.1t condition"
fi
check_upstream_111 "$ver"

# Distro package checks for common backports.
if command -v dpkg-query >/dev/null 2>&1; then
  os_release="/etc/os-release"
  distro_id=""
  distro_ver=""
  [[ -r "$os_release" ]] && . "$os_release"
  distro_id="${ID:-}"
  distro_ver="${VERSION_ID:-}"

  pkg_ver="$(dpkg-query -W -f='${Version}' libssl1.1 2>/dev/null || true)"
  if [[ -n "$pkg_ver" ]]; then
    if [[ "$distro_id" == "ubuntu" && "$distro_ver" == "20.04" ]]; then
      dpkg --compare-versions "$pkg_ver" ge "1.1.1f-1ubuntu2.17" && pass_patched "Ubuntu 20.04 libssl1.1 package is $pkg_ver (fixed >= 1.1.1f-1ubuntu2.17)"
      fail_vuln "Ubuntu 20.04 libssl1.1 package is $pkg_ver (< 1.1.1f-1ubuntu2.17)"
    fi
    if [[ "$distro_id" == "ubuntu" && "$distro_ver" == "18.04" ]]; then
      dpkg --compare-versions "$pkg_ver" ge "1.1.1-1ubuntu2.1~18.04.21" && pass_patched "Ubuntu 18.04 libssl1.1 package is $pkg_ver (fixed >= 1.1.1-1ubuntu2.1~18.04.21)"
      fail_vuln "Ubuntu 18.04 libssl1.1 package is $pkg_ver (< 1.1.1-1ubuntu2.1~18.04.21)"
    fi
    fail_unknown "dpkg package libssl1.1 is $pkg_ver; this distro may use backports not encoded in this script"
  fi
fi

if command -v rpm >/dev/null 2>&1; then
  rpm_pkg="$(rpm -q --qf '%{NAME} %{VERSION}-%{RELEASE}\n' openssl 2>/dev/null || true)"
  if [[ -n "$rpm_pkg" ]]; then
    fail_unknown "rpm reports '$rpm_pkg'; use the vendor advisory/errata stream for this distro because backports make upstream-style checks unreliable"
  fi
fi

fail_unknown "could not map this host cleanly; raw binary reports '$raw_ver' and no supported package rule matched"
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, separate the noisy library finding from the actually exposed workflows: pull the list of hosts hit by plugin 171079, identify which ones terminate TLS, perform mTLS, validate CRLs, process PEM/PKCS7/CMS content, or still expose legacy RSA paths, and prioritize those first. Because this is a MEDIUM reassessment, there is no noisgate mitigation SLA — go straight to the 365-day remediation window; use that time to validate backported distro fixes, restart linked services after patching, and clean up the small subset of systems where OpenSSL is sitting in a real certificate-processing trust boundary. If you find custom CRL retrieval or legacy RSA in a public-facing service, treat that subset as an accelerated exception even though the fleet-wide score stays MEDIUM.

Sources

  1. Tenable plugin 171079
  2. OpenSSL vulnerabilities advisory page
  3. NVD - CVE-2023-0286
  4. NVD - CVE-2022-4304
  5. Ubuntu USN-5844-1 OpenSSL vulnerabilities
  6. Red Hat RHSA-2023:1335
  7. CERT-EU advisory 2023-007
  8. Docker Scout CVE-2023-0286
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.