CVE-2026-102628
Executive Summary
CVE-2026-102628 is a configuration-exposure vulnerability in the Cadmos LTI application hosted at cadmos.eummena.io, where the Laravel framework was deployed with debug mode enabled (APP_DEBUG=true, APP_ENV=local) in a publicly accessible, internet-facing environment. An unauthenticated attacker can send a GET request crafted to trigger an unhandled exception, causing Laravel to render a detailed error page that discloses the full server environment — including all .env configuration variables — in plaintext. With a CVSS v3.1 base score of 9.3 (Critical), the flaw is trivially exploitable (AV:N/AC:L/PR:N/UI:N) and carries a scope change (S:C) because the leaked secrets can compromise systems beyond the vulnerable application itself.
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
The vulnerability class is CWE-215: Insertion of Sensitive Information Into Debugging Code. Laravel, like many PHP web frameworks, distinguishes between production and development execution contexts through environment variables. When APP_DEBUG is set to true, Laravel's exception handler renders verbose diagnostic output rather than a generic error page. Under the Ignition/Whoops-style error handler historically bundled with Laravel, that output includes:
- The full stack trace of the exception, with file paths and code excerpts
- The framework and PHP version
- Request and server metadata
- Environment variables loaded from the
.envfile
Critically, the NVD description states that the exposed environment includes "all .env configuration variables" rendered "in plaintext." The .env file in a Laravel deployment typically holds high-value secrets: APP_KEY (the application encryption key), database credentials (DB_USERNAME, DB_PASSWORD, DB_HOST), mail/SMTP credentials, third-party API keys, cache and session driver credentials (Redis/Memcached), and cloud storage keys. Disclosure of APP_KEY alone is severe: Laravel uses it for encryption, cookie signing, and password-reset token generation, so leakage can enable session forgery or decryption of protected data.
The simultaneous presence of APP_ENV=local compounds the issue. Laravel uses the local environment designation to enable developer-oriented behavior, and pairing it with a publicly reachable host indicates a staging or misconfigured production deployment that was never hardened. The attack surface is the public HTTP endpoint: no authentication is required, and no special tooling is needed — only a request that induces an unhandled exception (for example, malformed input, an invalid route parameter, or a type error surfaced to the exception handler). Because the exception handler is invoked on error paths rather than normal request paths, exploitation requires little more than identifying an input that the application fails to handle gracefully.
The specific request pattern, parameter, and endpoint that trigger the exception are not disclosed in the available data, and no public proof-of-concept exists. The precise URI, parameter name, and code path are therefore not asserted here.
Exploitation Scenarios
The following chain is inferred from the vulnerability class (CWE-215 / debug-mode information exposure). The exact trigger request and endpoint are not specified in available intelligence; no public PoC is available.
Reconnaissance / target identification. An attacker enumerates internet-facing Laravel applications. Fingerprinting can rely on distinctive framework artifacts (e.g., cookies, error page structure, response headers) or targeted queries against internet-wide scan services. The Cadmos LTI host at cadmos.eummena.io is publicly reachable, so no internal access is required.
Triggering the flaw class. Because debug mode is enabled, any request that produces an unhandled exception causes the framework to return a verbose error response. The attacker submits a GET request designed to break normal handling — for example, supplying input that fails type validation, references a missing resource, or otherwise raises an exception the application does not catch. On a properly configured production deployment (
APP_DEBUG=false), the same request would yield a generic error with no sensitive content.Payload / execution (vulnerability-class level). The "payload" here is not code execution but a malformed request that induces the exception. The server's verbose error output then reveals the environment block, including every variable from
.env. The attacker captures this response and parses it for secrets.Post-exploitation impact. With leaked credentials and keys, the attacker can pivot beyond the web app — consistent with the CVSS scope change (S:C) and High confidentiality (C:H). Typical follow-on actions include authenticating to the backend database, accessing third-party services with stolen API keys, decrypting or forging Laravel-encrypted data/cookies using the leaked
APP_KEY, and moving laterally to systems those secrets protect. Integrity impact is scored Low (I:L), reflecting that the primary effect is disclosure that enables further compromise rather than direct, guaranteed modification of the application.
Impact Assessment
- Confidentiality: High (C:H). The full
.envcontents — database credentials, mail credentials, API keys, and the application encryption key — are exposed to an unauthenticated attacker. This is a complete loss of confidentiality for the application's secret material. - Integrity: Low (I:L). Exposure does not by itself alter data, but the stolen
APP_KEYand database credentials materially raise the risk of downstream tampering and forged tokens. - Availability: None (A:N). No availability impact is described.
- Scope: Changed (S:C). The vulnerable component is the web application, but the disclosed secrets grant access to other components (databases, third-party services, session infrastructure), so impact crosses a security-authority boundary.
- Base score: 9.3 (Critical), vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N. Exploitation requires no privileges, no user interaction, and only network access, and the attack complexity is low.
Blast radius. Any system reachable with the leaked credentials is in scope — most notably the application database, external APIs tied to leaked keys, and any Laravel-signed sessions or encrypted data. Because secrets are long-lived, the exposure persists until they are rotated. EPSS has not yet been assigned by FIRST.org, and the CVE is not listed in CISA KEV; there is no confirmed exploit-in-the-wild evidence at this time.
Detection Guidance
Sigma Rule
title: Laravel Debug Mode Information Exposure via Unhandled Exception
id: 7c9f3a2e-1b64-4d21-9e77-cadmos-lti-2026
status: experimental
description: Detects HTTP responses from Laravel applications that leak debug/stack-trace
content and .env environment variables, consistent with APP_DEBUG=true (CVE-2026-102628).
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-102628
author: valtersit.com
date: 2026-09-02
logsource:
category: webserver
detection:
selection_status:
cs-method: 'GET'
selection_debug_markers:
response_body|contains:
- 'APP_DEBUG'
- 'APP_KEY'
- 'APP_ENV'
- 'Ignore this error and continue'
selection_trace_markers:
response_body|contains:
- 'Whoops'
- 'Laravel'
- 'Stack trace'
condition: selection_status and (selection_debug_markers or selection_trace_markers)
fields:
- c-ip
- cs-uri
- sc-status
falsepositives:
- Internal development/staging hosts not exposed to untrusted networks
- Security scanners and penetration testing in authorized scopes
level: high
tags:
- attack.t1190
- cve.2026-102628
- cwe.215
YARA Rule
rule CVE_2026_102628_Laravel_Debug_Env_Disclosure
{
meta:
description = "Detects Laravel debug/exception pages leaking .env environment variables (CVE-2026-102628)"
author = "valtersit.com"
date = "2026-09-02"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-102628"
cve = "CVE-2026-102628"
cwe = "CWE-215"
strings:
$env1 = "APP_DEBUG" ascii wide nocase
$env2 = "APP_KEY" ascii wide nocase
$env3 = "APP_ENV" ascii wide nocase
$env4 = "DB_PASSWORD" ascii wide nocase
$env5 = "DB_USERNAME" ascii wide nocase
$trace1 = "Whoops" ascii nocase
$trace2 = "Stack trace" ascii nocase
$trace3 = "Ignore this error and continue" ascii nocase
condition:
filesize < 5MB and
(
(2 of ($env*)) and
(1 of ($trace*))
)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-102628 Laravel Debug Mode Environment Disclosure"; flow:established,to_client; http.method; content:"GET"; http.response_body; content:"APP_DEBUG"; http.response_body; content:"APP_KEY"; http.response_body; content:"Laravel"; classtype:attempted-recon; reference:cve,2026-102628; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-102628; metadata:affected_product Laravel, cve CVE_2026_102628; sid:2026102628; rev:1;)
Elastic Detection
sequence by source.ip with maxspan=5m
[ network where http.request.method == "GET" and
http.response.status_code >= 500 ]
[ network where http.response.body : ("APP_DEBUG" and "APP_KEY") ]
Splunk SPL Query
index=web sourcetype=access_combined OR sourcetype=laravel
| eval body=_raw
| search (body="APP_DEBUG" AND body="APP_KEY")
OR (body="Whoops" AND body="Laravel" AND body="Stack trace")
| stats count min(_time) as first_seen max(_time) as last_seen
values(uri) as uris values(src_ip) as src_ips by host
| where count > 0
Wazuh OSSEC Rule
<group name="web,laravel,cve_2026_102628,">
<rule id="2026102628" level="12">
<decoded_as>json</decoded_as>
<match>APP_DEBUG|APP_KEY|APP_ENV</match>
<match>Whoops|Laravel|Stack trace|Ignore this error and continue</match>
<description>CVE-2026-102628: Laravel debug page leaking .env environment variables</description>
<mitre>
<id>T1190</id>
</mitre>
<group>cve_2026_102628,information_disclosure,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). The vendor reportedly disabled debug mode on the Cadmos LTI host on or before 2026-09-02, but no versioned fix, advisory, or CVE-specific patch is available. Treat any deployment with debug mode enabled in a public environment as affected.
Immediate mitigations
- Set
APP_DEBUG=falseon every internet-facing deployment. SetAPP_ENV=productionfor public hosts;localmust never be exposed publicly. - Ensure error responses return generic messages and never render stack traces or environment data. Verify via a deliberately induced exception that no
.envcontent appears. - Because exploitation only requires a GET request, assume any publicly exposed instance with debug mode enabled has already leaked its secrets. Rotate all secrets in the
.envimmediately:APP_KEY, database credentials, mail/SMTP credentials, cache/session credentials, and third-party API keys. RotatingAPP_KEYinvalidates signed cookies and tokens; plan for user session invalidation. - Restrict direct public reachability of administrative/staging hosts behind authentication or network allowlists.
- Set
Patch / upgrade steps
- No CVE-specific patch exists. Apply the operational fix: set
APP_DEBUG=false,APP_ENV=production, clear the config cache (php artisan config:clear/php artisan config:cache), and redeploy so the new environment values take effect. - Update Laravel and its dependencies to a current supported release and review the framework's exception-handling configuration for safe defaults.
- No CVE-specific patch exists. Apply the operational fix: set
Long-term hardening
- Enforce environment configuration through CI/CD policy checks that fail builds when
APP_DEBUG=trueis detected for any public tier. - Externalize secrets to a managed secrets store rather than a plaintext
.envfile, limiting what a single disclosure can yield. - Apply least privilege to database and API credentials so leaked keys have minimal reach.
- Continuously monitor for framework debug signatures and 5xx responses containing environment markers; alert on any occurrence.
- Since no public PoC, Nuclei template, or exploit code is currently known, prioritize detection of the exposure itself over signature-based exploit matching.
- Enforce environment configuration through CI/CD policy checks that fail builds when
References
- NVD — CVE-2026-102628: https://nvd.nist.gov/vuln/detail/CVE-2026-102628
- MITRE CWE-215 — Insertion of Sensitive Information Into Debugging Code: https://cwe.mitre.org/data/definitions/215.html
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
- Laravel documentation — Configuration and environment variables: https://laravel.com/docs/configuration
- FIRST.org EPSS — not yet scored for this CVE at time of writing: https://www.first.org/epss/
No threat actor campaigns or exploit-in-the-wild evidence are associated with this CVE in the available data. The CVE is not listed in CISA KEV.
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.