CVE-2023-2138
Executive Summary
CVE-2023-2138 is a critical vulnerability involving the use of hard-coded credentials in the nuxtlabs/github-module, a Nuxt.js module designed for GitHub integration. This flaw affects all versions prior to 1.6.2 and has received a maximum CVSS score of 10.0, indicating the highest severity. The hard-coded credentials could allow remote attackers to authenticate to the application and access restricted functionality, potentially compromising GitHub tokens, repositories, and associated CI/CD pipelines. Given that this vulnerability is believed to be unpatched based on tracked intelligence sources, immediate mitigation is essential for organizations using this module.
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.
No signup required
Technical Analysis
According to the NVD description, CVE-2023-2138 resides in the nuxtlabs/github-module prior to version 1.6.2. The CNA title explicitly identifies the flaw class as "Use of Hard-coded Credentials" (mapped to CWE-798). This vulnerability class indicates that one or more authentication credentials, such as API keys, tokens, passwords, or cryptographic keys, are embedded directly within the source code, configuration files, or a public-facing artifact of the module.
The hard-coded credentials likely serve as default authentication tokens for API endpoints or administrative functions made available by the GitHub module. Because the credentials are embedded in the shipped code, any attacker who obtains a copy of the module — which is publicly distributed via npm, GitHub, or CDNs — can extract these credentials without needing any specialized access or reverse engineering skills. Once extracted, the attacker can authenticate to the vulnerable service or system as a legitimate user, bypassing the authentication mechanism entirely.
The technical mechanism of this vulnerability is straightforward: instead of requiring a nonce, challenge-response, or user-supplied secret, the module trusts a static credential that is identical across all deployments. This removes the variable required for secure authentication — uniqueness and secrecy — and creates a trivial authentication bypass path.
The NVD description is sparse and does not specify the exact location of the hard-coded credential, the affected API endpoints, or the precise functionality that can be accessed. No CWE ID is provided, no CVSS vector string is available beyond the base score of 10.0, and no affected version ranges or OSV package details are listed. The attack surface is any system that integrates the nuxtlabs/github-module (prior to 1.6.2) into a Nuxt.js application and exposes the module's authentication-protected functionality.
With an EPSS score of 0.00740 (51.2% percentile), the vulnerability is not actively exploited in the wild with high probability, but its maximum CVSS severity and the simplicity of exploitation make it a high-priority remediation target for any organization using the module.
Exploitation Scenarios
The NVD description provides minimal technical detail; therefore, the attack chain is inferred from the vulnerability class (hard-coded credentials). No public PoC code is available, and the exact implementation details are not disclosed.
Reconnaissance / Target Identification: An attacker scans the internet for applications built with Nuxt.js that include the github-module. Shodan, Censys, or Google dorks can be used to identify exposed applications. Alternatively, the attacker may perform supply-chain reconnaissance by examining public code repositories or npm package manifests that reference the module, allowing them to correlate installed versions.
Triggering the Flaw Class: The attacker obtains a copy of the vulnerable module (version < 1.6.2) from the public npm registry or GitHub repository. They extract the hard-coded credentials from the source code or bundled artifacts. No system interaction or user action is required to retrieve these credentials — this is a static analysis step.
Payload / Execution Method: At the vulnerability-class level, the attacker uses the extracted credentials to authenticate to the application's exposed endpoints that rely on the module's authentication mechanism. This may be performed by including the credentials in HTTP headers (e.g., Authorization tokens), cookies, or request parameters, depending on how the module handles authentication. Because authentication is trivially bypassed, the attacker gains access to the restricted functionality without needing any further payload or exploit scaffolding.
Post-Exploitation Impact: Once authenticated, the attacker could access GitHub tokens, repository metadata, webhooks, or CI/CD configuration files managed by the application. Depending on the privileges associated with the hard-coded credentials, the attacker may be able to read sensitive data, trigger deployments, or tamper with build pipelines. The maximum CVSS score (10.0) indicates that confidentiality, integrity, and availability are all fully compromised, though the exact post-exploitation surface depends on the module's feature set.
Impact Assessment
The impact of CVE-2023-2138 is severe due to the maximum CVSS base score of 10.0, indicating that exploitation requires no privileges, no user interaction, and no complex attack conditions, while resulting in total loss of confidentiality, integrity, and availability. The presence of hard-coded credentials effectively nullifies the authentication barrier, allowing any remote attacker who has obtained the module's code to impersonate a trusted client.
The primary blast radius is any Nuxt.js application integrating the github-module. Since GitHub integration often bridges the application to source code repositories, issues, PRs, and deployment workflows, a successful compromise could expose proprietary source code, GitHub access tokens, and CI/CD secrets. Downstream impacts could include supply-chain attacks if the attacker modifies repository content, injection of malicious code into the main branch, or unauthorized data exfiltration from private repositories.
Affected systems are those running versions prior to 1.6.2. Given that the patch confidence is 0/4 and no patch sources are referenced, organizations may remain vulnerable for an extended period. The EPSS score of 0.00740 indicates the vulnerability has not yet been widely exploited, but this low rate is likely due to awareness, not technical difficulty — the attack is trivial. The lack of a CISA KEV listing further suggests that no known exploitations have been officially confirmed.
Detection Guidance
Note on detection rules: The NVD description provides no specific indicators (file paths, function names, network traffic patterns, or log signatures). The rules below target the generic exploitation pattern of hard-coded credential abuse and the presence of known hard-coded credential strings or access patterns. Organizations should adapt these rules to their environment's logging and telemetry.
Sigma Rule
title: Obfuscated Hard-coded Credential Usage in GitHub Module Authentication
id: c2cfe1e0-3e6a-4a14-8fa9-4f7a5f1c5da2
status: experimental
description: Detects authentication attempts using hard-coded credentials associated with the nuxtlabs/github-module vulnerability CVE-2023-2138.
author: valtersit.com Threat Intelligence
logsource:
category: application
product: webserver
detection:
selection_auth:
cs-method: GET
cs-uri-query|contains:
- 'token='
- 'access_token='
- 'api_key='
selection_credential:
cs-uri-query|contains:
- 'github_module_default'
- 'github-token'
- 'ghp_'
condition: selection_auth and selection_credential
timeframe: 5m
level: high
falsepositives:
- Legitimate use of the module by authorized developers
tags:
- attack.t1078
- attack.credential_access
- cve.2023-2138
YARA Rule
rule CVE_2023_2138_Hardcoded_Credentials_GithubModule
{
meta:
author = "valtersit.com Threat Intelligence"
description = "Detects source code or artifacts containing hard-coded credentials associated with nuxtlabs/github-module"
cve = "2023-2138"
severity = "critical"
strings:
$cred1 = "GITHUB_TOKEN" ascii
$cred2 = "ghp_" ascii
$cred3 = "github_token" ascii
$cred4 = "client_secret" ascii
$cred5 = "access_token" ascii
$modref = "github-module" ascii
condition:
(uint16(0) == 0x5A4D or uint16(0) == 0x7F45) and 2 of them and $modref
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2023-2138 - Potential Hard-coded Credential Auth Attempt in GitHub Module"; flow:established,to_server; content:"GET"; http_method; content:"/auth"; http_uri; nocase; content:"token="; http_uri; nocase; content:"github"; http_uri; nocase; classtype:attempted-user; sid:1002138; rev:1; reference:cve,2023-2138;)
Elastic Detection
authentication where process.name == "node" and event.action in ("login", "authenticate") and http.request.body : "*github*" and (http.request.body : "*token*" or http.request.body : "*api_key*") and not process.args : "*internal*"
Splunk SPL Query
index=web sourcetype=access_combined
| where like(uri, "%token=%") OR like(uri, "%api_key=%") OR like(uri, "%client_secret=%")
| where like(uri, "%github%") OR like(uri, "%auth%")
| stats count by src_ip, uri, useragent
| where count > 10
Wazuh OSSEC Rule
<group name="github_module,">
<rule id="141425" level="15">
<decoded_as>web</decoded_as>
<match>CVE-2023-2138|github|token=|client_secret</match>
<description>Potential exploitation of CVE-2023-2138 - Hard-coded credential abuse in NuxtJS GitHub module</description>
<mitre><id>T1078</id><ref>https://attack.mitre.org/techniques/T1078/</ref></mitre>
<group>attack.valid_accounts,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch status: No patch evidence identified from tracked sources. CVE-2023-2138 is marked as UNPATCHED (patch confidence: 0/4). The affected version is prior to 1.6.2; no vendor fix or workaround has been provided at the time of writing.
Immediate Mitigations:
- Identify all deployments of nuxtlabs/github-module in organizational assets. Inventory the version in use and mark any version below 1.6.2 as vulnerable.
- If possible, restrict network access to the module's authentication endpoints using network segmentation or Web Application Firewall (WAF) rules to block traffic containing token-like parameters to the specific paths used by the module.
- Rotate any tokens or credentials that may have been exposed through the module; however, note that since the credentials are hard-coded, rotation of static, embedded secrets is not possible — this necessitates the disabling of the module's authentication features.
Patch / Upgrade Steps:
- Monitor the official nuxtlabs/github-module repository for the release of version 1.6.2 or later. Upgrade to the fixed version immediately upon availability.
- If the module cannot be upgraded, remove the github-module dependency from the application and replace it with an alternative GitHub integration approach that does not rely on embedded credentials.
- Constantly monitor NVD and vendor advisories for patch announcements.
Long-Term Hardening:
- Enforce a policy of "no secrets in code" by integrating secret scanning tools (e.g., GitHub secret scanning, TruffleHog, gitleaks) into the CI/CD pipeline.
- Use dynamic secret management systems (e.g., HashiCorp Vault, AWS Secrets Manager) to inject runtime credentials rather than relying on static values in source code.
- Perform periodic code audits focused on authentication mechanisms, verifying that no static credentials are embedded.
- Add detection rules from the Detection Guidance section to SIEM/EDR systems to monitor for authentication anomalies associated with the module.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-2138
- Huntr Advisory (CNA): https://huntr.dev/bounties/ \ (associated with @huntrdev report for nuxtlabs/github-module)
- Nuxt Labs GitHub Module Repository: https://github.com/nuxtlabs/github-module
- CWE-798: Use of Hard-coded Credentials: https://cwe.mitre.org/data/definitions/798.html
- MITRE ATT&CK T1078 — Valid Accounts: https://attack.mitre.org/techniques/T1078/
No public exploit code, PoC, CISA KEV listing, or confirmed exploit-in-the-wild campaigns were identified for CVE-2023-2138 at the time of writing.