← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2006-20001 · CWE-787 · Disclosed 2023-01-17

A carefully crafted If: request header can cause a memory read

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

This is a sharp splinter in an optional door, not a master key for every Apache server

CVE-2006-20001 is an out-of-bounds read / one-byte NUL write in Apache HTTP Server mod_dav when it parses a crafted If: header. Upstream says Apache HTTP Server 2.4.0 through 2.4.54 are affected, with the fix in 2.4.55 on 2023-01-17. The practical catch matters: the vulnerable code lives in WebDAV handling, so reachable exposure usually requires mod_dav to be loaded and Dav On to be configured for a location.

The vendor/NVD HIGH 7.5 score overrates this for most enterprise fleets. Yes, it is unauthenticated and network-reachable *when WebDAV is exposed*, but the observed impact is crash-oriented availability loss, not takeover, and the exposure population is sharply reduced by the fact that WebDAV is an optional extension with Dav Off by default; Apache itself classified the issue as *moderate*.

"Real bug, real crash path, but only on Apache boxes that explicitly turned on WebDAV."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a DAV-enabled path with curl or a scanner

The attacker first needs an Apache endpoint that actually routes requests into mod_dav. In practice this is done with OPTIONS, PROPFIND, or method probing to look for DAV behavior or DAV-related headers, then targeting a location where Dav On is enabled.
Conditions required:
  • Target is Apache HTTP Server <=2.4.54
  • mod_dav is loaded
  • A reachable URL is configured with Dav On
Where this breaks in practice:
  • mod_dav is an extension module, not a universal default
  • Dav defaults to Off and must be explicitly enabled
  • Many enterprises do not publish WebDAV externally at all
Detection/coverage: External scanners can fingerprint WebDAV inconsistently; version-based vuln scanners often miss the config precondition and over-report based only on Apache version.
STEP 02

Send the malicious If: header using curl or a raw HTTP client

Once a DAV-enabled location is found, the attacker sends a deliberately malformed If: request header. Public PoC material exists, but it is basic and crash-focused rather than a mature weaponized exploit chain.
Conditions required:
  • Ability to send arbitrary HTTP headers to the DAV endpoint
  • Request reaches the DAV parser without being normalized away upstream
Where this breaks in practice:
  • Layer-7 proxies or request-normalization devices may alter malformed inputs
  • Some DAV deployments are authenticated or VPN-restricted, shrinking reachable attacker population
Detection/coverage: Look for malformed or unusually long If: headers, especially paired with WebDAV verbs or DAV-enabled URLs; off-the-shelf signatures are uncommon.
STEP 03

Trigger the parser fault inside mod_dav

The vulnerable parser can read past the provided header value or write a single zero byte just beyond it in pool memory. The documented result is process instability or a crash, which maps to denial of service rather than code execution in the published advisories.
Conditions required:
  • The crafted header reaches vulnerable parsing logic
  • The specific memory layout still allows the bug to surface
Where this breaks in practice:
  • A one-byte NUL write is a weak primitive
  • Apache only documents crash impact; no authoritative RCE claim accompanies the advisory
Detection/coverage: Server-side evidence is more likely to be child crashes, worker resets, or generic segfault / abnormal termination logs than clean application-layer errors.
STEP 04

Cause availability loss, usually at worker scope

The likely operational impact is one or more worker or child process crashes, with the parent restarting them depending on MPM and service supervision. That can still produce noisy outages on exposed WebDAV services, but it is not the same as arbitrary code execution or durable compromise.
Conditions required:
  • Repeated request delivery against a reachable vulnerable service
  • Service architecture does not fully absorb worker crashes
Where this breaks in practice:
  • Modern Apache deployments often recover child crashes automatically
  • Blast radius is usually bounded to the affected service rather than domain-wide compromise
Detection/coverage: Availability monitoring, process crash telemetry, and service restart alerts are the most reliable detectors; generic web logs alone may not tell the story.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo authoritative evidence of active exploitation found, and not listed in CISA KEV.
Proof-of-concept availabilityA basic public PoC exists on GitHub in r1az4r/CVE-2006-20001. That lowers attacker effort for crash testing, but does not demonstrate a code-exec path.
EPSS0.00468 from the provided intel block — low predicted exploit interest.
KEV statusAbsent from the CISA Known Exploited Vulnerabilities Catalog.
CVSS vector meaningCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H says unauthenticated network-triggerable with pure availability impact. That is technically fair in a lab, but it ignores the very real deployment friction of requiring exposed WebDAV.
Affected versionsUpstream Apache says 2.4.0 through 2.4.54. Operationally, treat it as affected only where mod_dav is present and a location has Dav On.
Fixed versionsUpstream fix is 2.4.55. Debian lists fixed backports including 2.4.38-3+deb10u9 for buster and 2.4.56-1~deb11u1 for bullseye.
Exposure / scanning realityI found no trustworthy internet-census source tying this CVE to a clean Shodan/Censys/FOFA fingerprint. That is itself a signal: exposure is configuration-dependent and should be validated from your config inventory or from observed DAV behavior, not from generic Apache banners.
Disclosure timelineApache says the bug was described on 2006-10-31, reported to the security team on 2022-08-10, and fixed in 2.4.55 on 2023-01-17.
Researcher / reportingApache does not publicly credit a finder on the advisory entry; it references the first edition of *The Art of Software Security Assessment* as the original description.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.0/10)

The decisive downgrade factor is reachability: this is not a generic Apache bug, it is a mod_dav bug that typically requires an explicitly DAV-enabled location. The impact is also crash-centric, with no authoritative evidence of code execution, KEV inclusion, or active campaign use pushing it upward.

HIGH Impact is primarily denial-of-service, not established compromise
MEDIUM Reachable exposure population in typical enterprise fleets is materially narrower than raw Apache install count

Why this verdict

  • Optional module tax: the vulnerable parser lives in mod_dav, and Apache documents Dav Off as the default; that sharply cuts the exposed population versus all Apache servers.
  • Posture friction compounds: real exploitation usually requires a DAV-enabled URL to be reachable from the attacker position, which often implies a niche publishing workflow, internal-only service, or authenticated collaboration endpoint.
  • Crash-first primitive: the published impact is an out-of-bounds read or a single-byte zero write that can crash the process. That is materially weaker than the memory-corruption bugs that routinely earn emergency patch status.
  • Threat intel is cold: no KEV listing, no authoritative wild-exploitation reporting found, and the provided EPSS 0.00468 is low.
  • Vendor score ignores deployment reality: NVD's 7.5 assumes any vulnerable version is equally exposed from the network, which is not true here.

Why not higher?

Because there is no credible public evidence that this bug is being used for initial access or that it reliably yields more than service disruption. A CVE that needs optional WebDAV exposure and currently bottoms out at DoS should not sit in the same bucket as internet-scale Apache RCEs or traversal bugs.

Why not lower?

Because if you *do* expose WebDAV on vulnerable Apache, an unauthenticated remote attacker can realistically crash workers with a single crafted request path. That is not backlog lint; for the subset of fleets actually using DAV, there is real operational outage potential.

05 · Compensating Control

What to do — in priority order.

  1. Disable unused WebDAV — Remove Dav On locations and unload mod_dav / mod_dav_fs anywhere WebDAV is not a business requirement. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but this is the cleanest exposure reduction and should happen in the next routine change window.
  2. Fence DAV behind strong access controls — If WebDAV must remain, restrict it to VPN, internal networks, or tightly scoped reverse-proxy ACLs, and require strong authentication. There is no mitigation SLA — go straight to the 365-day remediation window, so use normal change governance, but do not leave broad unauthenticated DAV exposure in place.
  3. Alert on DAV probes and malformed If: headers — Add WAF, reverse proxy, or logging rules to surface PROPFIND, LOCK, UNLOCK, and abnormal If: header usage against Apache estates. This will not replace patching, but it gives you a tripwire while you work through the 365-day remediation window.
What doesn't work
  • Generic Apache version banners alone do not prove risk here, because they miss the key precondition of reachable mod_dav with Dav On and can also misread distro backports.
  • A basic WAF signature is not a dependable fix; malformed-header edge cases are fragile, and intermediaries may normalize traffic differently than the origin sees it.
  • Restricting only GET/POST is insufficient if the DAV location itself remains reachable and the reverse proxy still forwards DAV-related requests.
06 · Verification

Crowdsourced verification payload.

Run this on the target Apache host as a user who can execute apachectl/apache2ctl/httpd and read Apache config paths; sudo may be needed for full config visibility. Save as check-cve-2006-20001.sh, then run bash check-cve-2006-20001.sh on the server. It outputs VULNERABLE, PATCHED, or UNKNOWN and exits 0, 1, or 2 respectively.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2006-20001.sh
# Determine likely exposure to CVE-2006-20001 on an Apache HTTP Server host.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

say() { printf '%s\n' "$1"; }
unknown() { say "UNKNOWN - $1"; exit 2; }
vuln() { say "VULNERABLE - $1"; exit 1; }
patched() { say "PATCHED - $1"; exit 0; }

find_ctl() {
  local c
  for c in apache2ctl apachectl httpd; do
    if command -v "$c" >/dev/null 2>&1; then
      printf '%s' "$c"
      return 0
    fi
  done
  return 1
}

verlte() {
  # returns 0 if $1 <= $2 using sort -V
  [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" = "$1" ]
}

ctl="$(find_ctl || true)"
[ -n "$ctl" ] || unknown "Apache control binary not found"

ver_out="$($ctl -v 2>/dev/null || true)"
version="$(printf '%s\n' "$ver_out" | sed -n 's/.*Apache\/\([0-9][0-9.]*\).*/\1/p' | head -n1)"
[ -n "$version" ] || unknown "Could not determine Apache version from '$ctl -v'"

mods="$($ctl -M 2>/dev/null || true)"
if [ -z "$mods" ]; then
  # Some packaged httpd binaries don't support -M directly; try common wrappers.
  if command -v apache2ctl >/dev/null 2>&1; then
    mods="$(apache2ctl -M 2>/dev/null || true)"
  elif command -v apachectl >/dev/null 2>&1; then
    mods="$(apachectl -M 2>/dev/null || true)"
  fi
fi

if ! printf '%s\n' "$mods" | grep -Eq '(^| )dav_module|(^| )dav_fs_module'; then
  patched "mod_dav is not loaded"
fi

config_paths="/etc/httpd /etc/apache2 /usr/local/apache2/conf"
dav_on_found=0
for p in $config_paths; do
  if [ -d "$p" ]; then
    if grep -RIEqs '^[[:space:]]*Dav[[:space:]]+On([[:space:]]|$)' "$p" 2>/dev/null; then
      dav_on_found=1
      break
    fi
  fi
done

if [ "$dav_on_found" -ne 1 ]; then
  patched "mod_dav is loaded but no 'Dav On' directive was found in common config paths"
fi

# Debian backport handling from Debian tracker
if command -v dpkg-query >/dev/null 2>&1; then
  pkg_ver="$(dpkg-query -W -f='${Version}\n' apache2 2>/dev/null | head -n1)"
  if [ -n "$pkg_ver" ]; then
    if command -v dpkg >/dev/null 2>&1; then
      if dpkg --compare-versions "$pkg_ver" ge '2.4.56-1~deb11u1'; then
        patched "Debian apache2 package version $pkg_ver is fixed"
      fi
      if dpkg --compare-versions "$pkg_ver" ge '2.4.38-3+deb10u9' && dpkg --compare-versions "$pkg_ver" lt '2.4.56-1~deb11u1'; then
        patched "Debian apache2 package version $pkg_ver matches a documented fixed backport"
      fi
    fi
  fi
fi

# RPM-based distros commonly backport fixes without bumping upstream version.
if command -v rpm >/dev/null 2>&1; then
  rpm_q="$(rpm -q httpd 2>/dev/null || true)"
  if [ -n "$rpm_q" ] && verlte "$version" '2.4.54'; then
    unknown "RPM package '$rpm_q' may include a vendor backport; version alone is not authoritative"
  fi
fi

if verlte "$version" '2.4.54'; then
  vuln "Apache $version with loaded mod_dav and configured 'Dav On' matches the upstream vulnerable condition"
fi

patched "Apache version $version is newer than 2.4.54"
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, do not treat this like an all-Apache emergency; treat it like a WebDAV inventory problem. Identify hosts where mod_dav is loaded and Dav On is present, remove or fence off DAV anywhere it is not business-critical in the next routine change, and patch the remaining exposed systems to 2.4.55+ or to a documented vendor-backported fixed package. For a MEDIUM verdict there is no noisgate mitigation SLA — go straight to the 365-day remediation window; your noisgate remediation SLA is ≤ 365 days for the actual patch rollout.

Sources

  1. Apache HTTP Server 2.4 vulnerabilities entry for CVE-2006-20001
  2. Apache CHANGES_2.4 release notes
  3. NVD record for CVE-2006-20001
  4. Apache mod_dav documentation
  5. oss-security disclosure post
  6. Debian security tracker entry
  7. CISA Known Exploited Vulnerabilities Catalog
  8. Public GitHub PoC repository
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.