CVE-2025-27599
Executive Summary
CVE-2025-27599 is a medium-severity vulnerability affecting the Element X Android client (versions prior to 25.04.2). The flaw allows a crafted hyperlink on a webpage, or a locally installed malicious app, to force the Element X application to load a webpage with similar permissions to Element Call and automatically grant it temporary access to the device's microphone and camera. This is a classic UI redressing / permission bypass issue, exploiting the trust relationship between the Element X app and its embedded WebView or intent handling for Element Call.
The vulnerability has a CVSS score of 6.5 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood in the wild at the time of analysis. No public proof-of-concept (PoC) or exploit code is available. The vendor (Element) has released a patch in version 25.04.2.
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
Supply Chain & Package Security
This vulnerability is specific to the Android client (Element X Android). It is not a package dependency issue (NPM, PyPI, Go, Ruby). The risk is primarily to end-users who may be tricked into clicking a malicious link or installing a malicious app that exploits the permission delegation flaw.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
- Base Score: 6.5 (Medium)
- Attack Vector (AV): Network (N) – The attack is initiated via a hyperlink or a locally installed app.
- Attack Complexity (AC): Low (L) – No special conditions required beyond user interaction.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): Required (R) – The victim must click the link or open the malicious app.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same (Element X).
- Confidentiality (C): Low (L) – Limited access to microphone/camera data.
- Integrity (I): Low (L) – Potential to inject malicious content via the loaded webpage.
- Availability (A): Low (L) – Could cause denial of service by exhausting permissions.
Threat Level: Medium. The attack requires user interaction, but the impact (unauthorized access to microphone/camera) is significant for privacy.
Deep Dive & Mechanics
The vulnerability resides in how Element X Android handles intents and WebView permissions for the Element Call feature. Element Call is a separate component that requires microphone and camera permissions. The flaw allows a malicious actor to craft a hyperlink (e.g., intent://... or a custom URL scheme) that, when clicked, opens a webpage within the Element X app's WebView. This webpage is granted the same permissions as Element Call, including temporary access to the microphone and camera.
Attack Flow:
- The attacker crafts a malicious hyperlink (e.g.,
elementx://malicious.link) or a locally installed app sends a malicious intent. - The victim clicks the link or opens the app.
- Element X processes the intent and loads the attacker-controlled webpage in a WebView.
- Due to improper permission scoping, the WebView inherits the permissions of Element Call.
- The attacker's webpage can then access the microphone and camera without further user consent.
Root Cause: The application does not properly restrict the origin of WebView content when handling intents related to Element Call. It trusts any URL loaded via the intent mechanism, allowing a malicious page to inherit sensitive permissions.
Vulnerable vs. Patched Code
No specific code diff is available from public sources. However, based on the advisory, the patch (version 25.04.2) likely involves:
- Vulnerable: The intent handler for Element Call does not validate the origin of the URL being loaded. It grants permissions to any webpage loaded via the intent.
- Patched: The intent handler now validates that the URL being loaded is from a trusted domain (e.g.,
call.element.io) or uses a more restrictive permission model that does not automatically grant microphone/camera access to arbitrary webpages.
Hypothetical Code Snippet (Vulnerable):
// Vulnerable: No origin check
Intent intent = getIntent();
String url = intent.getDataString();
webView.loadUrl(url);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(PermissionRequest request) {
request.grant(request.getResources());
}
});
Hypothetical Code Snippet (Patched):
// Patched: Origin validation
Intent intent = getIntent();
String url = intent.getDataString();
if (url != null && url.startsWith("https://trusted.element.call")) {
webView.loadUrl(url);
// Still require user consent for permissions
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(PermissionRequest request) {
// Show dialog to user
if (userConsented) {
request.grant(request.getResources());
} else {
request.deny();
}
}
});
} else {
// Reject untrusted URLs
finish();
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- Element X Android version < 25.04.2 installed on a test device.
- A web server to host the malicious page.
- (Optional) A malicious Android app to send intents.
Exploitation Steps:
- Craft the Malicious Link: Create a hyperlink that uses the Element X custom URL scheme (e.g.,
elementx://attacker.com/malicious.html). - Host the Malicious Page: On your web server, host an HTML page that requests microphone and camera access:
<!DOCTYPE html> <html> <head> <title>Malicious Page</title> </head> <body> <h1>Click to Start Call</h1> <button onclick="startCapture()">Start</button> <script> async function startCapture() { try { const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true }); // Stream captured - attacker can now record alert('Access granted!'); } catch (e) { alert('Access denied: ' + e.message); } } </script> </body> </html> - Deliver the Link: Send the link to the victim via email, SMS, or social engineering.
- Trigger: When the victim clicks the link, Element X opens the malicious page in its WebView, which automatically grants microphone/camera access (due to the vulnerability).
- Exfiltrate Data: The malicious page can stream audio/video to the attacker's server.
Alternative (Malicious App):
- Develop a simple Android app that sends an intent to Element X with the malicious URL.
- The app does not need any special permissions itself.
Blue Team
Detection:
- Monitor for unusual intent calls to Element X from untrusted apps.
- Look for WebView loads of non-
element.iodomains within the Element X process. - Use network monitoring to detect streaming of audio/video data to unknown servers.
Hunting:
- Search for logs containing
onPermissionRequestevents in Element X. - Check for recently installed apps that may be sending malicious intents.
Mitigation:
- Immediately update Element X to version 25.04.2 or later.
- Educate users not to click on suspicious links, especially those using custom URL schemes.
- Implement app permission controls on Android to restrict intent handling.
Indicators of Compromise (IOCs)
- Network:
- Connections to domains not related to
element.ioormatrix.orgfrom the Element X app. - Unusual WebSocket or RTC streams from the device.
- Connections to domains not related to
- File System:
- No specific file-based IOCs.
- Process:
- Element X process loading WebView with URLs containing
getUserMediarequests.
- Element X process loading WebView with URLs containing
- Logs:
- Android logcat entries showing
PermissionRequestgranted for microphone/camera without user interaction.
- Android logcat entries showing
Detection Engineering
YARA Rule
rule CVE_2025_27599_ElementX_Android {
meta:
description = "Detects potential exploitation of CVE-2025-27599 in Element X Android"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-27599"
strings:
$s1 = "elementx://" ascii wide nocase
$s2 = "getUserMedia" ascii wide nocase
$s3 = "PermissionRequest" ascii wide nocase
condition:
any of ($s1) and any of ($s2) and any of ($s3)
}
Sigma Rule
title: CVE-2025-27599 - Element X Android Permission Bypass
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit CVE-2025-27599 via malicious intents or links
author: Valters IT
date: 2025-04-10
logsource:
product: android
service: logcat
detection:
selection:
- EventID: "PermissionRequest"
- Message|contains: "elementx://"
- Message|contains: "getUserMedia"
condition: selection
falsepositives:
- Legitimate use of Element Call
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-27599 - Element X Android Malicious Link"; flow:to_server,established; content:"elementx://"; http_uri; content:"getUserMedia"; http_uri; classtype:attempted-user; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Update Element X Android to version 25.04.2 or later. This is the only official patch.
- User Education: Inform users not to click on links from untrusted sources, especially those that open in Element X.
- App Permissions: On Android, review app permissions and disable "Install unknown apps" for untrusted sources.
Long-Term Measures:
- Code Review: Ensure all intent handlers validate the origin of URLs before loading them in WebViews.
- Permission Scoping: Implement strict permission scoping so that WebViews do not inherit permissions from other components.
- Security Testing: Conduct regular penetration testing on Android intent handling and WebView security.
Workarounds (if patching is not possible):
- Disable the Element Call feature temporarily.
- Use a firewall to block outbound connections from Element X to untrusted domains.
Valters IT
DevSecOps & Cyber Threat Intelligence