Listen to this Post
How the CVE works (technical details):
- The endpoint `objects/plugins.json.php` is publicly accessible without authentication.
- This script returns a JSON object containing plugin metadata, including a field named
APISecret. - The `APISecret` is a static token used by the API endpoint `plugin/API/get.json.php` to authenticate requests.
- An attacker sends a GET request to `objects/plugins.json.php` to retrieve the raw JSON.
- The response includes the `APISecret` in plaintext under
plugin.object_data. - The attacker extracts the `APISecret` value using a simple regex or JSON parser.
- The API endpoint `plugin/API/get.json.php` expects two parameters: `APIName` and
APISecret. - It does not verify the request origin or session; it only checks if the provided `APISecret` matches the stored value.
- By supplying the stolen secret, the attacker bypasses all authentication mechanisms.
- The API method `users_list` is protected but trusts the `APISecret` as sufficient proof.
- The attacker can call `users_list` with additional parameters like `rowCount` and
current. - The response returns sensitive user data (usernames, emails, roles, etc.) without any login.
- The vulnerability exists because `plugins.json.php` should be restricted to admin users only.
- No rate limiting or brute-force protection is applied to either endpoint.
- The secret is hardcoded or generated once, making it a static shared secret.
- An attacker can also discover other API methods by fuzzing `APIName` parameter.
- The API may allow write operations (e.g.,
user_add,config_set) if exposed. - Logging does not record unauthenticated accesses to `plugins.json.php` in many deployments.
- The issue is a combination of insecure direct object reference (IDOR) and broken authentication.
- Exploitation requires only a single HTTP request to leak the secret, then a second to abuse the API.
dailycve form:
Platform: Generic PHP
Version: Any vulnerable
Vulnerability: Unauthenticated secret leak
Severity: Critical
Date: 2025-03-15
Prediction: Patch within 48h
What Undercode Say:
Leak APISecret curl -s 'http://target/objects/plugins.json.php' | jq '.plugin.object_data.APISecret' Exploit API using stolen secret SECRET=$(curl -s 'http://target/objects/plugins.json.php' | jq -r '.plugin.object_data.APISecret') curl -G 'http://target/plugin/API/get.json.php' \ --data-urlencode "APIName=users_list" \ --data-urlencode "APISecret=$SECRET" \ --data-urlencode "rowCount=10" \ --data-urlencode "current=1"
Exploit:
1. GET `/objects/plugins.json.php` → extract `APISecret`.
2. GET `/plugin/API/get.json.php?APIName=users_list&APISecret=&rowCount=3¤t=1` → dump users.
- Repeat for other `APIName` values (e.g.,
user_roles,system_info).
Protection from this CVE:
- Move `plugins.json.php` behind admin authentication (session cookie or bearer token).
- Regenerate `APISecret` and store it hashed; API should validate using a time‑limited nonce.
- Implement IP whitelisting or rate limiting on the API endpoint.
- Disable public access to any `.json.php` files via `.htaccess` or web server rules.
Impact:
- Full read of user database (names, emails, hashed passwords if exposed).
- Potential privilege escalation by calling `user_update` or `role_assign` API methods.
- Complete compromise of the application’s backend data.
- No authentication required, enabling automated attacks.
🎯Let’s Practice Exploiting & Learn Patching For Free:
Sources:
Reported By: github.com
Extra Source Hub:
Undercode

