Joomla on LiteSpeed: CSS and JavaScript 403 errors with query strings Joomla 3 to Joomla 6 with T3 and Purity III: a migration case study Website hacked? What to do first and mistakes to avoid How to import Excel into WordPress with a custom plugin ChatGPT Ads: Paid Advertising Is Challenging Google Ads Ecommerce localization in Italy: catalogue, checkout and technical support Italian web developer for website support and local coordination Italian website localization: more than translating web content Taking over an existing Italian website without rebuilding it Website localization in Italy: a technical guide for international companies WordPress Dashboard Won't Load: 8 Causes and How to Fix Them WordPress Not Working: What to Check Before Panicking WordPress Site Stuck After Update: How to Recover It WP-Admin Error 500: Common Causes and Effective Solutions How to Identify Which WordPress Plugin Is Really Slowing Down Your Site Without Guesswork Joomla on LiteSpeed: CSS and JavaScript 403 errors with query strings Joomla 3 to Joomla 6 with T3 and Purity III: a migration case study Website hacked? What to do first and mistakes to avoid How to import Excel into WordPress with a custom plugin ChatGPT Ads: Paid Advertising Is Challenging Google Ads Ecommerce localization in Italy: catalogue, checkout and technical support Italian web developer for website support and local coordination Italian website localization: more than translating web content Taking over an existing Italian website without rebuilding it Website localization in Italy: a technical guide for international companies WordPress Dashboard Won't Load: 8 Causes and How to Fix Them WordPress Not Working: What to Check Before Panicking WordPress Site Stuck After Update: How to Recover It WP-Admin Error 500: Common Causes and Effective Solutions How to Identify Which WordPress Plugin Is Really Slowing Down Your Site Without Guesswork

Compromised Joomla 3 site: assess, contain and recover

Author Graziano De Maio - Gdmtech
I wish you a good read and remember: if after reading this article you need help, don't hesitate to contact me.
Author: Graziano De Maio | Founder of Gdmtech
Table of contents

Unexpected redirects, new privileged accounts or unauthorised content call for a Joomla 3 compromise investigation. Start by containing the impact while preserving information about what happened. Deleting the first reported file does not demonstrate that an attacker’s access has been removed.

Joomla 3 is unsupported. Recovery therefore needs to address both the incident and the unsupported platform. Cleanup does not restore CMS support or guarantee protection against future attacks.

Distinguish indicators from confirmed findings

Record what happened, where and when. Slowness or an unfamiliar filename alone is inconclusive; an unauthorised account or verified injected code requires investigation of the affected scope.

IndicatorEvidence to retain
Unexpected redirectStarting URL, destination, session and visit conditions
Unknown accountIdentifier, groups and documented activity
Altered filesPreserved copy and comparison with a trusted version
Spam pages or linksURLs and content actually returned
Hosting alertPaths, timestamps and reason supplied by the provider

Do not execute suspicious files or follow instructions displayed by altered pages. Keep screenshots and logs without publicly exposing credentials or user data.

Contain access while preserving evidence

Ask the host to assess isolation and restrictions on affected functions. Joomla’s offline setting does not necessarily prevent access to every file or endpoint. Hosting-level controls may be needed when harmful content is being served.

Preserve available files, database and logs separately, clearly marking the copy as compromised. It is evidence, not a clean restoration point. Record the time and purpose of changes because updates and deletions alter the state under investigation.

Use a trusted device for administration. Decide which notifications, transactions and integrations must pause. Containment should reduce exposure while keeping the status of unavailable services clear.

Review Joomla users, extensions and configuration

Inspect privileged accounts and group memberships, along with recently installed or enabled extensions. Include system plugins, templates, overrides, libraries and files in uploaded-content directories.

Official-package comparisons expose differences but require interpretation. Legitimate custom code and injected code may both differ from the distribution. Use a trusted baseline and an inventory of authorised changes.

Inspect output-producing data, custom HTML modules, redirects and server configuration as well. A PHP-file scan does not examine everything capable of changing the public page.

Keep findings tied to their source. An external alert, a file difference and a confirmed unauthorised account provide different kinds of evidence and should not be reported as interchangeable conclusions.

Investigate the entry point without assumptions

Correlate access and modification records where logs permit. Check exact versions against the Joomla Security Centre and Vulnerable Extensions List. A matching version is a relevant lead, not proof that the listed vulnerability was exploited in this incident.

Do not blame core or the oldest plugin solely because of age. Stolen credentials, hosting access or another site sharing the account may be involved. If the logs cannot establish entry, record that limitation.

Distinguishing confirmed findings from hypotheses determines which access needs revocation and which controls must remain during recovery.

Choose a verified rebuild or restoration path

The Joomla compromised-site checklist highlights persistent access and already infected backups. The first observed symptom does not necessarily mark the intrusion date.

Evaluate backups and packages in isolation. When rebuilding, retain only verified content and customisations, accounting for added files that overwriting a standard package would leave behind.

Do not overlay a new Joomla major release onto the old installation as a shortcut during cleanup. Migration must be consistent with database and extension requirements. A backup restore also needs separate consideration of orders, registrations and content created afterwards.

Revoke access and investigate recurrence

Review passwords, hosting and SFTP or SSH access, database credentials and potentially exposed integration secrets. Plan rotation and revocation from a trusted environment, coordinating configuration changes in applications that use those credentials.

In a hypothetical incident, removing an altered file stops the redirect while an unauthorised administrator account remains. Public behaviour improves, but access persists. Verification must therefore include files, accounts and configuration.

After recovery, compare the installation with the trusted baseline and investigate unexpected changes. If the symptom returns, preserve the new evidence and reassess the hosting scope rather than repeatedly deleting the same file.

Define reopening criteria and the migration follow-up

Test reported pages, authentication, forms, search and extension functions. Verify that authorised users can work and revoked access cannot be reused. Handle external security flags through the relevant service’s review process after remediation.

Document the established cause, removed elements, recovered data and unverified areas. Follow-up should include a supported platform and assessment of extensions to retain or replace.

If you suspect an attack, I can assess the Joomla compromise scope and prepare recovery around the evidence and usable copies available.

Author Graziano De Maio - Gdmtech
I wish you a good read and remember: if after reading this article you need help, don't hesitate to contact me.
Author: Graziano De Maio | Founder of Gdmtech