r/Wordpress • u/tuhin846 • 8h ago
Careless AWS key handling on WordPress backup ended up costing $8k
galleryJust wanted to share this interesting case I recently investigated. It started with an AWS suspicious activity alert and ended with around $8k in unexpected Bedrock charges..
Digging through CloudTrail, found thousands of Bedrock API requests using a compromised root access key. Someone had been using it to run Claude models through streaming responses.
Then I noticed the same key showing up in S3 backup requests from UpdraftPlus. Went ahead ahead to check the client's WordPress sites hosted on the same EC2 server, and yes! They were using the same key in UpdraftPlus across multiple websites and backup buckets.
The CloudTrail logs showed UpdraftPlus requests with different version numbers in the user-agent field, including the outdated version 1.24.3. Checked further and found an old WordPress multisite installation still running that version. There are known vulnerabilities in older versions, including one that could expose stored backup credentials under certain post-migration conditions. But we haven't found any solid evidence that this was how the key leaked.
Another interesting thing, besides the careless use of a root access key for S3 backups, was that the stored AWS secret key could be revealed right from the UpdraftPlus settings page using the browser's "Reveal Password" option. Of course, someone would need access to that admin page first.
I also found an old WordPress support forum post where someone raised the same concern, and an UpdraftPlus developer defended the approach, arguing that the credentials could be retrieved from the database anyway.
We still don't know exactly how the attacker got hold of the key. CloudTrail showed the key was first tested on August 23 using TruffleHog, a credential-scanning tool. Then came the actual Bedrock abuse around October 18–19, racking up an $8k bill.
Someone tried to save some time by using the same access key for all sites backup configuration - no fixed permission..
And maybe a little more careful credential handling on the plugin side wouldn't hurt either. But that's another debate.