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*.
4 steps from start to impact.
Find a DAV-enabled path with curl or a scanner
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.- Target is Apache HTTP Server
<=2.4.54 mod_davis loaded- A reachable URL is configured with
Dav On
mod_davis an extension module, not a universal defaultDavdefaults toOffand must be explicitly enabled- Many enterprises do not publish WebDAV externally at all
Send the malicious If: header using curl or a raw HTTP client
If: request header. Public PoC material exists, but it is basic and crash-focused rather than a mature weaponized exploit chain.- Ability to send arbitrary HTTP headers to the DAV endpoint
- Request reaches the DAV parser without being normalized away upstream
- Layer-7 proxies or request-normalization devices may alter malformed inputs
- Some DAV deployments are authenticated or VPN-restricted, shrinking reachable attacker population
If: headers, especially paired with WebDAV verbs or DAV-enabled URLs; off-the-shelf signatures are uncommon.Trigger the parser fault inside mod_dav
- The crafted header reaches vulnerable parsing logic
- The specific memory layout still allows the bug to surface
- A one-byte NUL write is a weak primitive
- Apache only documents crash impact; no authoritative RCE claim accompanies the advisory
segfault / abnormal termination logs than clean application-layer errors.Cause availability loss, usually at worker scope
- Repeated request delivery against a reachable vulnerable service
- Service architecture does not fully absorb worker crashes
- Modern Apache deployments often recover child crashes automatically
- Blast radius is usually bounded to the affected service rather than domain-wide compromise
The supporting signals.
| In-the-wild status | No authoritative evidence of active exploitation found, and not listed in CISA KEV. |
|---|---|
| Proof-of-concept availability | A 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. |
| EPSS | 0.00468 from the provided intel block — low predicted exploit interest. |
| KEV status | Absent from the CISA Known Exploited Vulnerabilities Catalog. |
| CVSS vector meaning | CVSS: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 versions | Upstream 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 versions | Upstream 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 reality | I 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 timeline | Apache 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 / reporting | Apache 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. |
noisgate verdict.
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.
Why this verdict
- Optional module tax: the vulnerable parser lives in
mod_dav, and Apache documentsDav Offas 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.00468is 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.
What to do — in priority order.
- Disable unused WebDAV — Remove
Dav Onlocations and unloadmod_dav/mod_dav_fsanywhere 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. - 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.
- Alert on DAV probes and malformed
If:headers — Add WAF, reverse proxy, or logging rules to surfacePROPFIND,LOCK,UNLOCK, and abnormalIf: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.
- Generic Apache version banners alone do not prove risk here, because they miss the key precondition of reachable
mod_davwithDav Onand 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/POSTis insufficient if the DAV location itself remains reachable and the reverse proxy still forwards DAV-related requests.
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.
#!/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"
If you remember one thing.
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
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.