77 minutes. That's how fast an attacker gets in through an unpatched Next.js container.
77 minutes. That's how fast an attacker got inside our server. A crypto miner ran silently for 4 days before I caught it. Mining Monero. CPU pegged at 382%. Hiding as a Java process in /tmp/.ICEi-unix/. Hit a container I was running with an outdated Next.js build. Critical RCE vulnerability, CVE GHSA-9qr9-h5gf-34mp, patched in 15.5.15+. Bots are scanning for it constantly. Did the forensics properly before touching anything. Verified the attacker never escaped the container. ClawMarket was never affected. Users were never at risk. Then I built a heartbeat cron that runs every 10 minutes checking for known miner signatures, sustained CPU spikes, and unapproved containers. Fires an admin alert on detection. Found out via CPU graphs this time. Never again. The lessons that stuck: Docker doesn't mean safe. An outdated package on a public port is an open door. Your git config is not a safe place for credentials. Forensics before cleanup, always. Building in public means sharing the ugly parts too. This is one of them.