The AI and Tech Weekly: June 26, 2026
The AI and Tech Weekly: June 26, 2026
A security incident special: how my VPS got crypto-jacked, and the container hardening that followed
The Big Picture
Hostinger sent a CPU limitation alert on my VPS. I SSHed in and ran top: the server was pegging 196% CPU. Nothing obvious in my own apps. Then I checked Docker:
docker exec myapp ls -lah /tmp
Three ELF binaries sitting in /tmp of my Next.js container, owned by the nextjs process user:
HelloMrMeeseekspls_pak_choiplazooza
These were Monero miners running silently for days before triggering the CPU limit. The entry point was a tool I installed myself: an "OpenClaw" alternative whose install script I ran on a production server without auditing it first.
I am sharing the full breakdown so you don't make the same mistakes.
The Attack, Step by Step
1. I opened the door myself
I ran a few tools on my production server as root without auditing their install scripts. A classic curl | bash supply-chain risk: whatever the script does, it does it with full privileges on your box.
2. Persistence via a fake systemd service
The installation script registered a systemd service called openfang that restart-looped, killing the CPU. Masquerading as a legitimate-sounding unit name is a common trick; it survives reboots and blends into systemctl output.
3. RCE into Docker
Write access to a mounted host volume allowed the execution of arbitrary code inside the container, dropping miners into /tmp. Server-side rendering of MDX documents served as the remote code execution entry point.
4. The cleanup and the fix
I removed the binaries, disabled the rogue systemd service, and hardened docker-compose.yml:
read_only: trueto lock down the container filesystem.tmpfs /tmp:noexec,nosuid,size=50mto prevent executing binaries from/tmp.cpus: 1.0andmem_limit: 512mto cap resource usage so a future breach cannot starve the host.
Tips and Tricks from the Community
-
Mount
/tmpas tmpfs withnoexec— Addtmpfs: /tmp:noexec,nosuid,size=50mto your Docker Compose service. Attackers love/tmpbecause every process can write there;noexecblocks arbitrary binary execution even if a payload lands. -
Set
read_only: trueon container services — A read-only root filesystem prevents attackers from writing payload files anywhere except explicitly mounted volumes. Most web apps only need write access to one or two paths. -
Limit CPU and memory per container — Resource caps (
cpus,mem_limit) contain the blast radius of a breach. A crypto-miner capped at one core is an annoyance; an uncapped one takes down your whole server. -
Never run untrusted install scripts as root — Read the script before piping it to bash, or run it in a throwaway VM first. Supply-chain attacks increasingly target developer tools precisely because we install them carelessly.
Open Source This Week
- Bumblebee — A read-only dependency scanner from Perplexity AI that verifies third-party taps, packages, MCP servers, and VS Code extensions for suspicious code without running install scripts. github.com/perplexity-ai/bumblebee
One More Thing
The uncomfortable lesson from this incident is that the weakest link was not the container runtime or the firewall. It was me, trusting an install script because the tool was popular that week. Self-hosting developer tools is worth it, but treat every curl | bash as code review you skipped. Next week, back to the regular market news and startup ideas.