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

CVE-2019-14905

CVE-2019-14905 Vulnerability in Red Hat
📅 PUBLISHED: 2020-03-31 00:00 UTC 🔄 UPDATED: 2026-10-13 23:19 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm 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.71%
👁️
0.71% probability
17.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1203
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Patch available — upgrade to latest release
CVSS VECTOR BREAKDOWN 7.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
7.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

CVE-2019-14905 — Comprehensive Threat Intelligence Report


Executive Summary

CVE-2019-14905 is a command injection vulnerability in Red Hat Ansible Engine's nxos_file_copy module, affecting versions 2.9.x before 2.9.3, 2.8.x before 2.8.8, 2.7.x before 2.7.16, and all prior releases. The flaw allows a malicious operator — or an attacker with write access to an Ansible playbook or inventory — to craft a malicious filename parameter that executes arbitrary OS commands on the Ansible controller system with the privileges of the Ansible process. Successful exploitation results in a loss of confidentiality, integrity, and availability of the underlying automation infrastructure, which is often a high-privileged management host.

⚡ 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 Ansible Engine's nxos_file_copy module, which is designed to copy files to flash or bootflash storage on Cisco NXOS network devices. The module accepts a filename parameter that specifies the source file intended for transfer. Due to insufficient sanitization of this parameter, a maliciously crafted filename value can be interpreted by the underlying operating system shell, leading to OS command injection.

The attack mechanism is consistent with CWE-78 (OS Command Injection), where user-supplied input is incorporated into a shell command without proper escaping or validation. In the context of Ansible, this is particularly dangerous because modules execute with the privilege level of the user running the Ansible playbook — frequently an administrative or root account in enterprise management environments.

The injection itself occurs on the Ansible controller host (the machine executing the playbook), not on the NXOS device itself — although the module's purpose is to transfer files to NXOS devices, the vulnerable filename parsing happens locally during task execution.

The affected version families span multiple Ansible Engine release streams, indicating the flaw existed for a significant period before discovery and remediation. The fix was verified by three independent authoritative sources — the CNA, Debian, and Red Hat Security Advisory (RHSA) — providing high patch confidence (4/4).

No specific function names, code paths, or command construction details are provided in the NVD description beyond the module name nxos_file_copy and the parameter name filename. The precise injection point within the module's implementation cannot be confirmed from the available intelligence data.


Exploitation Scenarios

Preconditions (inferred from vulnerability class):

  1. The attacker must have the ability to influence the contents of an Ansible playbook or role that invokes the nxos_file_copy module.
  2. This typically requires access to a source code repository, CI/CD pipeline, or direct write access to the Ansible control node.
  3. The playbook must target an NXOS device (whether the device is actually reachable or not, the vulnerable parameter parsing occurs locally).

Attack chain:

Step 1 — Reconnaissance / Target Identification: The attacker identifies an organization's Ansible automation infrastructure. This may be discovered via exposed Ansible Tower/AWX web interfaces (Shodan queries such as http.title:"Ansible Tower"), public CI/CD misconfigurations, leaked repository credentials, or from a compromised developer workstation. The attacker then locates playbooks that manage Cisco NXOS network infrastructure, typically found in directories such as playbooks/network/ or roles/cisco/.

Step 2 — Flaw Trigger: The attacker modifies an existing playbook or creates a new one that uses the nxos_file_copy module. The trigger condition is the module's invocation with the filename parameter. Because the parameter sanitization is absent or insufficient, the attacker can embed shell command sequences within the filename value.

Step 3 — Payload / Execution Method (vulnerability-class level): At the OS command injection class level, the attack proceeds as follows:

  • The attacker provides a filename value containing shell metacharacters (e.g., semicolons, command substitution backticks, or pipe characters) that terminate the legitimate filename interpretation and begin a new OS command.
  • When Ansible executes the task, the unsanitized filename is concatenated into a shell command that the module constructs internally.
  • The injected command executes with the privileges of the Ansible process (frequently root or an administrative service account) on the Ansible controller system.

Specific injection syntax cannot be provided without the vulnerable code snippet; however, classic OS command injection payload patterns such as separating commands with ;, &&, or using $() command substitution are applicable to this flaw class.

Step 4 — Post-Exploitation Impact: Upon successful command execution, the attacker achieves remote code execution on the Ansible control node. Ansible controllers store inventory information, credentials (including SSH keys, cloud provider API keys, and network device credentials), and playbook secrets — making this system a high-value target for lateral movement and infrastructure-wide compromise. Loss of confidentiality is explicitly noted in the NVD description, but integrity and availability losses are also possible given the full system-level access achieved.

Inferred attack scenarios based on the attack surface:

  • Insider threat: A disgruntled administrator or contractor with legitimate Ansible access injects a credential-harvesting command via the filename parameter, then later uses the exfiltrated credentials for further intrusions.
  • Supply chain compromise: An attacker who compromises a Playbook repository or role collection (e.g., via a forged contribution to Ansible Galaxy) ships a malicious playbook that triggers the vulnerability upon standard task execution.
  • CI/CD pipeline hijacking: In environments where Ansible runs as part of automated network deployment within CI/CD pipelines, an attacker who can submit a crafted pull request or modify pipeline configuration gains code execution on the pipeline runner.

Known PoC status: No public proof-of-concept or weaponized exploit code is confirmed available at the time of analysis. The attack chain above is inferred from the OS command injection vulnerability class and the module's described functionality. Enterprise security teams should not assume the absence of a private PoC given the age of the vulnerability and the availability of the fix.


Impact Assessment

CVSS Rationale (Score 7.3 — High): The base score of 7.3 reflects the following dimensions (inferred, as no official vector was disclosed):

  • Attack Vector — Network (AV:N): The vulnerable component can be reached over a network if the Ansible control node is exposed, or through CI/CD tooling.
  • Attack Complexity — Low (AC:L): No special conditions beyond filename manipulation are required; the flaw is trivially triggered.
  • Privileges Required — Low (PR:L): The attacker needs some level of authentication or write access to the Ansible environment (e.g., developer access to a repository), making this a low-privilege entry vector.
  • User Interaction — None (UI:N): No victim interaction is required to trigger the flaw when the playbook executes.
  • Confidentiality, Integrity, Availability Impact — High (C:H/I:H/A:H): Full system access on the Ansible controller enables complete compromise of all three security properties.

Business Impact:

  1. Loss of confidentiality: Ansible controllers store credentials for network devices, servers, and cloud infrastructure. Exposure of these credentials allows lateral movement to the entire managed estate.
  2. Integrity compromise (credential tampering): An attacker can modify playbooks, SSH keys, or configuration files to silently backdoor infrastructure management.
  3. Availability disruption: Full shell access allows the attacker to delete or corrupt automation infrastructure, disrupt CI/CD pipelines, or leverage the controller as a jump host for broader disruption.
  4. Compliance and regulatory exposure: Organizations subject to PCI-DSS, SOX, or other compliance frameworks may face violations for failure to remediate a known critical vulnerability in a management plane component.

Affected Systems:

  • Red Hat Ansible Engine (versions 2.7.x, 2.8.x, 2.9.x, and earlier)
  • Any deployment of Ansible (community or commercial) using these versions where the nxos_file_copy module is used with untrusted or modifiable filename parameters.
  • Debian distributions shipping affected Ansible packages (patch confirmed via Debian advisories).
  • Red Hat Enterprise Linux customers running Ansible Engine (see RHSA advisory).

Blast Radius: The entire managed infrastructure. Ansible's distributed agentless architecture means the controller is the trusted root of the automation tree. Compromise of the controller represents a single point of failure affecting all hosts and network devices managed by that Ansible instance.


Detection Guidance

The following detection rules are constructed based on the OS command injection vulnerability class and the specific module name (nxos_file_copy) and parameter name (filename) documented in the NVD description. Rules aim to detect both the malicious playbook content and the exploitation behavior on disk and on the wire.

Note: Since no public PoC or exact exploit payload is available, rules are written to detect generic indicators of command injection attempts within Ansible playbook files that involve the nxos_file_copy module.

Sigma Rule

title: Malicious nxos_file_copy Ansible Playbook with Command Injection
id: c0d9e54e-8d4f-4a01-9dbd-1a2e3b2d5a7f
status: experimental
description: Detects suspicious shell metacharacters in the filename parameter of Ansible nxos_file_copy module, indicating potential OS command injection (CVE-2019-14905)
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2019-14905
tags:
    - attack.t1203
    - attack.t1059
    - cve.2019-14905
logsource:
    category: file_event
    product: linux
    definition: Requires auditd or file integrity monitoring to detect playbook file modifications and/or file content scanning
detection:
    selection_playbook:
        TargetFilename|endswith:
            - '.yml'
            - '.yaml'
    selection_injection:
        Data|contains|all:
            - 'nxos_file_copy'
            - 'filename:'
        Data|contains|any:
            - 'filename:.*;.*'
            - 'filename:.*&&.*'
            - 'filename:.*\$\('
            - 'filename:.*`.*`'
            - 'filename:.*\|.*'
            - 'filename:.*>.*&.*'
    condition: selection_playbook and selection_injection
falsepositives:
    - Legitimate use of special characters in Cisco file names (rare, as flash filenames do not typically contain shell metacharacters)
level: high

YARA Rule

rule cve_2019_14905_ansible_nxos_file_copy_injection
{
    meta:
        author = "ValterSIT Threat Intelligence"
        description = "Detects Ansible playbooks using nxos_file_copy with command injection indicators"
        cve = "CVE-2019-14905"
        date = "2024-01-01"
        score = 85
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2019-14905"

    strings:
        $module = "nxos_file_copy"
        $fn_param = "filename:" ascii
        $semicolon = /filename:\s*["']?[^"'\n]*;[^\n\x22\x27]*/ nocase
        $andand = /filename:\s*["']?[^"'\n]*&&[^\n\x22\x27]*/ nocase
        $cmdsub = /filename:\s*["']?[^"'\n]*\$\()/ nocase
        $backtick = /filename:\s*["']?[^"'\n]*[`][^`]*[`]/ nocase
        $pipe = /filename:\s*["']?[^"'\n]*\|[^"'\n]*/ nocase
        $redirect = /filename:\s*["']?[^"'\n]*>\s*&?/ nocase
        $newline_after = /filename:\s*["']?[^"'\n]*\n/

    condition:
        uint16(0) == 0x0A3F or
        (
            $module and $fn_param and
            (
                $semicolon or $andand or $cmdsub or $backtick or $pipe or $redirect
            )
        )
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2019-14905 Ansible nxos_file_copy Command Injection Attempt"; flow:established,to_server; content:"nxos_file_copy"; nocase; content:"filename"; nocase; http_client_body; pcre:"/filename[\"']?\s*[:=]\s*[\"']?[^\"'\r\n]+(?:;|\&\&|\$\||`)/i"; sid:201914905; rev:1; reference:cve,2019-14905; classtype:attempted-admin; metadata:mitre_tactic_id TA0002, mitre_technique_id T1059;)

Note: This Suricata rule targets network-based detection of Ansible playbook content being uploaded or executed remotely. In practice, Ansible playbooks are usually executed locally on the controller host, so network traffic may not be observable unless Ansible Automation Platform/Tower is used.

Elastic Detection

sequence by host.name with maxspan=5s
  [file where event.action == "modification" and
   file.name : ("*.yml", "*.yaml") and
   process.name : ("vim", "nano", "vi", "git", "ansible-*")]
  [file where event.action == "modification" and
   file.name : ("*.yml", "*.yaml") and
   process.name : ("ansible*")]

Alternative EQL query for file content scanning (requires file content ingested into Elasticsearch):

sequence by host.name
  [file where event.category == "file" and 
   file.extension in ("yml", "yaml") and
   wildcard(file.content, "*nxos_file_copy*") and
   (
     wildcard(file.content, "*filename*;*") or
     wildcard(file.content, "*filename*&&*") or
     wildcard(file.content, "*filename**(") or
     wildcard(file.content, "*filename*`*`*")
   )]

Splunk SPL Query

index=* sourcetype=syslog OR sourcetype=file_change
| where match(_raw, "nxos_file_copy") 
| where match(_raw, "filename[[:space:]]*:")
| rex field=_raw "filename[[:space:]]*:[[:space:]]*[\"']?(?<fn_value>[^\"'\r\n]*)"
| where match(fn_value, "(;|\&\&|\$\||`|>|&[[:space:]]+|\\\n)")
| stats count by host, source, _time, fn_value
| rename host as "Target Host", source as "Source File"
| sort - _time

Wazuh OSSEC Rule

<group name="policy,audit,">

    <rule id="100401" level="12">
        <if_sid>550</if_sid>
        <match>nxos_file_copy</match>
        <regex>filename</regex>
        <description>CVE-2019-14905: Ansible nxos_file_copy module detected with filename parameter in event stream</description>
        <group>cve_2019_14905,pci_dss_6.5.1,gdpr_IV_35.7.d,</group>
    </rule>

    <rule id="100402" level="15">
        <if_sid>100401</if_sid>
        <regex>filename[^\n]{0,50}(;|\&\&|\$\||`)</regex>
        <description>CVE-2019-14905: OS command injection indicators in Ansible nxos_file_copy filename parameter</description>
        <group>cve_2019_14905,attack.t1059,attack.t1203,</group>
    </rule>

    <rule id="100403" level="15">
        <if_sid>550</if_sid>
        <regex>nxos_file_copy</regex>
        <regex offset="after_match">filename[^\n]{0,50}&gt;\s*&amp;|filename[^\n]{0,50}&gt;\s*/</regex>
        <description>CVE-2019-14905: Shell redirection detected in nxos_file_copy filename (possible code execution)</description>
        <group>cve_2019_14905,attack.t1059,</group>
    </rule>

</group>

Mitigation & Patch Guidance

Patch Confidence: 4/4 — CONFIRMED (3+ independent sources confirm fix: CNA, Debian, RHSA advisories)

1) Immediate Mitigations (until patch is applied)

  • Restrict access to Ansible controller hosts: Limit interactive shell access to only trusted administrators. Use jump hosts and bastion systems.
  • Enforce repository write protection: Lock down write permissions on Ansible playbook repositories (e.g., GitLab/GitHub branch protection, require code review for all merges).
  • Containerize/sandbox playbook execution: Run Ansible tasks in isolated containers with minimal privileges and no direct access to the host filesystem or credentials.
  • Monitor playbook content: Deploy the Sigma/YARA rules provided above in a file integrity monitoring solution to alert on suspicious playbook modifications.
  • Temporary workaround: If nxos_file_copy is not essential for NXOS management, remove or disable the module from the Ansible module search path.

2) Patch / Upgrade Steps

Affected Version Upgrade To
2.9.x 2.9.3 or later
2.8.x 2.8.8 or later
2.7.x 2.7.16 or later
Earlier Any patched release above

Red Hat Enterprise Linux / Ansible Engine (RHSA):

# RHEL 7/8 systems:
sudo yum update ansible
# or with RHEL subscription-manager:
sudo subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
sudo dnf update ansible

Debian-based systems:

sudo apt update
sudo apt install ansible
# Ensure version >= 2.9.3 (or equivalent patched version for your release)
ansible --version

Ansible from pip (community installs):

pip3 install --upgrade "ansible>=2.9.3"
# Note: Ensure the nxos_file_copy module version matches the patched release
ansible-doc nxos_file_copy

Verification: After upgrade, verify the installed version and confirm the nxos_file_copy module is the patched variant by inspecting the module source for proper filename sanitization:

python3 -c "import ansible; print(ansible.__version__)"
ansible-doc -t module nxos_file_copy | head -20

3) Long-Term Hardening

  • Follow Ansible security best practices: Refer to Red Hat's official Ansible security guide and apply the principle of least privilege to Ansible execution accounts.
  • Adopt Ansible Vault: Encrypt playbook variables and credentials with Ansible Vault to reduce confidentiality impact if a playbook is exfiltrated.
  • Implement network segmentation: Ensure that Ansible control nodes are not directly accessible from the internet; place them in a dedicated management network segment.
  • Deploy secret management: Use HashiCorp Vault or Red Hat Vault integration to avoid heavy secrets in Ansible memory and reduce post-exploitation impact.
  • Continuous vuln scanning: Integrate CVE monitoring (e.g., via Red Hat Security Advisories or OSV scanning) into the CI/CD pipeline to catch future vulnerabilities before deployment.
  • Use signed playbook content: Mandate cryptographic code signing for playbooks and validate signatures before execution in Air-gapped or high-security environments.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2019-14905 — Official NVD description and CVSS scoring (7.3 High).
  2. Red Hat Security Advisory (RHSA): https://access.redhat.com/security/cve/CVE-2019-14905 — Vendor confirmation, affected packages, and patched versions. (Confirms fix for Ansible Engine 2.9.3, 2.8.8, 2.7.16.)
  3. Debian Security Tracker: https://security-tracker.debian.org/tracker/CVE-2019-14905 — Independent confirmation of vulnerability and patched package versions for Debian distributions.
  4. MITRE ATT&CK Framework: https://attack.mitre.org/techniques/T1059/ — Command and Scripting Interpreter; Aligns with the OS command injection execution mechanism of this CVE.
  5. First.org CVSS Calculator (Reference): https://www.first.org/cvss/calculator/3.0 — For independently verifying the CVSS vector interpretation when no official vector string is published.

Exploit-in-the-Wild Evidence: No public reports of active exploitation in the wild were identified in the provided data. CISA KEV status is listed as NO. The EPSS score of 0.00742 (51.4th percentile among all CVEs) indicates low-to-moderate probability of exploitation based on opportunistic scanning models. However, the lack of public PoC does not rule out private exploit development — the module is specific to Cisco NXOS management environments, which narrows the target pool but makes successful exploitation highly impactful for affected organizations.

Threat Actor Campaigns: No specific threat actor campaigns leveraging CVE-2019-14905 have been documented in the intelligence data provided. Organizations using affected Ansible versions for NXOS network management should still prioritize patching, as network infrastructure is a high-priority target for state-sponsored and financially motivated adversaries.


Report generated by ValterSIT Threat Intelligence for CVE-2019-14905. All detection rules are provided as starting points and should be tuned to the specific environment's log sources and data collection capabilities.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2019-14905/ · 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.