VYPR
Unrated severityNVD Advisory· Published Jan 23, 2024· Updated Jun 17, 2025

SQUID-2023:11 Denial of Service in Cache Manager

CVE-2024-23638

Description

Squid is a caching proxy for the Web. Due to an expired pointer reference bug, Squid prior to version 6.6 is vulnerable to a Denial of Service attack against Cache Manager error responses. This problem allows a trusted client to perform Denial of Service when generating error pages for Client Manager reports. Squid older than 5.0.5 have not been tested and should be assumed to be vulnerable. All Squid-5.x up to and including 5.9 are vulnerable. All Squid-6.x up to and including 6.5 are vulnerable. This bug is fixed by Squid version 6.6. In addition, patches addressing this problem for the stable releases can be found in Squid's patch archives. As a workaround, prevent access to Cache Manager using Squid's main access control: http_access deny manager.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Affected products

23

Patches

Vulnerability mechanics

Root cause

"Expired pointer reference bug: CacheManager::start() overwrites the StoreEntry expiration after errorAppendEntry() has already set it, creating a race condition that can lead to use-after-free or NULL-pointer dereference."

Attack vector

A trusted client (one permitted by the Cache Manager ACL) sends a request that causes the Cache Manager to generate an error response. The `CacheManager::start()` function [ref_id=2][ref_id=3] sets `entry->expires = squid_curtime` after `errorAppendEntry()` has already set the expiration, leaving the StoreEntry in an inconsistent state. This can lead to a use-after-free or NULL-pointer dereference when the error page is being delivered, crashing Squid (Denial of Service). The precondition is that the client must be allowed to access the Cache Manager; the advisory suggests using `http_access deny manager` as a workaround.

Affected code

The bug is in `CacheManager::start()` in `src/cache_manager.cc`. The function calls `errorAppendEntry()` to set the StoreEntry expiration, but then immediately overwrites `entry->expires = squid_curtime`, creating a race window where the StoreEntry pointer can become stale. The advisory [ref_id=1] also traces a crash path through `clientReplyContext::pushStreamData()` → `clientStreamCallback()` → `clientSocketRecipient()` → `Http::One::Server::handleReply()` where a NULL `rep` pointer triggers an assertion failure.

What the fix does

The patch [ref_id=2][ref_id=3] removes the single line `entry->expires = squid_curtime;` from `CacheManager::start()` after the call to `errorAppendEntry()`. The commit message explains that `errorAppendEntry()` already sets the entry expiration via `StoreEntry::storeErrorResponse()` → `StoreEntry::negativeCache()`, so the subsequent overwrite is both redundant and dangerous: it creates a window where the StoreEntry pointer can become stale, leading to the use-after-free or assertion failure. The fix simply lets `errorAppendEntry()` manage the expiration as intended.

Preconditions

  • authThe attacker must be a client trusted by Squid's Cache Manager access control (i.e., not blocked by http_access deny manager).
  • inputThe attacker sends a request that triggers an error response from the Cache Manager.

Generated on Jun 12, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

9

News mentions

0

No linked articles in our index yet.