Security & Privacy · Clash Technical Blog

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

Clash Party users of the built-in Sub-Store should check the backend version. The public report covers 2.11.4–2.37.1. This guide explains how to disable it, update to 2.38.0 or later, restrict access to the local machine, preserve evidence, and roll back safely.

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

First, Confirm What the Public Report Covers

The public report in Sub-Store issue #634 identifies Node backend versions 2.11.4 through 2.37.1 as affected and describes the risk created by overly broad cross-origin access combined with script-processing capabilities. Upstream then used commit 038745f to tighten the default CORS policy, restrict some Node script operations, and add rejection tests. The 2.38.0 release notes explicitly close the issue.

As of 9/12/2026, the current stable Sub-Store release is 2.39.6. This guide treats 2.38.0 as the minimum version where upstream explicitly closed #634 and recommends updating to the current stable release. That does not mean 2.38.0 added authentication for every form of network exposure, nor can a version number tell you whether a device has already been affected.

Clash Party issue #2134 is a user report about a v2.0.2 environment. A bot later closed it under the project's security-reporting process, and a contributor recommended updating Sub-Store. Clash Party can update its built-in backend independently, so the client version alone does not reveal which Sub-Store version is running.

The v2.0.2 source code enables the built-in Sub-Store by default, but the local settings and actual listener determine its current state. Never opening the page, hiding its entry point, or deleting a subscription does not mean the backend is disabled.

Separate the Facts First

What You SeeWhat You Can ConcludeWhat This Does Not Prove
Sub-Store version is 2.11.4 through 2.37.1It falls within the public report's scope; stop exposing it and updateThe device has been exploited or infected
Clash Party shows v2.0.2The built-in backend still needs to be checkedEvery v2.0.2 installation uses the same backend version
Sub-Store is at 2.38.0 or laterIt includes the upstream mitigation that closed #634Every network source is protected by authentication
There are no unfamiliar processes or pop-upsNo obvious symptoms have been observed so farIt is safe to keep the old backend running
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.

Disable Sub-Store Before You Check

If Clash Party is running Sub-Store and you do not yet know the backend version, close untrusted web pages first and do not search for or run public exploit code. Open Settings > Sub-Store in Clash Party and turn off Enable Sub-Store. The official source code shows that this stops the built-in frontend and backend services.

Also confirm that Allow LAN remains off. When it is on, the service binds to 0.0.0.0 and devices on the LAN can access it directly; when it is off, the service uses 127.0.0.1. The public report includes a path in which a browser page reaches the loopback address, so disabling LAN access does not replace updating, but it does prevent the network exposure from expanding further.

Sub-Store is a tool for editing, converting, and managing subscriptions; it is not the Mihomo core itself. After you disable it, the Profile, policy groups, system proxy, and TUN already imported into Clash Party will usually continue to work. You simply will not be able to process subscriptions on the Sub-Store page.

Create a Safe, Reversible State First

  1. Close Untrusted Web Pages

    Keep only this guide and the project's official pages open. Do not test requests or scripts from unknown sources or use so-called detection sites.

  2. Turn Off the Enable Switch

    Go to the Sub-Store section in Settings, turn off Enable Sub-Store, and wait for the frontend and backend to stop.

  3. Disable LAN Access

    Confirm that Allow LAN is off. If you enable Sub-Store again later, keep it bound only to 127.0.0.1.

  4. Restart and Verify Normal Proxying

    Reopen Clash Party and complete a real HTTPS request with your existing Profile to confirm that disabling Sub-Store did not disrupt everyday proxying.

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.

Identify the Backend Mode First

Current modeWho runs itCorrect response
Built-in backendLocal service run by Clash PartyUpdate in the app, turn off Sub-Store Allow LAN, and check the local version
Custom backendExternal deployment specified by the userUpdate it separately at the deployment, restrict its listener, and configure authentication
Sub-Store not in useNo frontend or backend service should be runningTurn off the enable switch and verify after restarting that the services have stopped

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 is at or above the official minimum version that closed #634. Continue by checking the current stable release and listener scope.

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, and then investigate the configuration or another listener.

The page or version response will not open

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

Update Sub-Store in Clash Party

The following 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 code shows that it downloads the backend and frontend files from the latest official sub-store-org/Sub-Store Release, then restarts both services.

After starting the update, wait for the completion message. Do not exit the client midway or manually overwrite the bundle in the application directory at the same time. The minimum target is 2.38.0; the current target is 2.39.6, released on 9/11/2026. If a newer stable version is available later, follow the official Releases.

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, select the cloud-shaped button in the upper-right corner and wait for the download, restart, and completion message.

  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.

After Updating, Verify the Version, Listener, and Disable Switch

A successful update message is only the first verification step. After restarting Clash Party, read the actual backend address and data.version from the Sub-Store page again and confirm that the version did not revert. Also confirm that the address uses 127.0.0.1 rather than a LAN address or 0.0.0.0.

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.

Security Verification Checklist

  • The actual Sub-Store backend version is at least 2.38.0 and has been compared with the current official stable release
  • The version remains at the new value after restarting Clash Party
  • Allow LAN is off, and the backend host shown in the interface is 127.0.0.1
  • The frontend and backend services are no longer reachable after Enable Sub-Store is turned off
  • With Sub-Store disabled, the existing Profile, system proxy, or TUN can still complete a real request
  • When using a custom backend, its version, listener, and authentication have been checked separately at the external deployment
  • No PoC, unknown script, or third-party security testing page was run

Preserve Evidence First If You Suspect Exposure

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.

Minimum Incident-Response Actions

  • Sub-Store has been disabled and the affected device has been prevented from reconnecting to the network
  • Versions, listen address, timeline, alerts, and suspicious connections have been recorded
  • Original logs and configuration have been preserved, and public copies have been redacted
  • A scan has been completed with a trusted system security tool
  • Potentially exposed subscription Token and cloud credentials have been rotated from a trusted device
  • When integrity could not be confirmed, the old application directory was not copied directly into the new environment

If the Update Fails, Disable It—Do Not Restore the Old 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.

Review the Component Version Going Forward—Do Not Guess from the Client Name

The component at the center of this risk is the Sub-Store Node backend started by Clash Party, not the Mihomo core and not every client with Clash in its name. Future reviews should record the Clash Party version, Sub-Store data.version, Allow LAN state, and actual listen address together.

The official 2.38.0 release closed #634, and 2.39.6 is the current stable version at the time of this review; Clash Party #2134 remains a user report. If upstream later publishes a new security advisory, authentication mechanism, or Clash Party integration release, update these conclusions using the new official Release, commits, and documentation.

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

References