Clean in place
The attacker was still writing new files. A successful cleanup could be undone before anyone finished checking it.
01 · What it was
A long-running web development company had kept every client site together in one hosting account. One break-in could reach all of them.
This is an anonymized account of a real incident involving real companies and real money. Direct identifiers and sensitive infrastructure details have been removed.
The sites lived in one directory tree. Anything able to write to one site could write to every other site beside it. The account boundary that should have contained one failure did not exist.
02 · What was happening
Casino pages were the visible mess. Underneath, the account had become a machine for finding database passwords belonging to other customers of the same hosting company.
03 · Why cleanup failed
Two snapshots, taken 28 hours apart, showed the footprint growing while the response was already under way.
You cannot enumerate your way out of a system that rebuilds itself.
04 · The eviction
One account-wide rule denied the web server permission to run program files. Every confirmed active attacker request depended on code running through that server, so the rule stopped the observed execution route immediately.
Known hosting passwords and control-panel credentials were rotated, and the account’s SSH and FTP access paths were removed in the same window. Nothing on the old server was deleted. The malicious files stayed in place as inert evidence.
05 · The decision
We did not clean the old server. We did not accept a quote that treated each site as a separate cleanup while leaving the shared structure unchanged.
The attacker was still writing new files. A successful cleanup could be undone before anyone finished checking it.
That removed symptoms without fixing why one break-in reached seventeen sites.
One account per client on the new host, for roughly $20 more each month. A future failure is contained to one client.
06 · The method
Content came from each site’s own database and media. Its program files never crossed the boundary into the new account.
Create an isolated account for one client only.
Install the publishing platform fresh from its maker. Copy no program files from the compromised server.
Copy content only: images, documents, and media. Leave executable and configuration files behind.
Import the site’s database and clean it.
Reinstall add-ons from their official sources.
Compare every installed file with the maker’s published digital fingerprints.
Run the automated pre-launch check. It must report CLEARED.
Only then point the public address to the site and issue its security certificate.
07 · Three findings
A stored instruction watched for a particular phrase in a new comment, then silently created a new administrator. Deleting files, reinstalling the platform, or removing the rogue account would not stop it. The instruction also travelled inside a database export.
It was caught because the new database account was not allowed to create that kind of instruction. The import failed loudly instead of succeeding quietly. Five of thirteen exports carried it.
Two database snapshots were compared marker by marker. Six of eight databases were clean in the earlier copy and defaced in the later one. The defacement had happened during the response, not at the original intrusion. Several repair jobs became straightforward restores from the earlier copies.
One backup had been labelled as a copy from before a site was wiped. It had actually been taken afterward. It contained no malware because it contained almost nothing at all. Clean and intact are different properties; proving one says nothing about the other.
08 · Current status
09 · Unfinished work
Four live domains still depend on the legacy provider’s nameservers as a temporary bridge. Their delegations must move before that account can be closed.
The migrated mail paths work. Remaining legacy mailboxes and forwarders still need a final business-owner audit before shutdown.
The original way in remains unproven. The logs needed to settle it are held by the hosting company.
The master evidence archive still needs a second verified storage copy.
Search ownership, attacker-submitted indexing, and removal status still need an account-side review.
Last reviewed . This record will change when the evidence does.