Author: Joker&Thinking Edited by: KrsMt. background In early July 2025, the SlowMist security team received a request for help from a victim user, asking for assistance in analyzing the causeAuthor: Joker&Thinking Edited by: KrsMt. background In early July 2025, the SlowMist security team received a request for help from a victim user, asking for assistance in analyzing the cause

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

2025/07/22 12:00

Author: Joker&Thinking

Edited by: KrsMt.

background

In early July 2025, the SlowMist security team received a request for help from a victim user, asking for assistance in analyzing the cause of the theft of his crypto assets. The investigation found that the incident originated from the user's use of an open source project zldp2002/solana-pumpfun-bot hosted on GitHub, which triggered a covert theft of coins. For details, see GitHub's popular Solana tool has hidden coin theft traps.

Recently, another user used a similar open source project, audiofilter/pumpfun-pumpswap-sniper-copy-trading-bot, which resulted in the theft of encrypted assets, and contacted the SlowMist security team. In response, the team further analyzed the attack method.

Analysis process

Static Analysis

We first used static analysis to find traps set by attackers. After analysis, we found that the suspicious code was located in the /src/common/config.rs configuration file, mainly in the create_coingecko_proxy() method:

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

As can be seen from the code, the create_coingecko_proxy() method first calls import_wallet(), which further calls import_env_var() to obtain the private key.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

In the import_env_var() method, it is mainly used to obtain the environment variable configuration information in the .env file.

During the call, if the environment variable exists, it will return directly; if it does not exist, it will enter the Err(e) branch and print the error message. Since there is a loop {} with no exit condition, resources will continue to be consumed.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Sensitive information like PRIVATE_KEY (private key) is also stored in .env file.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Back to the import_wallet() method, when import_env_var() is called to obtain the PRIVATE_KEY (private key), the malicious code will determine the length of the private key:

  • If the private key length is less than 85, the malware will print an error message, and because there is a loop {} with no exit condition, resources will continue to be consumed, and the malware will not be able to exit normally;
  • If the private key length is greater than 85, use the Solana SDK to convert the Base58 string into a Keypair object, which contains the private key information.

The malicious code then uses Arc to encapsulate the private key information to support multi-threaded sharing.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Back to the create_coingecko_proxy() method, after successfully obtaining the private key information, the malicious code then decodes the malicious URL address.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

The method first gets the encoded HELIUS_PROXY (attacker server address) hardcoded constant.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

The malicious code then decodes HELIUS_PROXY (the attacker's server address) using bs58, converts the decoded result into a byte array, and further converts the byte array into a UTF-8 string using from_utf8().

By writing a script, the real address of HELIUS_PROXY after decoding can be restored as follows:

After successfully decoding the URL (http://103.35.189.28:5000/api/wallets), the malicious code first creates an HTTP client and converts the obtained private key information payer into a Base58 string using to_base58_string().

Subsequently, the malicious code constructs a JSON request body and encapsulates the converted private key information in it. By constructing a POST request, the private key and other data are sent to the server pointed to by the above URL, while ignoring the response result.

Regardless of the result returned by the server, the malicious code will continue to run to avoid user awareness.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

In addition, the create_coingecko_proxy() method also contains normal functions such as obtaining prices to cover up its malicious behavior; the method name itself is also disguised and confusing.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Through analysis, we can know that the create_coingecko_proxy() method is called when the application starts, specifically in the configuration file initialization phase of the main() method in main.rs.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

In the new() method of the configuration file src/common/config.rs, the malicious code first loads the .env file and then calls the create_coingecko_proxy() method.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

According to analysis, the server's IP address is located in the United States.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

 (https://www.virustotal.com/gui/ip-address/103.35.189.28)

It is observed that the project was updated recently (July 17, 2025) on GitHub, and the main changes are concentrated in the configuration file config.rs in the src directory.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

In the src/common/config.rs file, you can see that the original address encoding of HELIUS_PROXY (attacker server address) has been replaced with the new encoding.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

After using the script to decode the original address encoding, the original server address can be obtained.

Dynamic Analysis

In order to more intuitively observe the theft process of malicious code, we used a dynamic analysis method and wrote a Python script to generate Solana public and private key pairs for testing.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

At the same time, we built an HTTP server on the server that can receive POST requests.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Write a Python script to generate the code corresponding to the test server, and replace it with the malicious server address code set by the original attacker, that is, HELIUS_PROXY (attacker server address).

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Then, replace the PRIVATE_KEY in the .env file with the test private key you just generated.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Next, launch the malicious code and observe the response of the server-side interface.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

We can see that the test server successfully received the JSON data sent by the malicious project, which contained the PRIVATE_KEY information.

Malicious robots reappear in Solana ecosystem: Private key leak trap hidden in configuration files

Indicators of Compromise (IoCs)

IPs:

103.35.189.28

Domains:

storebackend-qpq3.onrender.com

SHA256:

  • 07f0364171627729788797bb37e0170a06a787a479666abf8c80736722bb79e8 - pumpfun-pumpswap-sniper-copy-trading-bot-master.zip
  • ace4b1fc4290d6ffd7da0fa943625b3a852190f0aa8d44b93623423299809e48 - pumpfun-pumpswap-sniper-copy-trading-bot-master/src/common/config.rs

Malicious warehouse:

Similar implementation methods:

  • https://github.com/BitFancy/Solana-MEV-Bot-Optimized
  • https://github.com/0xTan1319/solana-copytrading-bot-rust
  • https://github.com/blacklabelecom/SAB-4
  • https://github.com/FaceOFWood/SniperBot-Solana-PumpSwap
  • https://github.com/Alemoore/Solana-MEV-Bot-Optimized
  • https://github.com/TopTrenDev/Raypump-Executioner-Bot
  • https://github.com/deniyuda348/Solana-Arbitrage-Bot-Flash-Loan

Summarize

In the attack method shared this time, the attacker disguised himself as a legitimate open source project to trick users into downloading and executing the malicious code. The project reads sensitive information from the .env file locally and transmits the stolen private key to a server controlled by the attacker. This type of attack is usually combined with social engineering techniques, and users may fall into the trap if they are not careful.

We recommend that developers and users be highly vigilant about GitHub projects from unknown sources, especially when it comes to wallet or private key operations. If you really need to run or debug, it is recommended to do so in an independent environment without sensitive data to avoid executing malicious programs and commands from unknown sources.

Disclaimer: The articles reposted on this site are sourced from public platforms and are provided for informational purposes only. They do not necessarily reflect the views of MEXC. All rights remain with the original authors. If you believe any content infringes on third-party rights, please contact [email protected] for removal. MEXC makes no guarantees regarding the accuracy, completeness, or timeliness of the content and is not responsible for any actions taken based on the information provided. The content does not constitute financial, legal, or other professional advice, nor should it be considered a recommendation or endorsement by MEXC.

You May Also Like

Superstate launches an on-chain direct issuance solution, enabling companies to raise funds in stablecoins to issue tokenized shares.

Superstate launches an on-chain direct issuance solution, enabling companies to raise funds in stablecoins to issue tokenized shares.

PANews reported on December 10th that Superstate, led by Compound founder Robert Leshner, announced the launch of "Direct Issuance Programs." This program allows publicly traded companies to raise funds directly from KYC-verified investors by issuing tokenized shares, with investors paying in stablecoins and settling instantly. The service will run on Ethereum and Solana, with the first offering expected to launch in 2026. The program requires no underwriters, complies with SEC regulations, and aims to promote the on-chaining of capital markets.
Share
PANews2025/12/10 21:07
Trump to start final Fed chair interviews beginning with Kevin Warsh

Trump to start final Fed chair interviews beginning with Kevin Warsh

The post Trump to start final Fed chair interviews beginning with Kevin Warsh appeared on BitcoinEthereumNews.com. President Donald Trump will begin the final interviews of candidates for the Federal Reserve chair this week, putting back on track the formal selection process that began this summer. “We’re going to be looking at a couple different people, but I have a pretty good idea of who I want,” Trump said Tuesday night aboard Air Force One to reporters. The interviews by Trump and Treasury Secretary Scott Bessent will begin with former Fed governor Kevin Warsh on Wednesday and also include Kevin Hassett, the director of the National Economic Council, at some point, according to two sources. It restarts the process that was derailed a bit last week when interviews with candidates were abruptly canceled. Trump said recently he knew who he was going to pick to replace current Chair Jerome Powell, and prediction markets overwhelmingly believed it would be Hassett. But his possible selection received some pushback from the markets recently, especially among fixed income investors concerned Hassett would only do Trump’s bidding and keep rates too low even if inflation snaps back. So it’s unclear if these interviews are a sign Trump has changed his mind or just the final stage of the formal process. CNBC first reported in October that Trump had narrowed the candidate list down to five people. Four of those five will be part of these final interviews. The group also includes current Governors Christopher Waller and Michelle Bowman as well as BlackRock fixed income chief Rick Rieder. The Fed will likely lower rates for a third time this year on Wednesday, but Powell, whose term as chair is up in May, is expected to strike a cautious tone at his post-meeting press conference on how much lower the central bank will go next year. The Fed’s latest forecast released in September called…
Share
BitcoinEthereumNews2025/12/10 21:07