Like a bouncer who passes out every time someone shows a weird ID — the line walks right in
CVE-2026-20337 is a heap out-of-bounds write in ClamAV's ZIP archive parser caused by incorrect catalogue capacity tracking when indexing local file headers. A crafted ZIP file submitted for scanning — via email attachment, file upload endpoint, or any path that feeds clamd — crashes the ClamAV process. Affected versions are ClamAV 1.5.0 through 1.5.3; the fix ships in 1.5.4 (released 2026-08-07). The bug also affects Cisco Secure Endpoint connectors for Windows (scored HIGH 7.5), Linux, and macOS (scored MEDIUM 5.3). PoC code is publicly available. The researcher is Kevin Stubbings of GitHub Security Lab.
Cisco's HIGH / 7.5 rating is directionally correct but slightly generous for most deployments. The CVSS vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) reflects unauthenticated network-reachable denial of service — no confidentiality or integrity impact, no code execution. That matters: crashing clamd is recoverable (the process restarts or the watchdog respawns it), and the blast radius is availability of the scanning function, not host compromise. However, ClamAV's role as a security-plane component on mail gateways means a crash can be weaponized as a two-stage attack: crash the scanner, then deliver the real payload unscanned. That security-degradation angle justifies staying at HIGH rather than dropping to MEDIUM.
4 steps from start to impact.
Craft malicious ZIP archive
- Public PoC or understanding of ZIP format internals
- Trivial to reproduce — PoC is public
Deliver ZIP to a scanning path
clamd or clamscan is viable. No authentication is required — the attacker is just a sender.- Target environment uses ClamAV to scan inbound content
- A delivery channel exists: email, HTTP upload, SMB share
- If ClamAV is not in the inbound mail/upload path, the file never reaches the parser
- Environments using a different AV engine are unaffected
ClamAV crashes (heap OOB write → SIGABRT/SIGSEGV)
clamd parses the ZIP, the catalogue capacity tracking bug causes a write past the end of a heap buffer. In practice this results in a crash (process termination), not controlled code execution — Cisco scored C:N/I:N. The scanning function is unavailable until the process restarts.- ClamAV version is 1.5.0–1.5.3
- Most clamd deployments use a watchdog (systemd, supervisord) that restarts the process within seconds
- Crash window may be too brief for reliable exploitation unless attacker can sustain repeated crashes
journalctl -u clamav-daemon). Repeated clamd restarts are a strong signal.(Optional) Deliver real payload while scanner is down
- Attacker can send a follow-up payload timed to the crash window
- No secondary scanning layer (cloud sandbox, second AV engine) is in place
- Dual-engine or cloud-sandbox architectures catch the second payload
- Rate limiting on inbound mail reduces the timing window
- Crash-restart cycle is typically <5 seconds on modern systems
The supporting signals.
| In-the-wild exploitation | None observed. Not listed in CISA KEV. No known campaigns. Cisco PSIRT states no malicious exploitation detected as of disclosure. |
|---|---|
| Proof-of-concept | Publicly available. Cisco advisory confirms PoC code exists. Researcher: Kevin Stubbings, GitHub Security Lab. |
| EPSS score | Not yet scored (disclosed 2026-08-07, <24 hours old). Expect low-to-moderate EPSS given DoS-only impact and no wild exploitation. |
| KEV status | Not listed. No CISA KEV entry as of 2026-08-08. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — unauthenticated remote DoS, no confidentiality or integrity impact. Network-reachable with no user interaction. |
| Affected versions | ClamAV 1.5.0 through 1.5.3. Also affects Cisco Secure Endpoint connectors (Windows, Linux, macOS) shipping bundled ClamAV. |
| Fixed version | ClamAV 1.5.4 (released 2026-08-07). Cisco Secure Endpoint connector updates TBD (Aug 2026) via Cisco Secure Endpoint portal. |
| Scanning / exposure data | ClamAV is embedded in thousands of mail gateways (Amavis, MailScanner, rspamd integrations) and Cisco Secure Endpoint deployments. Not directly Shodan-enumerable since clamd listens on localhost:3310 by default, but the attack surface is the *mail/upload path*, not the daemon port. |
| Disclosure date | 2026-08-07 (Cisco advisory and ClamAV 1.5.4 release). |
| Reporter | Kevin Stubbings, GitHub Security Lab. Coordinated disclosure through Cisco PSIRT. |
noisgate verdict.
The single most decisive factor is ClamAV's security-plane role on mail gateways: crashing the scanner enables a blind-the-AV attack pattern that degrades the organization's detection capability for follow-on payloads. This security-agent role floor keeps the verdict at HIGH despite the DoS-only impact and absence of code execution.
Why this verdict
- DoS-only impact caps severity below CRITICAL. The CVSS vector explicitly scores C:N/I:N — there is no path to code execution, data exfiltration, or integrity compromise from this bug alone. A crash is recoverable.
- Role multiplier: ClamAV is a security-plane component. On mail gateways (Amavis, MailScanner, rspamd) and Cisco Secure Endpoint hosts, ClamAV is the AV scanning engine. Crashing it degrades the organization's malware detection. On mail gateways specifically (a high-value role representing a large share of ClamAV deployments), a sustained crash opens a window to deliver unscanned malware — blast radius extends from 'scanner availability' to 'security posture of all protected hosts'. This floors the verdict at HIGH.
- PoC is public, attack is trivial, no auth required. The attack requires only sending an email or uploading a file — the lowest friction delivery mechanism in enterprise environments. This prevents any downgrade below HIGH.
- Watchdog restart limits the window. Most production
clamddeployments auto-restart within seconds via systemd or equivalent, narrowing the blind window. This friction prevents an upgrade to CRITICAL despite the security-agent role.
Why not higher?
The impact is strictly availability — no confidentiality or integrity loss, no code execution, no privilege escalation. ClamAV crashes are recoverable, and the blind-the-scanner window is narrow on well-configured systems with watchdog restarts. Dual-engine or cloud-sandbox mail architectures further reduce the blast radius. Without RCE, the security-agent role alone does not justify CRITICAL.
Why not lower?
ClamAV processes untrusted input from the network with zero authentication and zero user interaction — the most favorable attacker economics possible. The PoC is public. The security-agent role means DoS here is not just 'service unavailable' but 'detection capability degraded', which has downstream impact on the entire mail flow. Dropping to MEDIUM would ignore the security-plane blast radius.
What to do — in priority order.
- Enable clamd watchdog restart with aggressive respawn — Ensure
clamdruns under systemd withRestart=alwaysandRestartSec=1(or equivalent supervisor). This shrinks the blind window to ~1-2 seconds per crash. Deploy within the noisgate mitigation SLA of 30 days, though this should already be in place on production systems. - Deploy dual-engine or cloud-sandbox scanning on the mail path — Run a second AV engine (e.g., Sophos, ESET) or cloud sandbox (e.g., Cisco Secure Malware Analytics, Palo Wildfire) in the mail pipeline so a ClamAV crash does not leave inbound mail completely unscanned. This is the strongest compensating control against the blind-the-scanner pattern.
- Rate-limit inbound email from single senders — Throttle messages per sender to make sustained crash-restart cycling impractical. Most MTAs (Postfix
smtpd_client_message_rate_limit, Exchange throttling policies) support this natively. - Monitor clamd crash/restart frequency via SIEM — Alert on repeated
clamdprocess restarts (>2 in 5 minutes). Correlate with inbound mail volume gaps. This turns the attack into a detectable event. Deploy within 30 days per noisgate mitigation SLA.
- Network firewalling ClamAV's listening port (3310) — the attack vector is not direct connection to clamd; it is delivering a crafted file through the normal mail/upload pipeline. Blocking port 3310 externally is good hygiene but does not mitigate this CVE.
- Signature-based IDS rules for the crafted ZIP — the malicious ZIP structure is a valid ZIP with unusual header counts; writing a reliable signature without false positives on legitimate large ZIPs is impractical.
Crowdsourced verification payload.
Run on each host running ClamAV (mail gateway, file scanner, endpoint). Execute as any user with read access to clamd or clamscan. Example: bash check_cve_2026_20337.sh
#!/usr/bin/env bash
# CVE-2026-20337 checker — ClamAV ZIP heap OOB write
# Affected: 1.5.0 – 1.5.3 | Fixed: 1.5.4+
set -euo pipefail
get_version() {
local bin
for bin in clamscan clamd; do
if command -v "$bin" &>/dev/null; then
"$bin" --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+' | head -1
return
fi
done
echo ""
}
VER=$(get_version)
if [[ -z "$VER" ]]; then
echo "UNKNOWN — ClamAV not found on this host."
exit 2
fi
MAJOR=$(echo "$VER" | cut -d. -f1)
MINOR=$(echo "$VER" | cut -d. -f2)
PATCH=$(echo "$VER" | cut -d. -f3)
echo "Detected ClamAV version: $VER"
# Affected: 1.5.0 – 1.5.3
if [[ "$MAJOR" -eq 1 && "$MINOR" -eq 5 && "$PATCH" -le 3 ]]; then
echo "VULNERABLE — ClamAV $VER is in the affected range (1.5.0–1.5.3). Update to 1.5.4+."
exit 1
elif [[ "$MAJOR" -eq 1 && "$MINOR" -eq 5 && "$PATCH" -ge 4 ]]; then
echo "PATCHED — ClamAV $VER includes the fix."
exit 0
elif [[ "$MAJOR" -gt 1 || ("$MAJOR" -eq 1 && "$MINOR" -gt 5) ]]; then
echo "PATCHED — ClamAV $VER is newer than the affected range."
exit 0
else
echo "PATCHED — ClamAV $VER predates the affected 1.5.x branch."
exit 0
fiIf you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.