Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain read access to Ansible verbose or AWX network logs
-
DeliverySearch logs for GET requests to rest.nexmo.com
-
ExploitExtract api_key and api_secret from URL query string
-
ExecutionAuthenticate to Vonage REST API using harvested credentials
-
ImpactSend 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Credentials traverse network to Vonage (AV:N); operator must run playbooks (PR:L); no integrity or availability impact applies.
Primary rating from Vendor (redhat).
CVSS VectorVendor: redhat
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Affected Products (CPE)CVE.org
More in Red Hat Enterprise Linux 10
View allHeap corruption via double-free in 389-ds-base's LDAP control parsing allows an unauthenticated remote attacker to crash
Remote code execution in Cockpit's web interface allows unauthenticated attackers to execute arbitrary commands on the h
Remote code execution in Samba's printing subsystem allows remote attackers to inject arbitrary shell commands via craft
Ghostscript can execute arbitrary shell commands with the privileges of its process when it renders a crafted PostScript
Use-after-free in librsvg during rendering of crafted SVG documents with nested XInclude directives and duplicate entity
A signed integer overflow vulnerability exists in the libtiff library's putcontig8bitYCbCr44tile function that leads to
The system CA trust store shipped in Red Hat's ca-certificates RPM packages includes eMudhra root authorities that signe
Authentication bypass in 389 Directory Server (shipped as Red Hat Directory Server 11-13 and within RHEL 6-10) lets remo
Remote code execution and privilege escalation in HPLIP (HP Linux Imaging and Printing) affects the hpcups print filter
Unauthenticated privilege escalation in FreeIPA (Red Hat Identity Management) allows a remote attacker to gain genuine a
A heap buffer overflow exists in libsoup's WebSocket permessage-deflate compression path: when a very large outbound mes
Remote code execution in libarchive on 32-bit systems allows unauthenticated attackers to execute arbitrary code via spe
EUVD-2026-38605
GHSA-87gp-wmhr-wgcw
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB