☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Ansible logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H 🐛 CWE-59
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-89091

CVE-2026-89091 Symlink/Path Traversal in Ansible
📅 PUBLISHED: 2026-10-08 00:00 UTC 🔄 UPDATED: 2026-10-10 05:00 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.48%
👁️
0.48% probability
12.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1195
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: USA License: Open Source
VULNERABLE: All versions of ansible-core (specific patched version not yet available)
CVSS VECTOR BREAKDOWN 8.8
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
8.8
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-89091 is a high-severity path traversal vulnerability in ansible-core's collection installation process (ansible-galaxy collection install). An attacker can craft a malicious collection tarball containing chained symlink directory entries that, when extracted, allow arbitrary file overwrite outside the intended destination directory. Successful exploitation leads to code execution on the control node with the privileges of the user running ansible-galaxy. This is a bypass of the incomplete fix for CVE-2020-10691, and no patch is currently available.

⚡ 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

Technical Analysis

The vulnerability resides in the archive extraction logic used by ansible-galaxy collection install. When installing a collection tarball, the extractor validates archive member paths using lexical path normalization (os.path.abspath) rather than resolving symbolic links (os.path.realpath). It also fails to perform a containment check on symlink-typed directory members before creating them.

This design flaw enables a classic symlink-based path traversal attack. By including symlink directory entries in a crafted tarball, an attacker can create a symlink pointing to a directory outside the intended extraction root. Subsequent file members in the archive are then written through that symlink, escaping the destination directory. Because os.path.abspath only normalizes the string representation of a path (e.g., resolving .. and . components lexically) without consulting the filesystem for symlinks, the validation is ineffective against this chained symlink technique.

The vulnerability is a direct bypass of the fix for CVE-2020-10691, which originally addressed path traversal in the same extraction routine. The prior fix presumably added lexical path validation but did not account for symlink resolution, leaving the chained symlink vector exploitable.

The CVSS v3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H) reflects that exploitation requires network delivery of a malicious collection (AV:N), no special privileges (PR:N), but user interaction to install the collection (UI:R). Impact is high across confidentiality, integrity, and availability on the control node.

Exploitation Scenarios

No public PoC is available; the attack chain is inferred from the vulnerability class (CWE-59: Improper Link Resolution Before File Access).

  1. Reconnaissance/Target Identification: An attacker identifies environments using Ansible for configuration management, particularly those that install collections from external or untrusted sources (e.g., public repositories, shared artifact stores, or community hubs). No special access is required.

  2. Flaw Triggering: The attacker crafts a malicious collection tarball. The tarball includes one or more symlink directory entries that point outside the intended extraction root. When the victim runs ansible-galaxy collection install on this tarball, the extractor validates member paths using os.path.abspath (lexical normalization only) and does not resolve or contain symlinks before creating them. The symlink directory entries are created as-is.

  3. Payload/Execution Method: The tarball also contains file members. Because the symlink directories were created first, subsequent file members are written through the symlink and land outside the destination directory. The attacker can overwrite arbitrary files on the control node. To achieve code execution, the attacker would target files that are executed or sourced by the user's shell, Ansible runtime, or system services (e.g., shell profiles, Ansible configuration files, or Python modules loaded by ansible-core). The exact payload depends on the target environment; the vulnerability-class-level impact is arbitrary file write with the privileges of the user running ansible-galaxy.

  4. Post-Exploitation Impact: With arbitrary file overwrite, the attacker can achieve code execution on the control node, potentially compromising the entire Ansible management infrastructure. This could lead to lateral movement, exfiltration of credentials and inventory data, and further supply chain compromise.

Impact Assessment

CVE-2026-89091 has a CVSS v3.1 base score of 8.8 (High). The impact is severe: successful exploitation allows arbitrary file overwrite on the Ansible control node, leading to code execution with the privileges of the user running ansible-galaxy. This can compromise the entire automation infrastructure, including managed nodes, credentials, and configuration data. The blast radius includes any organization that installs Ansible collections from untrusted sources. The attack complexity is low (AC:L), and no privileges are required (PR:N), but user interaction (UI:R) is necessary to trigger the installation. Confidentiality, integrity, and availability are all rated High (C:H/I:H/A:H). No public exploit or PoC is currently available, and EPSS has not yet assigned a score.

Detection Guidance

Sigma Rule

title: Potential Ansible Galaxy Collection Install Symlink Path Traversal
id: 3f8b2a1c-9d4e-4f7a-8b2c-1d3e5f6a7b8c
status: experimental
description: Detects ansible-galaxy collection install processes that may be exploiting CVE-2026-89091 via symlink directory entries.
author: Threat Intelligence Team
date: 2026-01-01
logsource:
  category: process_creation
  product: linux
detection:
  selection:
    Image|endswith: '/ansible-galaxy'
    CommandLine|contains: 'collection install'
  condition: selection
falsepositives:
  - Legitimate collection installation
level: medium
tags:
  - attack.t1195
  - cve.2026.89091

YARA Rule

rule CVE_2026_89091_Ansible_Symlink_Traversal
{
    meta:
        description = "Detects malicious ansible collection tarballs exploiting CVE-2026-89091"
        author = "Threat Intelligence Team"
        date = "2026-01-01"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-89091"
        hash = "unknown"
    strings:
        $tar_magic = { 75 73 74 61 72 } // "ustar" tar header magic
        $symlink_type = { 32 } // tar typeflag '2' for symlink (0x32)
        $path_traversal = "../"
    condition:
        $tar_magic at 257 and #symlink_type > 0 and $path_traversal
}

Suricata IDS Rule

alert tcp any any -> any any (msg:"CVE-2026-89091 Ansible Galaxy Collection Symlink Path Traversal"; flow:to_server,established; content:"ansible-galaxy"; content:"collection install"; distance:0; content:"|2f 2e 2e 2f|"; distance:0; classtype:attempted-user; sid:10000001; rev:1;)

Elastic Detection

process where event.type == "start" and process.name == "ansible-galaxy" and process.args : ("collection", "install")

Splunk SPL Query

index=main sourcetype=linux_audit OR sourcetype=syslog
| search "ansible-galaxy" "collection install"
| rex field=_raw "collection install (?<collection_path>[^\s]+)"
| where match(collection_path, "\.\./")
| table _time host user collection_path

Wazuh OSSEC Rule

<group name="ansible,">
  <rule id="100001" level="10">
    <decoded_as>json</decoded_as>
    <field name="command">ansible-galaxy</field>
    <field name="args">collection install</field>
    <description>CVE-2026-89091: Potential Ansible Galaxy collection install path traversal attempt</description>
    <mitre>
      <id>T1195</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).

1. Immediate Mitigations:

  • Avoid installing Ansible collections from untrusted or unverified sources.
  • Where possible, use signed collections and verify signatures before installation.
  • Restrict network access to collection repositories and validate tarballs in a sandboxed environment prior to installation.
  • Monitor ansible-galaxy collection install invocations for anomalous tarball contents (e.g., symlink entries pointing outside the extraction root).
  • Run ansible-galaxy with the lowest possible privileges, avoiding root or highly privileged accounts.

2. Patch/Upgrade Steps:

  • No official patch is currently available. Monitor ansible-core security advisories and apply updates as soon as a fix is released.
  • As a temporary workaround, consider patching the extraction logic locally to use os.path.realpath and enforce containment checks, but only if you have the capability to maintain a custom fork.

3. Long-term Hardening:

  • Implement a policy of only installing collections from trusted, curated sources.
  • Use Ansible Galaxy's signing and verification features if available.
  • Enforce least privilege for automation control nodes.
  • Integrate software composition analysis (SCA) and artifact scanning into CI/CD pipelines to detect malicious tarballs.
  • Regularly audit Ansible collections and their sources.

References

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

product:"Ansible"
title:"Ansible"
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-89091/ · 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.