← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
tenable:162420 · CWE-78 · Disclosed 2022-06-21

OpenSSL 1

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

This is a spare key hidden under the mat, not the front door blown off its hinges

The Nessus plugin maps to CVE-2022-2068, a command injection bug in OpenSSL's c_rehash helper script, not in the TLS handshake path itself. For the 1.1.1 train, affected versions are 1.1.1 through 1.1.1o; upstream fixed it in 1.1.1p on 2022-06-21. The bug triggers when c_rehash processes attacker-controlled certificate filenames containing shell metacharacters, and impact depends on whether that script is present and actually executed on the host.

Calling this CRITICAL is reality-blind. Upstream OpenSSL rated it Moderate on June 21, 2022, and NVD later corrected its scoring on September 3, 2025 from a network-style 9.8 to a local/user-interaction 7.3, which matches the real attack path much better. The decisive friction is that most enterprises are not exposing c_rehash to unauthenticated remote attackers; you usually need a prior foothold, write access to a cert path or package flow, and a vulnerable script invocation.

"This is not internet-scale OpenSSL RCE; it is a narrow c_rehash command injection that usually needs local foothold plus script execution"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Get a file-placement foothold

The attacker first needs a way to place a maliciously named certificate or CRL file into a directory that c_rehash will process. That usually means local access, a compromised package/update path, or another application bug that lets them write into certificate storage.
Conditions required:
  • Access to write or influence files in a certificate directory
  • Target uses the legacy c_rehash script rather than only openssl rehash
  • Vulnerable OpenSSL branch present: 1.1.1-1.1.1o for this plugin
Where this breaks in practice:
  • Most cert directories are root-owned and not writable by unprivileged users
  • Many environments never invoke c_rehash at all
  • This is post-initial-access in most real deployments
Detection/coverage: Network scanners are weak here; Tenable explicitly notes this plugin is version-based and not exploit-tested. Host telemetry or file integrity monitoring on cert paths is more useful than perimeter detection.
STEP 02

Wait for or trigger c_rehash execution

The malicious filename does nothing until c_rehash runs against that directory. On some operating systems the script may run automatically through package hooks or admin workflows; elsewhere it must be invoked manually by an operator or maintenance process.
Conditions required:
  • c_rehash installed on the system
  • A package post-install script, admin action, or automation job runs it
  • The malicious file is in scope for the directory being processed
Where this breaks in practice:
  • Plenty of hosts carry OpenSSL but never execute c_rehash
  • Modern certificate management often avoids this legacy helper entirely
  • Manual execution adds user interaction and timing uncertainty
Detection/coverage: Process creation telemetry for c_rehash, openssl rehash, or package-manager post-install hooks can reveal reachable targets. Most vuln management tools cannot prove this execution path.
STEP 03

Exploit filename-based command injection

When the vulnerable script handles the crafted filename, shell metacharacters can be passed into a command execution path. The payload then runs with the privileges of the script, which may be elevated if package hooks or administrative tasks launched it.
Conditions required:
  • Vulnerable script content remains unpatched
  • Attacker-controlled filename survives storage and processing intact
  • Shell metacharacters are interpreted during execution
Where this breaks in practice:
  • Backported distro patches can make package versions look old while the script is already fixed
  • Filename restrictions or sanitization in upstream workflows may kill the chain
  • Privilege is only as high as the invoking context
Detection/coverage: EDR should catch abnormal child processes spawned by c_rehash or package hooks. Command-line logging and auditd/Sysmon-style telemetry are far better controls than IDS for this step.
STEP 04

Land code execution in a narrow blast radius

Successful exploitation yields arbitrary command execution as the account running c_rehash, potentially root in package-management contexts. That is serious on the single host, but it is not a clean unauthenticated remote path across your whole fleet.
Conditions required:
  • Script runs with privileged context
  • No EDR or policy blocks the spawned command
  • Attacker can operationalize the resulting host access
Where this breaks in practice:
  • Blast radius is host-local, not instant internet-wide wormability
  • Requires a chain of prerequisites that compound downward pressure on risk
  • Strong endpoint controls often stop the final stage even if the script is vulnerable
Detection/coverage: Post-exploitation is detectable with EDR, shell history, audit logs, package transaction logs, and anomalous writes under cert directories.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo reliable evidence of broad active exploitation found in the sourced material, and CVE-2022-2068 is not present in the CISA KEV catalog as checked against the catalog pages below.
Proof-of-concept availabilityMixed signal: Tenable marks Exploit Available: true, but Wiz shows Has Public Exploit: No. I found analysis material such as fraf0's GitLab write-up, but not a mature, widely adopted remote exploit chain.
EPSS18.58% EPSS, ~95th percentile per CVEDetails' FIRST EPSS display. That says attackers may care, but EPSS does not erase the local/script-execution friction.
KEV statusNot KEV-listed in the CISA Known Exploited Vulnerabilities catalog pages cited below.
CVSS reality checkThere is scoring drift: CISA-ADP shows 9.8 CRITICAL, while NVD now shows 7.3 HIGH with AV:L/PR:L/UI:R. The NVD view better matches the actual attack path.
Affected versionsUpstream affected ranges are OpenSSL 1.1.1-1.1.1o, 3.0.0-3.0.3, and 1.0.2-1.0.2ze.
Fixed versionsUpstream fixed in 1.1.1p, 3.0.4, and 1.0.2zf. Distros backported fixes earlier than the upstream-looking version string suggests; for example Ubuntu fixed 20.04 at 1.1.1f-1ubuntu2.15 and 18.04 at 1.1.1-1ubuntu2.1~18.04.19.
Scanner / exposure realityThis is not a remotely fingerprintable service bug in the normal sense. Tenable says the plugin relies only on the application's self-reported version number, so fleet counts often include false positives where distros backported the fix.
DisclosurePublicly disclosed on 2022-06-21 in the OpenSSL security advisory.
ResearchersReported to OpenSSL by Chancen of Qingteng 73lab; another instance was found by Daniel Fiala during code review.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.6/10)

The single biggest downgrade driver is attacker position: this usually requires a local foothold or equivalent file-placement control, plus execution of a legacy helper script that many hosts never run. The bug can end in real code execution, but the reachable population is far smaller than a headline-grabbing OpenSSL network RCE.

HIGH This is **not** unauthenticated remote exploitation against normal OpenSSL TLS service exposure
MEDIUM Fleet-level applicability varies because distro backports and `c_rehash` usage are inconsistent
LOW Public exploit maturity is mixed across sources

Why this verdict

  • Local/script-path requirement: NVD's corrected vector is AV:L/PR:L/UI:R, which fits the real-world chain far better than the stale network-style 9.8.
  • Execution precondition narrows exposure: vulnerable code sits in the legacy c_rehash helper, not the routine TLS data path. If your hosts never run that script, the attack path dies.
  • Reachable population is smaller than the package count: many scanners flag on OpenSSL version alone, but Tenable admits this check is self-reported versioning, so backported distro packages inflate noise.
  • Impact is real when reached: if the script runs with elevated privileges, the attacker can get arbitrary command execution on that host. That keeps this above LOW.

Why not higher?

This is not the internet-facing OpenSSL catastrophe people imagine when they see a scary version banner. The attacker typically needs prior access, a path to plant a malicious cert filename, and a vulnerable script invocation; each prerequisite sharply reduces real exposure.

Why not lower?

Once the chain is reachable, the end state is legitimate command execution with the script's privileges, which can be root in package-hook contexts. That is too much impact to dismiss as backlog-only hygiene, especially on Linux servers with certificate automation.

05 · Compensating Control

What to do — in priority order.

  1. Disable or remove c_rehash where unused — If your estate does not operationally need the legacy helper, eliminate the attack surface outright and standardize on openssl rehash. For this MEDIUM verdict there is no mitigation SLA; treat this as cleanup you can deploy opportunistically while moving toward the remediation window.
  2. Lock down certificate directories — Restrict write access on certificate and CRL directories to root and trusted package-management identities only. This directly attacks the first prerequisite in the chain and should be folded into normal Linux hardening baselines.
  3. Monitor for suspicious child processes from package hooks — Create EDR or audit rules for c_rehash, package post-install scripts, and unexpected shell spawns from cert-management contexts. That gives you a fighting chance to catch exploitation attempts even on systems that remain unpatched during normal maintenance.
  4. Validate backports before opening change windows — Do not churn thousands of hosts based on upstream version strings alone. Confirm whether your distro already backported the fix, then remediate the truly exposed systems inside the standard patch cycle.
What doesn't work
  • A WAF does not help; this is not an HTTP request-path bug.
  • Internet exposure tools like Shodan/Censys are weak signals here because the vulnerable component is a local helper script, not a remotely attributable service flaw.
  • TLS hardening alone does not solve it; cipher choices and protocol settings do not remove the vulnerable c_rehash file-handling path.
06 · Verification

Crowdsourced verification payload.

Run this on the target Linux host as a regular user; root is not required unless your cert tooling paths are unreadable. Save it as check-cve-2022-2068.sh and run bash check-cve-2022-2068.sh; it prints VULNERABLE, PATCHED, or UNKNOWN and exits 1, 0, or 2 respectively.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2022-2068.sh
# Detect likely exposure to OpenSSL c_rehash command injection (CVE-2022-2068)
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

say() { printf '%s\n' "$1"; }

find_c_rehash() {
  local p
  for p in "$(command -v c_rehash 2>/dev/null)" /usr/bin/c_rehash /usr/sbin/c_rehash /usr/local/bin/c_rehash /usr/lib/ssl/misc/c_rehash; do
    [ -n "$p" ] && [ -f "$p" ] && { printf '%s' "$p"; return 0; }
  done
  return 1
}

get_openssl_ver() {
  if ! command -v openssl >/dev/null 2>&1; then
    return 1
  fi
  openssl version 2>/dev/null | awk '{print $2}'
}

# Return 0 if c_rehash appears patched for CVE-2022-2068, 1 otherwise.
# This uses a content fingerprint from upstream's fixed script; distro backports may differ.
patched_script_fingerprint() {
  local f="$1"
  [ -r "$f" ] || return 1
  grep -q 'sub copy_file' "$f" && return 0
  return 1
}

# Return 0 if version falls in an upstream vulnerable range, 1 if not, 2 if unparseable/package-backport likely.
version_in_vuln_range() {
  local v="$1"

  # Distro package versions often contain backport suffixes after '-'. Those need manual/vendor validation.
  if printf '%s' "$v" | grep -q -- '-'; then
    return 2
  fi

  # 1.1.1 branch: vulnerable up to 1.1.1o inclusive; fixed in 1.1.1p
  if printf '%s' "$v" | grep -Eq '^1\.1\.1([a-o]?)$'; then
    return 0
  fi
  if printf '%s' "$v" | grep -Eq '^1\.1\.1[p-z].*$'; then
    return 1
  fi

  # 3.0 branch: vulnerable 3.0.0-3.0.3; fixed in 3.0.4+
  if printf '%s' "$v" | grep -Eq '^3\.0\.[0-3]$'; then
    return 0
  fi
  if printf '%s' "$v" | grep -Eq '^3\.0\.[4-9].*$|^3\.[1-9]\..*$'; then
    return 1
  fi

  # 1.0.2 branch: vulnerable through 1.0.2ze; fixed in 1.0.2zf
  if printf '%s' "$v" | grep -Eq '^1\.0\.2([a-e]?[a-z]?)$'; then
    case "$v" in
      1.0.2zf|1.0.2zg|1.0.2zh|1.0.2zi|1.0.2zj|1.0.2zk|1.0.2zl|1.0.2zm|1.0.2zn|1.0.2zo|1.0.2zp|1.0.2zq|1.0.2zr|1.0.2zs|1.0.2zt|1.0.2zu|1.0.2zv|1.0.2zw|1.0.2zx|1.0.2zy|1.0.2zz) return 1 ;;
      *) return 0 ;;
    esac
  fi

  return 2
}

main() {
  local c_rehash=""
  local ov=""

  c_rehash="$(find_c_rehash 2>/dev/null || true)"
  ov="$(get_openssl_ver 2>/dev/null || true)"

  if [ -n "$c_rehash" ] && patched_script_fingerprint "$c_rehash"; then
    say "PATCHED"
    exit 0
  fi

  if [ -z "$ov" ]; then
    if [ -z "$c_rehash" ]; then
      say "UNKNOWN"
      exit 2
    fi
    # Script exists but we cannot determine linked OpenSSL state reliably.
    say "UNKNOWN"
    exit 2
  fi

  version_in_vuln_range "$ov"
  case $? in
    0)
      if [ -z "$c_rehash" ]; then
        # Vulnerable library train but helper script absent => attack path not present for this CVE.
        say "PATCHED"
        exit 0
      fi
      if patched_script_fingerprint "$c_rehash"; then
        say "PATCHED"
        exit 0
      fi
      say "VULNERABLE"
      exit 1
      ;;
    1)
      say "PATCHED"
      exit 0
      ;;
    2)
      # Likely distro backport or unparseable version; try script fingerprint as best-effort.
      if [ -n "$c_rehash" ] && patched_script_fingerprint "$c_rehash"; then
        say "PATCHED"
        exit 0
      fi
      say "UNKNOWN"
      exit 2
      ;;
  esac
}

main
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, do not treat every openssl 1.1.1x finding as a fire drill. First, identify which Linux images actually ship and execute c_rehash, and suppress hosts where the fix is already backported; for this MEDIUM verdict there is no noisgate mitigation SLA — go straight to the 365-day remediation window. Use the next 30 days to validate applicability and remove the legacy helper where unused, then complete vendor-package remediation for truly exposed systems inside the noisgate remediation SLA of 365 days.

Sources

  1. Tenable plugin 162420
  2. OpenSSL Security Advisory 2022-06-21
  3. NVD CVE-2022-2068
  4. Red Hat bugzilla for CVE-2022-2068
  5. Ubuntu USN-5488-1
  6. CISA Known Exploited Vulnerabilities Catalog
  7. CVEDetails EPSS display for CVE-2022-2068
  8. fraf0 GitLab attack-vector analysis
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.