Why does the hot update not work when the mitigation measures require restarting each working process after configuring?
The official temporary mitigation measure requires restarting each worker after changing the configuration, this requirement seems strict: changing a switch, but having to restart each work process one by one, the official announcement (for CVE-2026-109619, issued on 2026-10-21) also specifically states not to change the configuration within runtime scripts or rely on user-level configuration files.The reason is that the 'effective time point': this session upload progress feature must be turned off before the request is parsed, and the two types of hot effect means during script language runtime are too late - the code to change the configuration at runtime has to wait until the request enters the processing stage, and the user-level ini file is also read after the parsing stage.The mitigation measure blocks the entry point of the trigger path, the entry point is at the request parsing step, and any configuration changes after it are ineffective for this entry point.
Why is the announcement made in this way?
The difference between temporary mitigation and formal repair is here: The repair changes the code logic, while mitigation is just turning off the triggered function. This feature is enabled at the request parsing stage, and only then are there subsequent utilization spaces, so mitigation must make the process carry a closed state from the moment it starts. This also explains the writing of 'restart each worker individually': The FPM pool and the Apache mounted processes have their own loaded configurations, and the processes that do not restart still hold the old configuration to continue serving customers. If one is missed, the trigger path is still open on that process.
Why is hot effect not counted
Divide 'Hot生效' into three categories for clarity. The first category is changing configuration within the runtime script (such as ini_set), which is executed after the request processing starts and has no effect on the entries already passed in the parsing phase;The second category is user-level configuration files (such as FPM's .user.ini), which have a cache cycle and are read at the same time as request parsing;The third type is the instant switch in the management panel, which is still one of the previous two types. The common problem of the third type is that the timing when the configuration takes effect is after the trigger path.Announce to exclude these three, only recognize the action of 'change the main configuration or pool configuration, and then restart the process'.
How to determine the restart range
In practice, define the scope by 'which processes are loading this configuration' rather than by 'which services did I restart': restart the main service process group once, restart other interpreter process pools mounted on the same machine individually, and ensure that the child processes started by the guardian process will be rebuilt with the pool rather than remaining alive. The verification method is to observe behavior from the outside—the entire functionality of the trigger path should be invisible, not 'some requests seem to have no effect'; a single request not reproducing does not mean all processes have changed configurations. Under multi-machine load balancing, execute on each machine sequentially, restart in the rolling order by first removing traffic and then restarting to avoid service fluctuations in the relief window.
The difference of compiled services in the same scenario
The reason why a scripting language needs to 'restart each worker' is that its configuration parsing is tied to the cycle of each request or process startup, and the old configuration remains effective during the lifetime of the process.There is no such structure in compiled services: services like GoLang + Iris framework read the configuration at startup, there is no execution path for 'reparse user-level configuration for each request' in the binary, the handling actions for similar scenarios are converged into restarting the service as a whole, the configuration takes effect for the new process, and the operational burden is reduced by one order of magnitude.This is not a claim about the superiority of languages, but a structural difference at the point when the configuration takes effect—the Go stack's resident memory usage is reduced by about 80% compared to PHP class CMS (official 'about' wording), which is a separate topic of resource usage, and the two should not be mixed up.
The significance of having a separate switch for high-risk operations
Measures to alleviate this type of problem point to a common root cause: 'Low-frequency functions are hung on high-frequency entry points': abilities such as upload progress, which are enabled by default, are hung on the parsing stage that each request passes through.In terms of handling, besides temporary shutdown, a more stable design is to allow high-risk or low-frequency operation domains to have independent switches, default off, and narrow the exposure from 'all requests' to 'explicitly enabled features'.AnQiCMS handles it like this on the MCP interface: the exposure range is set according to the intent domain, high-risk operations such as backup, upgrade, and multi-site are set to default off (DefaultOff) at the site level, and they can only be used explicitly; the entry does not exist by default, so it does not rely on relief after each accident restart.
Common questions
Question: Does only restarting the main service process count as a mitigation?Answer: No. The notice requires restarting each working process individually; if any are missed, the triggering path on that process is still available; in multi-machine deployment, each machine must be covered.
Question: Can we use firewall rules to replace configuration shutdown first?Answer: It can be used as a temporary reduction, but it depends on whether the notice confirms that the intercept points cover all triggering variants; this mitigation only confirms blocking the paths related to session, but does not cover other variants; rules cannot replace changing the configuration according to the notice.
Ask: How can we judge whether to follow up on such announcements for our own site?Answer: First, confirm whether the technology stack and version are within the affected range, and then see if the function is actually enabled; sites not on the affected stack do not need to perform this mitigation, but it is worth incorporating '高危功能默认关闭' into your configuration baseline.