---
id: "CVE-2026-109125"
kind: "vulnerability"
aliases: ["CVE-2026-109125"]
title: "Unbound: cache clear side-channel leaks upstream port, enabling cache poisoning"
severity: "medium"
cvss: 5.3
epss: 0.00134
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["dns-resolver", "linux", "runtime", "self-hosted", "unbound"]
not_affected_if: ["default-config", "other-resolver-software"]
published_at: "2026-10-21T09:17:06+00:00"
first_seen_at: "2026-10-23T21:57:28+00:00"
updated_at: "2026-10-25T04:21:02+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-109125", "first_seen_at": "2026-10-23T21:57:28+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-109125", "first_seen_at": "2026-10-24T13:15:54+00:00"}]
---

# Unbound: cache clear side-channel leaks upstream port, enabling cache poisoning

With a non-default unwanted-reply-threshold setting, Unbound clears its cache when too many unmatched UDP replies arrive, which lets an outside observer tell whether a guessed port is the upstream source port. That narrows the search space, so an attacker with a sustained query window may be able to poison the cache.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Run `unbound -V` to read the installed version and compare it against `1.26.1`
- Search the config (usually `unbound.conf`) for `unwanted-reply-threshold`; the issue applies only when it is set above 0
- unknown whether a fixed version number is listed in the sources

## Fix

- Upgrade Unbound past `1.26.1` (the NVD entry says up to and including 1.26.1; the first fixed version is unknown from these sources)
- Or set `unwanted-reply-threshold` to `0` in unbound.conf as a mitigation, unless the threshold is needed

## Timeline

- 2026-10-23T21:57:28+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-109125
- 2026-10-24T13:15:54+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-109125

## From the sources

In NLnet Labs Unbound up to and including version 1.26.1, an observable  cache-level side-channel can be exposed with 'unwanted-reply-threshold > 0' configurations (not a default configuration). If a response-like UDP datagram reaches the upstream source port currently used by a recursive query, but its TXID does not match any pending query, Unbound counts the packet as an unwanted reply. When the accumulated count reaches the configured threshold, Unbound clears the worker's RRset cache and message cache. This cache clear action does not destroy the current upstream UDP pending query. Therefore, an external observer can distinguish whether a candidate port matches the current upstream source port by checking whether an existing cached item has been cleared. This is a cache side-channel vulnerability that can be used to probe the upstream source port. Although the attack is not feasible on default configurations and the suggested value (10 million) makes it an ureliable attack on a public resolver, in scenarios where the attacker can keep a concurrent query window alive, the attacker can first filter the source port and then perform birthday-style guessing against the TXID, making cache poisoning a feasible attack path.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
