☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Perforce logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.7 🐛 CWE-312
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-8804

CVE-2026-8804 Supply Chain Attack in Puppet
📅 PUBLISHED: 2026-07-03 08:16 UTC 🔄 UPDATED: 2026-10-02 19:33 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.11%
👁️
0.11% probability
2.7× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1552
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: United States License: Commercial
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
6.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-8804 is a vulnerability in Puppet’s resource_api module (shipped with Puppet Core 8.x and Puppet Enterprise 2023.8.x/2025.x) that fails to preserve the sensitive flag on parameters defined via the Resource API. This causes values such as passwords, secret keys, and tokens to be stored in cleartext in the agent’s local transaction state cache (state.yaml). An attacker with local access to a Puppet agent node can read this cache and extract sensitive credentials.

The vulnerability affects all versions of the resource_api module from 1.5.0 through 1.9.1, and version 2.0.0. The fix was released in resource_api 1.9.2 and 2.0.1, which are included in Puppet Core 8.20.0, Puppet Enterprise 2023.8.10, and Puppet Enterprise 2025.11.0.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is in the Puppet ecosystem, specifically the resource_api Ruby gem. Puppet is a configuration management tool widely used in enterprise environments. The flaw exists in the core agent software, meaning any Puppet-managed node running an affected version is at risk. The supply chain risk is high because Puppet agents are typically deployed across hundreds or thousands of servers, and the sensitive data exposed (passwords, API keys) can lead to lateral movement and privilege escalation.

CVSS Breakdown & Threat Level

CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

  • Attack Vector (AV): Local (L) – The attacker must have local access to the Puppet agent node.
  • Attack Complexity (AC): Low (L) – No special conditions are required; the cache file is readable by the puppet user.
  • Privileges Required (PR): Low (L) – The attacker needs a low-privileged account on the node (e.g., the puppet user or any user who can read the cache).
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerability does not cross trust boundaries.
  • Confidentiality (C): High (H) – Sensitive credentials are exposed in cleartext.
  • Integrity (I): None (N) – No data integrity impact.
  • Availability (A): None (N) – No availability impact.

Base Score: 5.5 (Medium)

Threat Level: Medium. While the CVSS score is moderate, the real-world impact is significant because Puppet agents often run on critical infrastructure, and exposed credentials can be used for lateral movement.

Deep Dive & Mechanics

The Puppet Resource API allows module authors to define custom resource types with parameters that can be marked as sensitive (e.g., String, sensitive: true). When a resource is applied, Puppet stores the transaction state in a local cache file (state.yaml) on the agent. The vulnerability arises because the resource_api module does not propagate the sensitive flag to the state cache. Instead, the value is stored as a plain string.

Root Cause: In the resource_api code, when serializing resource parameters for the state cache, the sensitive metadata is ignored. The code uses a generic to_s or inspect method that does not mask or omit sensitive values.

Attack Scenario:

  1. An administrator defines a Puppet resource (e.g., mysql_user) with a sensitive password parameter.
  2. The Puppet agent applies the catalog and writes the transaction state to /opt/puppetlabs/puppet/cache/state/state.yaml.
  3. An attacker with local access (e.g., via a compromised low-privileged account) reads the state.yaml file.
  4. The attacker extracts the cleartext password and uses it to access the MySQL database or other services.

Vulnerable vs. Patched Code

Vulnerable Code (resource_api 1.9.1):

# In resource_api/transport.rb or similar
def state_hash(resource)
  resource.to_hash  # This does not preserve sensitive flag
end

Patched Code (resource_api 1.9.2):

# In resource_api/transport.rb
def state_hash(resource)
  hash = resource.to_hash
  # Mask sensitive parameters
  resource.class.attributes.each do |attr_name, attr|
    if attr[:sensitive]
      hash[attr_name] = '***'  # or use Puppet::Pops::Types::PSensitiveType
    end
  end
  hash
end

The patch explicitly checks each attribute for the sensitive flag and replaces the value with a placeholder (***) before writing to the state cache.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • Local access to a Puppet agent node running an affected version.
  • The puppet user or a user with read access to the Puppet cache directory.

Steps:

  1. Identify the state cache file:
    ls -la /opt/puppetlabs/puppet/cache/state/state.yaml
    
  2. Read the file:
    cat /opt/puppetlabs/puppet/cache/state/state.yaml
    
  3. Search for sensitive parameters (e.g., password, secret, token):
    grep -E '(password|secret|token|api_key)' /opt/puppetlabs/puppet/cache/state/state.yaml
    
  4. Extract the cleartext values and use them for lateral movement.

Example Output:

---
mysql_user:
  - name: 'app_user'
    password: 'SuperSecretP@ssw0rd!'  # Cleartext!
    ensure: 'present'

Blue Team (Detection & Forensics)

Detection:

  • Monitor file access to /opt/puppetlabs/puppet/cache/state/state.yaml by non-puppet processes.
  • Alert on grep or cat commands targeting the state cache.
  • Use file integrity monitoring (FIM) to detect unauthorized reads.

Forensics:

  • Check the state.yaml file for cleartext sensitive values.
  • Review audit logs for access to the cache directory.
  • Identify which Puppet resources are exposing sensitive data.

Indicators of Compromise (IOCs)

  • File Path: /opt/puppetlabs/puppet/cache/state/state.yaml
  • File Content: Presence of cleartext passwords, secrets, or tokens in the YAML file.
  • Process: Unauthorized cat, grep, or less commands on the state cache file.
  • Network: Lateral movement using credentials extracted from the cache.

Detection Engineering

YARA Rule

rule CVE_2026_8804_Puppet_Sensitive_Data_Exposure {
    meta:
        description = "Detects cleartext sensitive data in Puppet state cache"
        author = "Valters IT"
        date = "2026-01-01"
        reference = "CVE-2026-8804"
    strings:
        $sensitive_key = /(password|secret|token|api_key|private_key):\s*[^\s*]/
        $state_cache_header = "---" nocase
        $puppet_resource = /^\s*-\s*name:/ nocase
    condition:
        $state_cache_header at 0 and #sensitive_key > 0 and #puppet_resource > 0
}

Sigma Rule

title: Puppet State Cache Sensitive Data Access
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects attempts to read Puppet state cache file containing cleartext sensitive data
author: Valters IT
date: 2026/01/01
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-8804
logsource:
    category: process_creation
    product: linux
detection:
    selection:
        Image|endswith: '/cat' or '/grep' or '/less' or '/more' or '/head' or '/tail'
        CommandLine|contains: '/opt/puppetlabs/puppet/cache/state/state.yaml'
    condition: selection
falsepositives:
    - Legitimate Puppet operations (e.g., puppet agent runs)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-8804 Puppet Sensitive Data Exfiltration"; flow:to_server; content:"state.yaml"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Puppet Core to version 8.20.0 or later.
  2. Upgrade Puppet Enterprise to version 2023.8.10 or 2025.11.0.
  3. If upgrade is not possible, manually update the resource_api module to version 1.9.2 or 2.0.1:
    puppet module install puppetlabs-resource_api --version 1.9.2
    

Long-Term Mitigations:

  • Restrict access to the Puppet cache directory using file permissions (e.g., chmod 700 /opt/puppetlabs/puppet/cache/state).
  • Implement file integrity monitoring (FIM) on the state cache file.
  • Use Puppet’s built-in Sensitive data type in manifests to ensure values are masked in logs and reports.
  • Rotate any credentials that may have been exposed.

Workaround:

  • If upgrade is delayed, consider disabling the transaction state cache by setting storeconfigs = false in puppet.conf (note: this may impact PuppetDB functionality).

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-8804/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.