Skip to main content

Ansible nexmo Module EUVDEUVD-2026-38605

| CVE-2026-11820 MEDIUM
Insertion of Sensitive Information into Log File (CWE-532)
2026-06-23 redhat GHSA-87gp-wmhr-wgcw
6.5
CVSS 3.1 · Vendor: redhat
View

Attack ChainAIDerived

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

  1. Access
    Obtain read access to Ansible verbose or AWX network logs
  2. Delivery
    Search logs for GET requests to rest.nexmo.com
  3. Exploit
    Extract api_key and api_secret from URL query string
  4. Execution
    Authenticate to Vonage REST API using harvested credentials
  5. Impact
    Send fraudulent SMS or access account data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A09:2025 - Security Logging & Alerting Failures
ASVS 5.0
V16 - Security Logging and Error Handling Log data sanitization
Exploitation Conditions

The vulnerability triggers whenever the Ansible nexmo module is invoked to send an SMS, regardless of playbook flags, because the GET-based URL construction is unconditional. Exploitation is limited to parties who can access one of: Ansible control-node verbose output (requires -vvv flag or AWX debug logging enabled), network proxy or SIEM logs capturing HTTP GET URLs, or Vonage/Nexmo server-side access logs (requires compromise or insider access at Vonage). Authenticated access to run Ansible playbooks (PR:L) is required to generate the credential-bearing request, but the attacker harvesting the credentials does not need to be the operator - any log reader on any of the above systems suffices. No special Ansible configuration enables the flaw; it is present in all deployments using this module.

Impact

The CVSS 3.1 score of 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) correctly characterizes the core exposure: network-traversing credential leakage requiring only low-privileged Ansible operator access. The C:H rating is well-justified because full API credential compromise enables an attacker to impersonate the victim account with Vonage. The I:N and A:N ratings are appropriate - this is a passive disclosure flaw with no direct write or denial-of-service capability against the Ansible host. No EPSS score was provided, and KEV status is not confirmed; exploitation does not require active network position but rather passive log access, which significantly lowers the exploitation barrier for insiders and log-system compromises. There is no conflicting signal between the CVSS vector and the description - PR:L is appropriate since the credentials belong to an operator running Ansible playbooks, and AV:N reflects that credentials traverse the network to Vonage's servers. Real-world risk is meaningful wherever Ansible verbose logging, AWX, or network inspection is enabled, but is bounded by the niche use of the nexmo module itself.

Exploit ScenarioDerived

An insider or attacker with read access to Ansible AWX network debug logs or a network proxy that logs full request URLs searches for GET requests to rest.nexmo.com and extracts api_key and api_secret values directly from the query string. With these credentials the attacker authenticates to the Vonage API and can send fraudulent SMS messages or enumerate account details at the victim's expense. No exploit code is required beyond standard log inspection.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 23, 2026

Credential exposure in the Ansible nexmo module (plugins/modules/nexmo.py) causes Vonage/Nexmo API keys and secrets to appear in plaintext within HTTP GET request URLs, bypassing the no_log=True protection entirely. The module affects Red Hat Enterprise Linux 8, 9, and 10 deployments, and credentials are captured passively in Ansible verbose output, network proxy logs, SIEM traffic inspection, AWX/Automation Controller debug logs, and Vonage server-side access logs. No public exploit identified at time of analysis, though exploitation requires only read access to any of these log sources.

RemediationAI

The recommended fix is to replace the HTTP GET with a POST request, placing credentials in the request body rather than the URL query string. The CVE description provides the corrected approach: use fetch_url with method='POST', encode api_key and api_secret into the POST body via urlencode, and set Content-Type to application/x-www-form-urlencoded - this ensures credentials never appear in URLs or URL-bearing log lines. No patched version number has been confirmed from available data; users should monitor https://access.redhat.com/security/cve/CVE-2026-11820 and https://bugzilla.redhat.com/show_bug.cgi?id=2488970 for patch availability. As an immediate compensating control, avoid running Ansible playbooks that use the nexmo module with verbose flags (-v, -vv, -vvv) and restrict access to AWX/Automation Controller network debug logs to minimize passive credential capture. Note that even without verbose logging, credentials remain exposed in Vonage server-side access logs and any network intermediaries, so suppressing local logging alone does not fully remediate the issue.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

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

Technical ContextAI · show details

CWE-532 (Insertion of Sensitive Information into Log File) describes this class of flaw: sensitive data inadvertently written to observable output. Here, the Ansible no_log=True directive suppresses module parameter values from appearing in Ansible task output, but it operates only at the Ansible parameter-logging layer - it has no effect on what the module subsequently does with those values. The module assembles a Python dict containing api_key and api_secret, passes it through urlencode(), and appends the result as a query string to a GET request targeting rest.nexmo.com. Ansible's fetch_url helper then issues the HTTP request, exposing the full URL (credentials included) in verbose mode (-vvv) and across any network path the request traverses. The CPE data confirms the module is distributed via Red Hat Enterprise Linux 8, 9, and 10 Ansible tooling packages. The Vonage REST API accepts credentials via GET query parameters, making this design choice possible but deeply unsafe in any logged environment.

Know when Red Hat Enterprise Linux 10 gets its next vulnerability

  • 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 (redhat) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI 6.5 MEDIUM

Credentials traverse network to Vonage (AV:N); operator must run playbooks (PR:L); no integrity or availability impact applies.

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

Primary rating from Vendor (redhat).

CVSS VectorVendor: redhat

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

DescriptionCVE.org

Module: plugins/modules/nexmo.py

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

Issue: api_key and api_secret are declared no_log=True at the input level, but both credentials are immediately URL-encoded into a GET request as query parameters, bypassing all no_log protection.

Vulnerable Code (lines 82-93):

msg = { "api_key": module.params.get("api_key"), "api_secret": module.params.get("api_secret"), "from": module.params.get("src"), "text": module.params.get("msg"), } url = f"{NEXMO_API}?{urlencode(msg)}" response, info = fetch_url(module, url, headers=headers)

Observed Output:

https://rest.nexmo.com/sms/json?api_key=a1b2c3d4&api_secret=MyS3cr3tK3y!!&from=AnsibleBot&to=15551234567&text=Hello

Exposure Vectors:

Ansible verbose output (-vvv) logs the full request URL

Vonage/Nexmo server access logs record credentials in query string

HTTP proxies, SIEM, and network inspection tools capture the full URL

AWX/Automation Controller network debug logs

Fix: Switch to POST with credentials in the request body:

data = urlencode({"api_key": api_key, "api_secret": api_secret, "from": src, "to": number, "text": msg}) fetch_url(module, NEXMO_API, data=data, method="POST", headers={"Content-Type": "application/x-www-form-urlencoded"})

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Low
niche SMS notification module, limited production use
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Affected Products (CPE)CVE.org

cpe:2.3:a:red_hat:red_hat_enterprise_linux_10:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_8:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_8:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_9:*:*:*:*:*:*:*:*
CVE-2026-18663 MEDIUM
5.9 Aug 12

Heap corruption via double-free in 389-ds-base's LDAP control parsing allows an unauthenticated remote attacker to crash

CVE-2026-4631 CRITICAL POC
9.8 Apr 07

Remote code execution in Cockpit's web interface allows unauthenticated attackers to execute arbitrary commands on the h

CVE-2026-4480 CRITICAL POC
9.0 May 26

Remote code execution in Samba's printing subsystem allows remote attackers to inject arbitrary shell commands via craft

CVE-2026-101258 HIGH POC
7.8 Oct 06

Ghostscript can execute arbitrary shell commands with the privileges of its process when it renders a crafted PostScript

CVE-2026-96889 HIGH POC
7.8 Sep 23

Use-after-free in librsvg during rendering of crafted SVG documents with nested XInclude directives and duplicate entity

CVE-2026-4775 HIGH POC
7.8 Mar 24

A signed integer overflow vulnerability exists in the libtiff library's putcontig8bitYCbCr44tile function that leads to

CVE-2026-114406 MEDIUM POC
6.8 Oct 21

The system CA trust store shipped in Red Hat's ca-certificates RPM packages includes eMudhra root authorities that signe

CVE-2026-18922 CRITICAL
9.8 Sep 07

Authentication bypass in 389 Directory Server (shipped as Red Hat Directory Server 11-13 and within RHEL 6-10) lets remo

CVE-2026-14544 CRITICAL
9.8 Jul 03

Remote code execution and privilege escalation in HPLIP (HP Linux Imaging and Printing) affects the hpcups print filter

CVE-2026-76578 CRITICAL
9.8 Sep 07

Unauthenticated privilege escalation in FreeIPA (Red Hat Identity Management) allows a remote attacker to gain genuine a

CVE-2026-102560 CRITICAL
9.8 Sep 29

A heap buffer overflow exists in libsoup's WebSocket permessage-deflate compression path: when a very large outbound mes

CVE-2026-5121 HIGH
7.5 Mar 30

Remote code execution in libarchive on 32-bit systems allows unauthenticated attackers to execute arbitrary code via spe

Vendor StatusVendor

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