Skip to main content

Pi-hole CVE-2026-119335

| EUVDEUVD-2026-114439 HIGH
OS Command Injection (CWE-78)
2026-10-30 security-advisories@github.com
7.8
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain code execution as pihole user
  2. Delivery
    Write digit-prefixed arithmetic payload to /run/pihole-FTL.pid
  3. Exploit
    Admin runs root pihole subcommand (e.g. reloaddns)
  4. Execution
    Bash arithmetic recursively expands array subscript
  5. Impact
    Command substitution executes as root

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK

2 techniques across 1 tactic: Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires the attacker to already possess code execution as the pihole service user (the account pihole-FTL runs as) - this is the hard prerequisite and matches PR:L. Given that foothold, the attacker writes a value beginning with a digit followed by a Bash arithmetic/array-subscript payload (e.g. '1+a[$(...)]') into /run/pihole-FTL.pid, which is created pihole:pihole at mode 0644 by the root-run pihole-FTL-prestart.sh hook and is therefore writable by that user. Execution as root is then gated on an administrator subsequently running any root-run (need_root) pihole subcommand - reloaddns, reloadlists, updateGravity, repair, updatePihole, uninstall, debug, flush, setpassword, checkout, networkflush or tail - which route through sudo and reach the vulnerable '[[ "$pid" -eq "-1" ]]' arithmetic check in getFTLPID. Limiting factors: no remote/unauthenticated path, affected versions are <= 6.4.3 (fixed in 6.5), and the trigger depends on a root-run pihole command occurring, though these are routine so the window is frequent.

Impact

This is a credible, prioritize-this-week local privilege escalation rather than an inflated high-CVSS issue. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 7.8) is internally consistent with the mechanism: the attacker must already hold code execution as the unprivileged pihole service user (PR:L, AV:L), and from that foothold achieves full root (C:H/I:H/A:H). It is NOT remotely exploitable on its own - it is a second-stage escalation, realistically chained after compromise of the network-facing pihole-FTL daemon that runs as the same pihole user. No CISA KEV listing and no EPSS score were provided, so there is no evidence of active or widespread exploitation; status is therefore 'no public exploit identified' in the KEV sense, BUT the GHSA advisory contains a complete, end-to-end-verified working PoC (planting '1+a[$(id > /tmp/PWNED-ROOT-PROOF)]' and triggering it via 'pihole reloaddns'), so a functional public exploit demonstrably exists. The vuln.today priority of 'this_week' aligns with this: high impact and a trivial, reliable trigger, but gated behind an existing pihole-user foothold. A notable amplifier is that the root-side triggers (reloaddns, reloadlists, updateGravity, repair, updatePihole, uninstall, debug, flush, setpassword, etc.) are routine administrative commands, so the escalation fires during normal operations rather than requiring a rare event. Treat as a genuine priority for any host where the pihole user could be compromised, but note it is not a standalone remote threat.

Exploit ScenarioDerived

An attacker who has already gained code execution as the unprivileged pihole user - for example by compromising the internet/network-facing pihole-FTL process, which runs as that same user - writes a crafted arithmetic payload such as '1+a[$(id > /tmp/PWNED-ROOT-PROOF)]' into the pihole-owned /run/pihole-FTL.pid file. The next time an administrator runs any root-level pihole subcommand (e.g. 'pihole reloaddns' after a list or config change), Bash evaluates the PID value in an arithmetic context, recursively expands the array subscript, and executes the embedded command substitution as root. A full, end-to-end-verified PoC for this is published in the GHSA-cf36-4hhc-8398 advisory.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Local privilege escalation in Pi-hole (versions through 6.4.3, fixed in 6.5) lets an attacker who already holds code execution as the pihole service account gain root. The account owns /run/pihole-FTL.pid, and the getFTLPID() content check only rejects values whose first character is a non-digit, so a payload such as '1+a[$(...)]' survives and is later evaluated arithmetically by a root-run pihole subcommand (reloaddns, updateGravity, repair, debug and others), executing the embedded command substitution as root. This is a bypass of the content-validation half of the CVE-2026-41489 fix; the vulnerability requires a prior pihole-user foothold and an administrator subsequently running a need_root subcommand, and the advisory includes a proof-of-concept verified end-to-end in the official container. No KEV listing or confirmed active exploitation is reported, and the vendor classifies this as a prioritize-this-week issue rather than an emergency.

RemediationAI

Vendor-released patch: Pi-hole 6.5. Upgrade any installation at 6.4.3 or earlier to 6.5 (or later) using the normal update path so the corrected getFTLPID() in advanced/Scripts/utils.sh and the rewritten logrotate template are deployed; the installer in 6.5 also rewrites older rendered logrotate snippets that still contain kill -USR2 $(cat /run/pihole-FTL.pid ...), which matters for systems upgraded in place rather than freshly installed. Patch references: advisory https://github.com/pi-hole/pi-hole/security/advisories/GHSA-cf36-4hhc-8398, fix commit https://github.com/pi-hole/pi-hole/commit/555dd4d8b3699327fbba482bb73cce5f53979bd1, pull request https://github.com/pi-hole/pi-hole/pull/6719, and release https://github.com/pi-hole/pi-hole/releases/tag/v6.5. No separate workaround is documented in the available sources: exploitation depends on an attacker already holding code execution as the pihole account (for example through a compromise of the network-facing pihole-FTL process), so until 6.5 can be deployed the practical exposure reduction is preventing that account from being compromised at all, since any pihole-user foothold on a pre-6.5 host can be escalated to root the next time an administrator runs a need_root pihole subcommand.

Affected VersionsENISA

pi-hole < 6.5

Affected Packages

euvd pi_hole fix: 6.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a shell command-injection class weakness (CWE-78) arising from two Bash semantics interacting. First, the validation in advanced/Scripts/utils.sh uses expr "${FTL_PID}" : "[^[:digit:]]", and because expr's : operator anchors at the start of the string and [^[:digit:]] matches exactly one character, the check only rejects a value whose first byte is a non-digit - any digit-prefixed string passes through unchanged even though the code comment claims it verifies the value is numeric. Second, that value is echoed back by getFTLPID() and consumed in if [[ "$pid" -eq "-1" ]] at three call sites in the pihole wrapper (the reloadDNS reload-lists and reload paths, and statusFunc); Bash evaluates both operands of -eq as arithmetic expressions, and arithmetic evaluation recursively expands array subscripts, including command substitution. The PID file is created pihole:pihole mode 0644 by the root-run systemd pre-start hook, so the same unprivileged account the FTL daemon runs as can write the payload, while the consuming subcommands are need_root and route through sudo. The 6.5 fix replaces the expr check with a case statement accepting only all-digit values and additionally verifying that /proc/<pid>/comm equals pihole-FTL, and rewrites the logrotate template (plus the installer's in-place swap of older rendered snippets) to call getFTLPID rather than reading the raw PID file.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (github) PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

Attacker needs an existing pihole-user foothold (PR:L, AV:L) and the trivial, reliable payload gives AC:L; successful root command execution yields full C:H/I:H/A:H with no scope change.

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 30, 2026 - 22:03 EUVD
CVE Published
Oct 30, 2026 - 20:17 cve.org
HIGH 7.8

DescriptionCVE.org

Pi-hole is a DNS sinkhole that protects devices from unwanted content without installing any client-side software. Prior to 6.5, advanced/Scripts/utils.sh getFTLPID() attempts to validate the pihole-owned /run/pihole-FTL.pid file with expr "${FTL_PID}" : "[^[:digit:]]", but this rejects only values whose first character is not a digit. An attacker with code execution as the pihole user can write a digit-prefixed arithmetic expression to the pihole-owned PID file. Root-run pihole subcommands then evaluate [[ "$pid" -eq "-1" ]], causing Bash to recursively evaluate array subscripts and execute command substitution as root. This bypasses the content-validation portion of the CVE-2026-41489 remediation while leaving its hardcoded PID-file path protection intact. This issue is fixed in version 6.5.

Technical POC Analysis

CWE-78 OS command injection in Pi-hole's Bash wrapper, specifically getFTLPID() in advanced/Scripts/utils.sh (lines 96-111 in the development tree quoted by the advisory).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-119335 is a high-severity local privilege escalation in Pi-hole (through version 6.4.3, fixed in 6.5) that allows an attacker with existing code execution as the pihole service account to obtain root privileges when an administrator subsequently runs a privileged subcommand. This undermines the security boundary between the pihole service and the underlying host, potentially exposing sensitive DNS and network data, but exploitation requires a prior foothold and specific administrative action. Leadership should prioritize remediation this week because a verified proof-of-concept exists, though no active exploitation has been confirmed.

Business Impact: High
Compensating Controls

Apply vendor patch: upgrade to Pi-hole 6.5 or later. Until patching, administrators should defer running need_root subcommands (reloaddns, updateGravity, repair, debug), and IT should enforce least privilege on the pihole service account and monitor /run/pihole-FTL.pid for unauthorized changes.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Medium
very popular self-hosted DNS sinkhole, mostly home/lab/SMB networks, not enterprise-ubiquitous
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy