CVE-2023-49103
High · 7.5 CISA KEVCVSS
7.5
EPSS
77.8%
Published
Nov 21, 2023
CISA due date
Dec 21, 2023
Cloudanix analysis
A vulnerable ownCloud component can expose passwords and system details to anyone who visits a specific web address, so affected systems must be updated and exposed credentials replaced.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Trivial
- Impact
- Data Exposure
- Component
- Application
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2023-49103 is an unauthenticated information disclosure vulnerability in the ownCloud graphapi app. Vulnerable graphapi versions bundle a third-party Microsoft Graph test file, GetPhpInfo.php, that is reachable over the web and executes phpinfo(). When requested, it exposes PHP runtime configuration, server variables, environment variables, loaded modules, paths, and other deployment details. In containerized deployments, environment variables commonly contain secrets such as ownCloud administrator credentials, mail server usernames and passwords, database connection details, license keys, API tokens, and service endpoints. Because the vulnerable PHP file remains accessible even when the graphapi app is disabled, mitigation requires upgrading/removing the vulnerable component or deleting the exposed file rather than only disabling the app.
Why it matters to the business
An internet-facing vulnerable ownCloud instance can leak operational secrets without authentication, allowing attackers to harvest credentials and use them for account takeover, mail abuse, data access, lateral movement, or follow-on compromise. The risk is elevated because exploitation is simple, remotely accessible, listed in CISA KEV with a remediation due date of 2023-12-21, and has active in-the-wild exploitation with a high EPSS score. Even when no direct credentials are exposed, the phpinfo output can reveal infrastructure details that make later attacks easier. Organizations should assume any secrets present in the PHP environment may have been exposed if the endpoint was reachable.
How an attack unfolds
An attacker scans for ownCloud servers with the graphapi app installed and directly requests the exposed GetPhpInfo.php test script under the graphapi vendor path. No authentication, user interaction, or special conditions are required. If the file is present and web-accessible, the server returns a phpinfo page containing PHP configuration and server environment data. The attacker reviews the output for high-value values such as administrator passwords, mail credentials, database credentials, license keys, tokens, internal hostnames, and filesystem paths. The attacker can then use disclosed credentials to log in to ownCloud or related services, access or exfiltrate files, send mail through exposed SMTP credentials, pivot to backing services, or prepare additional attacks using the revealed configuration. Because this vulnerability is known to be exploited in the wild, historical access logs should be reviewed, not just current exposure.
How to fix it
Upgrade the ownCloud graphapi app to a fixed release: 0.2.x should be upgraded to 0.2.1 or later, and 0.3.x should be upgraded to 0.3.1 or later. If an immediate upgrade is not possible, remove or block web access to the vulnerable GetPhpInfo.php file under the graphapi vendor test path. Do not rely on disabling the graphapi app alone, because the vulnerable file may remain reachable. Restrict direct web access to vendor, test, and development files where possible. After remediation, rotate any secrets that may have appeared in PHP environment variables, including ownCloud administrator passwords, database credentials, SMTP/mail credentials, API keys, license keys, and container-injected secrets. For containerized deployments, move secrets out of broadly exposed environment variables where feasible and use a secrets manager or equivalent protected injection mechanism. Because this issue is in CISA KEV and actively exploited, treat remediation and credential rotation as urgent for all internet-facing ownCloud deployments.
How to confirm the fix worked
Confirm the installed graphapi version is 0.2.1 or later for the 0.2.x branch, or 0.3.1 or later for the 0.3.x branch. Verify that the file GetPhpInfo.php is not present in a web-accessible graphapi vendor test directory. From an unauthenticated network location, request /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php and confirm the server returns 404, 403, or another non-phpinfo response. A vulnerable response typically contains phpinfo content such as 'PHP Version', environment variable sections, loaded PHP modules, and server configuration tables. Review web server routing and access-control rules to ensure vendor and test directories cannot be served directly. After applying fixes, rescan externally and internally, and validate that rotated credentials are no longer accepted by ownCloud or dependent services.
Typical attack path
- Identify internet-facing ownCloud hosts through scanning, search engines, or known asset lists.
- Send an unauthenticated HTTP GET request to the exposed graphapi vendor test script, commonly /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php.
- Receive the phpinfo output if the vulnerable file is present and accessible.
- Extract environment variables, PHP configuration, paths, service endpoints, and any embedded credentials or tokens from the response.
- Use disclosed credentials or system details for follow-on access, account takeover, data theft, mail abuse, or lateral movement.
- Attempt to hide or minimize evidence by relying on normal web access patterns rather than deploying malware.
How to detect it
Review HTTP access logs from web servers, reverse proxies, WAFs, CDN layers, load balancers, and container ingress controllers for unauthenticated requests to GetPhpInfo.php, especially under the graphapi Microsoft Graph vendor test path. Focus on both successful responses and probing attempts, including 200, 403, and 404 status codes, because attackers may scan broadly before finding a vulnerable host. If response-size logging is available, phpinfo responses are often larger than typical error responses and may include a 200 status. Correlate any access to this endpoint with subsequent authentication events in ownCloud, mail servers, databases, VPN/SSO, and other services whose credentials may have been stored in environment variables. Look for logins from new IP addresses, unusual admin activity, new app passwords or tokens, unexpected file downloads, sharing-link creation, mailbox access, or SMTP abuse after the first observed endpoint access. In endpoint and container telemetry, look for the presence of the vulnerable GetPhpInfo.php file inside graphapi vendor directories and for webserver processes serving it. Forensics should preserve relevant access logs before rotation and determine which environment variables were exposed at the time of access, then drive credential rotation based on that exposure.
- /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php
- GET /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php
- POST /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php
- GetPhpInfo.php
- /apps/graphapi/vendor/microsoft/microsoft-graph/tests/
- apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php
- PHP Version
- phpinfo()
- _ENV
- $_ENV
- Environment
- owncloud_admin_password
- OWNCLOUD_ADMIN_PASSWORD
What your security team should do
- Immediately inventory all ownCloud deployments, especially internet-facing instances, and determine whether the graphapi app is installed.
- Prioritize remediation because the vulnerability is in CISA KEV, exploitation is active in the wild, the KEV due date has passed, and the EPSS score indicates high likelihood of exploitation.
- Upgrade graphapi to 0.2.1/0.3.1 or later, or remove/block the exposed GetPhpInfo.php file if an upgrade cannot be completed immediately.
- Do not treat disabling the graphapi app as sufficient mitigation; validate the vulnerable URL is no longer reachable.
- Search historical web access logs for requests to GetPhpInfo.php and the graphapi Microsoft Graph test path.
- If any access is found, assume environment variables were exposed and rotate all secrets that may have been present in the PHP/webserver environment.
- Review ownCloud, mail, database, and identity logs for suspicious authentication activity following any observed access to the vulnerable endpoint.
- Add SIEM detections and web application firewall rules for requests to graphapi vendor test files and phpinfo exposure paths.
- Harden web server configuration to deny direct access to vendor, test, example, and development directories across PHP applications.
- For containerized deployments, reduce secret exposure through environment variables and migrate sensitive values to controlled secret-management mechanisms where practical.
The record
An issue was discovered in ownCloud owncloud/graphapi 0.2.x before 0.2.1 and 0.3.x before 0.3.1. The graphapi app relies on a third-party GetPhpInfo.php library that provides a URL. When this URL is accessed, it reveals the configuration details of the PHP environment (phpinfo). This information includes all the environment variables of the webserver. In containerized deployments, these environment variables may include sensitive data such as the ownCloud admin password, mail server credentials, and license key. Simply disabling the graphapi app does not eliminate the vulnerability. Additionally, phpinfo exposes various other potentially sensitive configuration details that could be exploited by an attacker to gather information about the system. Therefore, even if ownCloud is not running in a containerized environment, this vulnerability should still be a cause for concern. Note that Docker containers from before February 2023 are not vulnerable to the credential disclosure.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|