Security & Privacy · Clash Technical Blog

How Should Clash Party Users Handle the Built-in Sub-Store Risk?

Risk reports for the Sub-Store built into Clash Party cover 2.11.4–2.37.1. Check the backend version, disable it, update to 2.38.0 or later, and allow access only from the local machine. Preserve evidence if you suspect abnormal activity; do not enable vulnerable versions.

  • Clash Party
  • Sub-Store
  • Security update
  • Local API
  • CORS
On this page

When a risk report concerns a built-in subscription tool, first consider whether you need to keep it enabled. Client and backend versions change separately, so an app update alone is not enough to judge. Imported configurations usually remain usable; disabling the subscription-processing service does not clear your current nodes.

Check the security version of the Sub-Store backend inside Clash Party independently

Sub-Store edits, converts, and manages subscriptions; it is not the Mihomo core. After disabling it, use a Profile already imported into Clash Party to check that policy groups, the system proxy, and TUN still work. They are usually unaffected; subscription processing on the Sub-Store page is what stops.

Clash Party can update its built-in backend independently, so the client version does not establish whether Sub-Store is safe. Clash Party #2134 is a user report from a v2.0.2 environment. A contributor recommended updating Sub-Store, but it does not provide a maintainer-confirmed risk conclusion.

The public report in Sub-Store issue #634 covers Node backend versions 2.11.4 through 2.37.1. The 2.38.0 release notes explicitly close the issue. As checked on 2026/9/23, the stable version is 2.41.0; update to it or a later verified stable release. The fix does not authenticate all network access, and a version number cannot prove the device was never affected.

The v2.0.2 source enables built-in Sub-Store by default. Check the local switch and listening address to know whether it is running. Not opening the page, hiding the entry, deleting a subscription or seeing no pop-up does not prove it has stopped. If the version is unknown, disable the service as described next, then check its actual local address.

Local Sub-Store Request Path Described in the Public Report
  1. Untrusted web pageAn external page open in the browser sends a cross-origin request
  2. Browser origin checkThe older Node backend allows overly broad origins by default
  3. Local Sub-Store APISeparate frontend and backend services started by Clash Party
  4. Script-processing capabilityThe subscription-processing context may execute script operations

2.38.0 narrows the default origin scope and restricts some script operations, but CORS is not API authentication. You should also disable LAN access, and disable Sub-Store entirely when you cannot confirm the version.

If the version is unknown, disable the service and LAN access in “Settings > Sub-Store”

If Sub-Store is running in Clash Party and you do not know the backend version, close untrusted web pages and do not look for or run public exploit code. Open Settings > Sub-Store. While the switches are visible, turn off Allow LAN access, then Enable Sub-Store to stop the built-in frontend and backend. If already disabled, do not re-enable the service just to change a hidden switch.

Allow LAN access binds to 0.0.0.0 when enabled, allowing direct access from LAN devices, and uses 127.0.0.1 when disabled. The report also covers web pages accessing local loopback addresses, so turning off LAN access does not replace an update. Restart the app and complete a real HTTPS request with the existing Profile to confirm normal proxying still works.

Record the Actual Backend Version and Listen Address

Before updating, open Settings > Sub-Store and confirm whether you use the built-in backend or a custom backend. In built-in mode, Clash Party starts a local bundle. Custom mode stops the built-in backend and connects to the URL you provide; an in-app update cannot replace the external deployment's own upgrade, listener restrictions, and authentication.

When using the built-in backend, close untrusted web pages, temporarily enable Sub-Store, and keep Allow LAN off in the same settings section. On the Sub-Store page, use Open in Browser and rely on the actual address shown in the interface. Do not assume every device uses the same fixed port.

The Clash Party v2.0.2 source code shows that the backend starts looking for an available port at 127.0.0.1:38324 and increments the port if it is occupied. When you open the backend root address, the Sub-Store response reports the actual version in data.version. Record only the version and address; do not submit script parameters or perform exploit testing.

If the version is between 2.11.4 and 2.37.1, update immediately. A version older than 2.11.4 falls outside this report's scope but is still clearly outdated and should be updated to the current stable release. If the page will not open or you cannot confirm the version, return to the disabled state; do not treat unknown as safe.

Backend shows 2.11.4 through 2.37.1

This is within the public report's scope. Keep it local-only and apply the upstream update immediately.

Backend shows 2.38.0 or later

It meets the version requirements stated in the official guidance in #634. Still check the current stable release and which addresses the backend listens on.

Only the Clash Party v2.0.2 version is known

That is not enough information; the same client version may run different Sub-Store backends.

The browser address is not 127.0.0.1

Disable the service first, turn off Allow LAN, then check the configuration or other programs listening for connections.

The page or version response will not open

Do not expose the service repeatedly. Keep it disabled and retry through the official update path.

Long-Term Maintenance Record

Item to recordWhy it mattersWhen to review it
Sub-Store data.versionDetermine whether the separate backend meets the minimum fixed versionAfter every in-app update
Allow LAN and listen addressConfirm that the API has not been exposed to the LANAfter network or settings changes
Clash Party versionUnderstand the interface and update pathAfter a client upgrade
Official Release and security notesAvoid presenting a user report as an official conclusionWhen a new version or alert appears

Update Sub-Store in Clash Party

These steps apply only to the built-in Clash Party backend. The Sub-Store page has a cloud-shaped Check for updates button in the upper-right corner.

The v2.0.2 source shows that it downloads the backend and frontend from the official latest Release of sub-store-org/Sub-Store and sub-store-org/Sub-Store-Front-End respectively, then restarts both services.

The minimum target is 2.38.0. The target checked for this article is 2.41.0, released on 2026/9/22. Check the official Releases when choosing another stable version later.

Updating the Mihomo core, refreshing a subscription, or reinstalling the same Clash Party client does not replace checking the Sub-Store backend. It is downloaded and run as a separate component, so you must update it on its own page and read its own version number.

Use Only the Official In-App Update Path

  1. Keep the Listener Local

    Confirm that Allow LAN is off, and close any other untrusted browser pages.

  2. Select Check for Updates

    On the Sub-Store page, click the cloud-shaped Check for updates button in the upper-right corner. Wait for downloading, service restart and the completion message. Do not quit the client or manually overwrite the bundle in the app directory during this process.

  3. Read the Version Again

    Use the actual backend address shown on the page again and confirm that data.version is at least 2.38.0.

  4. Disable It If the Update Fails

    If the download, restart, or version check fails, turn off Enable Sub-Store. Do not downgrade or copy files from a third party.

Commit 038745f tightens default CORS, restricts some Node script operations, and adds rejection tests. Requests without Origin still receive different handling, and Clash Party’s custom backend name also leaves some script restrictions inapplicable. These changes do not ensure that every API call is authenticated.

Recheck the official Release notes, commits, and documentation when security advisories or authentication mechanisms change.

After updating, check the backend version, confirm access is limited to this device, and verify that disabling stops the service

After restarting Clash Party, read the actual backend address and data.version from the Sub-Store page. Confirm the updated version remains and the address is 127.0.0.1, not a LAN address or 0.0.0.0. An update-success message alone is insufficient.

Then turn off Enable Sub-Store and confirm that the frontend and backend pages are no longer reachable. Complete a real HTTPS request with your existing Profile. This verifies both that the disable switch actually stops the separate services and that normal proxying does not depend on Sub-Store running continuously.

Treat unusual processes, connections or credential changes as a possible compromise

A version within the reported range does not mean the device was exploited. Escalate the incident to a possible device compromise only when there is evidence such as unknown processes, unusual network connections, security-software alerts, or unexpected changes to configuration or credentials. At that point, updating can block the entry path going forward, but it cannot remove an existing program or restore leaked credentials.

Disable Sub-Store first and disconnect the device from the network. Record the Clash Party and Sub-Store versions, listen address, alert time, and suspicious behavior. Do not immediately delete logs, configuration, or unfamiliar files in an attempt to clean up; they may be important evidence for determining the scope of impact.

Run a full scan with security tools approved by the operating-system vendor or your organization. If a subscription URL, node credentials, WebDAV, GitHub Token, or other secrets were present on the device, invalidate and reissue them from a trusted device. Create a redacted copy before sharing logs. If you cannot establish the device's integrity, reinstall the system or client from an official source and restore only configuration confirmed to be clean.

Disable Sub-Store if updating fails or causes incompatibility; never enable a vulnerable backend

If version 2.38.0 or later breaks a subscription conversion or script, do not downgrade to 2.37.1 or earlier to restore the feature. Disable Sub-Store first and continue using the verified working Clash Party Profile. When you need to restore the subscription, obtain the original link again from a trusted provider or import a clean backup made before the upgrade.

Re-enable Sub-Store for testing only with the new version, Allow LAN off, and the listener restricted to 127.0.0.1. If a third-party script still depends on the restricted old behavior, stop using it and contact its maintainer for an update instead of opening up the entire local API.

Keep a Rollback Path, but Not to a Risky Version

  1. Stop the Separate Services

    Disable Sub-Store and confirm that the frontend and backend have stopped.

  2. Restore a Working Profile

    Use the configuration that still works in the app, or import a clean copy saved before the upgrade.

  3. Verify Everyday Proxying

    Pin a known working node, then verify the system proxy or TUN with a real request.

  4. Wait for a Compatibility Fix

    Follow official updates for Sub-Store and the relevant scripts. Do not restore a 2.37.1 or earlier bundle.

References