aaPanel_Kern
Happy to be specific - but two different things got mixed up, so let me separate
them. I have changed nothing on my server; this is purely a report of what is
there.
1. It is not a configuration file — it is a function in your code
The upload path I asked about is test_file() in
class_v2/projectModelV2/safecloudModel.py, at line 2162 in the v8.22.0 file
now on my server:
2162 def test_file(self, get):
…
2184 url = self.GetCheckUrl()
2191 upload_data = {
2192 'inputfile': self.ReadFile(filepath),
2193 'md5': self.FileMd5(filepath)
2194 }
2197 upload_res = requests.post(url, upload_data, timeout=20).json()
GetCheckUrl() (line 2120) fetches the target from
{OfficialWebShellCheckBase()}/checkWebShell.php, and ReadFile() (2137)
returns fp.read() — the whole file, capped at 1 MB by the check at line 2180.
So this is not something an administrator can delete. My question was simply
whether it is meant to stay, and if so, whether the administrator who triggers
it is told that the file leaves the server. I am not asking for its removal —
an explicit, per-file action is a different matter from an automatic scan, and
you have already fixed the automatic one.
2. The configuration files — here is exactly what is on disk
/www/server/panel/data/safeCloud/, measured today, with age:
alarm_trend.json 1,098 B 2026-08-27 09:07 0 days
cloud_config.json 80 B 2026-08-07 21:29 20 days
config.json 1,166 B 2026-07-15 00:32 43 days
dir_record.db 143,360 B 2026-08-07 21:29 20 days
install_time.pl 17 B 2026-07-09 17:13 49 days
last_scan.json 201 B 2026-08-07 21:29 20 days
security_trend.json 474 B 2026-08-27 09:25 20 days
log/ (empty) 2026-07-09 15:48
risk_files/ (empty) 2026-07-09 15:48
I then checked which of these names still appear anywhere in the v8.22.0
safecloudModel.py:
alarm_trend.json 1 reference
cloud_config.json none
config.json 2 references
dir_record.db 1 reference
install_time.pl 1 reference
last_scan.json 1 reference
security_trend.json 1 reference
cloud_config.json is the only one your new code no longer reads. Its
content is the cached upload target from the old CloudDetector:
{"last_check": 1786130985.748439, "check_url": "http://w-check.bt.cn/check.php"}
That fits your description — an old configuration file, safe to delete. I will
leave it in place for now, in case you want a report from an untouched system.
The others are still referenced, so I am not touching them either. config.json
in particular holds the monitored directories, so deleting it would change scan
behaviour, not just clean up.
3. One number for context
last_scan.json still records 2026-08-07 21:29:45 — no scan has run since,
which is why the panel says "19 days ago". So on this machine the old detector
had not been active recently anyway; the fix removes the possibility rather than
an ongoing transfer. I mention it so the record is accurate rather than
dramatic.
4. An unrelated observation, offered as a question
While verifying the above I had a packet capture running on this server — full
payload, outbound web connections only, started 2026-08-26 21:47. It shows
something I cannot explain from the configuration, so I would rather ask than
speculate.
After the panel repair finished, the panel opened 18 connections to
wafapi2.aapanel.com, at an almost exact 26.5-second interval:
09:15:19 09:15:46 09:16:12 09:16:39 09:17:05 09:17:32
09:17:58 09:18:25 09:18:51 09:19:17 09:19:44 09:20:10
09:20:37 09:21:04 09:21:30 09:21:57 09:22:23 09:22:54
Then it stopped, and there has been none since (checked 09:44).
What puzzles me is that no WAF is installed here. The plugin directory holds
only fail2ban, jumpserver, mail_sys and redis, and the panel itself
reports "Nginx WAF — Not installed". There were also no wafapi2 connections at
all in the 11.5 hours of capture before the repair.
During those same seven minutes my panel request log shows exactly one kind of
activity: 91 calls to /v2/system?action=GetNetWork — a dashboard tab left
open, nothing else.
I cannot see inside the TLS session, only where it goes, so I am not claiming
anything about the content. My question is simply: what is that endpoint for
when the WAF product is not installed, and what does the panel send there? If it
is a licence or availability check, saying so plainly would settle it.
5. What should be removed?
Since you suggested deleting old configuration files, could you name them
concretely for the state after v8.22.0? Specifically:
- Is
cloud_config.json the only leftover of the removed CloudDetector, or
are there others outside data/safeCloud/ - cached values in the panel
database, for instance?
- Does anything need to be removed for the fix to take full effect, or is the
code change sufficient on its own?
I would rather ask than guess: deleting the wrong file here changes scan
behaviour instead of cleaning up, and a short list from you would let every
operator reading this thread do it correctly the first time.