CVE-2025-9672
Executive Summary
CVE-2025-9672 is a security vulnerability in the Rejseplanen Android application (up to version 8.2.2) that allows improper export of Android application components. The flaw resides in the AndroidManifest.xml file, specifically within the de.hafas.android.rejseplanen package. By manipulating exported components, a local attacker can gain unauthorized access to sensitive data or functionality. The CVSS score is 5.3 (Medium), and the exploit has been publicly disclosed. The vendor has not responded to disclosure attempts, leaving the application unpatched.
Note: This is an Android application vulnerability, not a web server or WordPress issue. The attack vector is local, requiring physical or ADB access to the device.
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 does not involve NPM, PyPI, Go, or Ruby packages. It is a native Android application (APK) distributed via Google Play Store or sideloading. The supply chain risk is limited to the app’s distribution channel and the lack of vendor response.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Local (AV:L) – requires physical or ADB access to the device.
- Attack Complexity: Low (AC:L) – no special conditions.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – no user action required.
- Scope: Unchanged (S:U) – impact stays within the vulnerable component.
- Confidentiality Impact: Low (C:L) – limited data exposure.
- Integrity Impact: Low (I:L) – limited modification possible.
- Availability Impact: None (A:N) – no denial of service.
Threat Level: Medium. The local attack vector reduces exploitability in remote scenarios, but the public exploit and lack of patch increase risk for users with physical access to devices.
Deep Dive & Mechanics
The vulnerability stems from improper export of Android application components in the AndroidManifest.xml. In Android, components (activities, services, broadcast receivers, content providers) can be exported by setting android:exported="true" or by including intent filters. When exported, other apps or the system can interact with them without proper permissions.
In Rejseplanen App up to 8.2.2, the de.hafas.android.rejseplanen package exports components that should be private. This allows a malicious local app (or ADB commands) to:
- Launch activities that reveal sensitive data (e.g., user tokens, trip history).
- Start services that perform actions on behalf of the user.
- Access content providers to read or modify data.
The exact component is unknown, but the manipulation leads to improper export. The exploit is publicly disclosed, meaning attackers can craft a simple Android app or use ADB to trigger the vulnerability.
Technical Root Cause: The AndroidManifest.xml likely contains something like:
<activity android:name=".SensitiveActivity" android:exported="true"/>
or a content provider with android:exported="true" without proper permission checks.
Vulnerable vs. Patched Code
Since no patch exists, we compare the vulnerable manifest to a hypothetical secure version.
Vulnerable (Rejseplanen <= 8.2.2):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.hafas.android.rejseplanen">
<application>
<activity android:name=".SensitiveActivity" android:exported="true"/>
<provider android:name=".DataProvider" android:exported="true" android:authorities="de.hafas.android.rejseplanen.provider"/>
</application>
</manifest>
Patched (Hypothetical):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.hafas.android.rejseplanen">
<application>
<activity android:name=".SensitiveActivity" android:exported="false"/>
<provider android:name=".DataProvider" android:exported="false" android:authorities="de.hafas.android.rejseplanen.provider"/>
</application>
</manifest>
Or with proper permission checks:
<provider android:name=".DataProvider" android:exported="true" android:readPermission="de.hafas.android.rejseplanen.READ_DATA" android:writePermission="de.hafas.android.rejseplanen.WRITE_DATA"/>
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Android device with Rejseplanen <= 8.2.2 installed.
- ADB (Android Debug Bridge) enabled or a malicious app installed.
Exploit Steps:
- Identify exported components using
aaptorjadx:aapt dump xmltree Rejseplanen.apk AndroidManifest.xml - Launch an exported activity via ADB:
adb shell am start -n de.hafas.android.rejseplanen/.SensitiveActivity - Query an exported content provider:
adb shell content query --uri content://de.hafas.android.rejseplanen.provider - For a malicious app, create an Android app with an intent to start the activity:
Intent intent = new Intent(); intent.setComponent(new ComponentName("de.hafas.android.rejseplanen", "de.hafas.android.rejseplanen.SensitiveActivity")); startActivity(intent);
No Exploit-DB code provided.
Blue Team (Detection & Forensics)
Detection:
- Monitor for unexpected activity launches from unknown apps.
- Use Android’s
logcatto detect suspicious intents:adb logcat | grep -i "rejseplanen" - Check for unauthorized content provider queries via
content querycommands.
Forensics:
- Extract the APK and analyze
AndroidManifest.xmlfor exported components. - Check device logs for
ActivityManagerentries showingSTARTintents tode.hafas.android.rejseplanen.
Indicators of Compromise (IOCs)
- File:
AndroidManifest.xmlwithandroid:exported="true"on components inde.hafas.android.rejseplanen. - Process: Unauthorized
am startorcontent querycommands targetingde.hafas.android.rejseplanen. - Network: No network IOCs; attack is local.
- Log:
ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=de.hafas.android.rejseplanen/.SensitiveActivity}
Detection Engineering
YARA Rule
rule CVE_2025_9672_Rejseplanen_ExportedComponents {
meta:
description = "Detects Rejseplanen APK with exported components"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2025-9672"
strings:
$manifest = "AndroidManifest.xml"
$exported_true = "android:exported=\"true\""
$package = "de.hafas.android.rejseplanen"
condition:
$manifest and $exported_true and $package
}
Sigma Rule
title: CVE-2025-9672 - Rejseplanen Exported Component Abuse
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects ADB commands targeting exported components of Rejseplanen app
author: Valters IT
date: 2025-04-10
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'am start -n de.hafas.android.rejseplanen'
- 'content query --uri content://de.hafas.android.rejseplanen'
condition: selection
falsepositives:
- Legitimate debugging by developer
level: medium
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-9672 Rejseplanen Exported Component Exploit"; flow:to_server,established; content:"de.hafas.android.rejseplanen"; nocase; classtype:attempted-user; sid:1000001; rev:1;)
Note: This Suricata rule is for network detection of any traffic containing the package name, though the attack is local. Adjust for local host monitoring if needed.
Remediation & Mitigation
Immediate Actions:
- Uninstall Rejseplanen App until a patch is released.
- If uninstallation is not possible, restrict ADB access and avoid installing untrusted apps.
- Use Android’s “App Pinning” feature to limit app switching.
Long-Term Fix:
- The vendor must update
AndroidManifest.xmlto setandroid:exported="false"on all components that do not require external interaction, or implement proper permission checks.
Workarounds:
- Use a firewall app to block the app’s network access (though attack is local).
- Monitor device logs for suspicious activity.
Valters IT Signature:
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.