Skip to main content
mySites.guru
NewAdd every Joomla and WordPress site on a WHM or cPanel server in one goSee how it works

Joomill Autolanguage 2.7.2 Fixes a Stored XSS Created by Translating an Article

Joomill Autolanguage 2.7.2 Fixes a Stored XSS Created by Translating an Article

TL;DR

Joomill released Autolanguage PRO 2.7.2 on 13 November 2026, with the free 2.7.2 out the same day. Its changelog has three Security entries. The one most worth acting on is a stored cross-site scripting (XSS) flaw: an author who is not allowed to post raw HTML could write a script tag as harmless escaped text, and the plugin’s translation of that article turned it into a working script tag, saved past Joomla’s text filters.

5.1CVSS 4.0

Stored XSS written into translations by a full entity decode

MediummySites.guru assessment (no CVE published)

Escaped script text in a source article became a real script tag in every translation, and runs for anyone who views the translated item, administrators included.

CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Needs an account that can write contentFree and PROFixed in 2.7.2
What does this mean?

CVSS 4.0 scores how severe a flaw is, from 0 (no impact) to 10 (critical). Each pair of letters in the string above is one metric; here is what this one's says.

How it is reached

AV:N
Network: Reachable across the internet
AC:L
Low: Nothing to work around, it just works
AT:N
None: Works against any affected install
PR:L
Low: Any logged-in account will do
UI:P
Passive: Someone has to visit a page

What it does to the site

VC:N
None: Nothing can be read
VI:N
None: Nothing can be altered
VA:N
None: The site stays up

What it does beyond the site

SC:L
Low: Some data on other systems can be read
SI:L
Low: Some data on other systems can be altered
SA:N
None: Other systems stay up

The other two fixes are a batch translation that did not check rights on each selected item, and a Gemini API key that PRO sent in the request URL. There is no CVE for any of them yet and the vendor page credits no reporter, so the scores here are our own assessment. The XSS scores slightly below the batch flaw because a victim has to open the translated item, but a script running in an administrator’s browser is the effect to act on first.

Autolanguage is a third-party Joomla extension by Jeroen Moolenschot of Joomill. These are flaws in the extension, and Joomla core is not affected.

Unless a row says otherwise, each flaw affects the free and PRO editions of the Autolanguage Joomla extension below 2.7.2. None has a CVE, and the scores are our own assessment.

Medium2 findings

  1. 5.1 Medium
    No CVE yet, score is our own assessmentA victim has to open the translated item
  2. 5.3 Medium
    No CVE yet, score is our own assessmentNeeds a backend account with rights on the component

Low1 finding

  1. n/a Low
    No CVE yet, not scoredPRO only

What Autolanguage 2.7.2 Fixes

Autolanguage is a Joomla system plugin that translates content into a site’s other content languages and links the translations as associations. It translates when an item is saved and also offers batch translation. The free edition translates articles and categories through Google, Microsoft, OpenAI or Mistral. PRO adds DeepL, Anthropic, Gemini, DeepSeek and xAI, and translates menus, menu items, modules, tags, mail templates and YOOtheme content as well.

The Security section of the 2.7.2 changelog has three entries. The first column is the opening of each one in the vendor’s own words:

Vendor’s description of the changeAreaEditions affected
“a translation no longer turns text shown as code into live code”Translated outputFree and PRO
“a batch translation checks the rights on every selected item”Batch translationFree and PRO
“the Gemini API key is sent in a header instead of in the web address, where proxies and firewalls log it”Gemini requestsPRO only

The rest of 2.7.2 is ordinary maintenance. Dictionary terms are no longer replaced inside links, image paths or attributes, and alt and title attributes in HTML are now translated. zh-TW, pt-BR and Serbian Latin are translated into the right variant, six of the AI services now retry a throttled request, and social links on the install screens have accessible names.

The Stored XSS in Autolanguage Translations

Joomla decides what an author may save with its text filters. An Author’s filter strips a script tag from an article. It leaves <script> alone, because that is text: the browser prints the characters and runs nothing. A tutorial that shows code to its readers is full of entities like that.

Autolanguage subscribes to Joomla’s onContentAfterSave event, so its work starts after the filter has finished. In 2.7.1 the order of operations was:

  1. The author saves the article. Joomla’s text filter runs and keeps the escaped script text, correctly.
  2. Autolanguage sends the saved text to the translation service, once for each other content language.
  3. Each result comes back and is run through a full HTML entity decode. &lt;script&gt; becomes <script>.
  4. The plugin stores each translation. Nothing sends it through the text filter again.

Step 3 was this call, which appears three times in TranslationService.php:

html_entity_decode($result, ENT_QUOTES | ENT_HTML5, 'UTF-8')

The vendor’s changelog describes the result: “Every translated result was run through a full HTML entity decode, so <script> that an article showed as text became a real script tag in every translation, written past Joomla’s text filters.”

So the filter checked the one version of the content that was safe, and the unsafe versions were created afterwards by code that writes to the database on its own authority. The script then runs for anyone who views a translated item. That includes visitors on the front end and administrators who open the translation in the backend, which is how a low-privilege account reaches a high-privilege session.

The same risk applies to any extension that translates content. Machine translation creates new content. A translated article is a second, third or fourth item that no human typed, and it never passes through the filter that guarded the original. Any step that changes markup after the filter has run, as an entity decode does, has to treat its own output as untrusted input.

Version 2.7.2 replaces the call with one that compares the result against the source:

HtmlText::decodeEntities($result, $source)

In the vendor’s words: “Only the entities a translation service adds are decoded now; an entity for <, >, & or " that the source itself carries stays as it is”. If the source held one of those four characters in entity form, the translation keeps it in entity form.

Autolanguage Batch Translation Skipped Per-Item Rights

5.3CVSS 4.0

Batch translation overwrites translations without per-item rights

MediummySites.guru assessment (no CVE published)

A backend user with rights on the component could have the plugin overwrite translations of items that user was not allowed to edit.

CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Login neededFree and PROFixed in 2.7.2
What does this mean?

CVSS 4.0 scores how severe a flaw is, from 0 (no impact) to 10 (critical). Each pair of letters in the string above is one metric; here is what this one's says.

How it is reached

AV:N
Network: Reachable across the internet
AC:L
Low: Nothing to work around, it just works
AT:N
None: Works against any affected install
PR:L
Low: Any logged-in account will do
UI:N
None: Nobody has to be tricked into anything

What it does to the site

VC:N
None: Nothing can be read
VI:L
Low: Some data can be altered
VA:N
None: The site stays up

What it does beyond the site

SC:N
None: Other systems keep their data
SI:N
None: Other systems keep their integrity
SA:N
None: Other systems stay up

Joomla lets a site limit a user to certain categories, or allow them to create items without editing existing ones. Autolanguage’s batch translation did not look that closely. The changelog says: “Rights on the component were enough to have the plugin overwrite translations, also for a user limited per category or allowed to create but not to edit.”

In practice a user confined to one category could select items elsewhere, run a batch translation and have the plugin replace the existing translations of those items. The content written is the translation service’s output, which is why we rate the effect as a limited loss of integrity.

Version 2.7.2 adds a BatchAccess class. Per the changelog, “The source item, the category a new translation goes into and every existing translation now need the edit rights Joomla’s own edit screen asks for; an item that fails is skipped and counted in a warning”. The class’s own docblock says it “Ships in both editions, because articles and categories are batch translated in FREE”, so this fix is not limited to PRO.

The Gemini API Key in the Request URL

In PRO 2.7.1 the Gemini API key was appended to the request URL as ?key=, both in GeminiTranslator.php and in GeminiModelsField.php, which loads the model list in the plugin’s settings. A web address is the part of a request that proxies and firewalls write to their logs, so the key was copied into every log on the route out of the server.

Version 2.7.2 sends it as an x-goog-api-key header. We rate this Low and have not scored it: a visitor cannot exploit it, and the exposure is to whoever can read those logs. The free edition has no Gemini support, so it is unaffected.

Which Autolanguage Versions Are Affected?

Every Autolanguage version below 2.7.2 that we checked has the full entity decode. It is in the free 2.0.0, 2.4.1 and 2.7.1 packages and in PRO 2.7.1, so the stored XSS goes back at least to 2.0.0. For the other two issues we can confirm 2.7.1, and the vendor does not state how far back they go.

IssueFree editionPRO editionFixed in
Stored XSS in translationsAffected, confirmed in 2.0.0, 2.4.1 and 2.7.1Affected, confirmed in 2.7.12.7.2
Batch translation rightsAffected below 2.7.2Affected below 2.7.22.7.2
Gemini API key in the URLNot affected, no Gemini supportAffected, confirmed in 2.7.12.7.2

This is how the Autolanguage sites in the mySites.guru database were spread across versions on release day:

76%
of Autolanguage sites
on 2.7.1, one update from the fix
10%
of Autolanguage sites
on 2.6.0
10%
of Autolanguage sites
on 2.4.x
5%
of Autolanguage sites
already on 2.7.2 on the day it was released

Sites running the Autolanguage system plugin in the mySites.guru database, seen in the last 30 days, on 13 November 2026. Figures are rounded.

About 80% of those sites run the PRO edition, so the Gemini change is relevant to most of them if Gemini is the service they chose.

What To Do on Each Autolanguage Site Now

  1. Update to Autolanguage 2.7.2, free or PRO.
  2. Open the translated items that automatic or batch translation created, and look for script tags or unexpected markup that is not in the source item. Start with items whose source was written by lower-privilege users. The update stops new cases, and it does not clean a translation that was already stored.
  3. In Joomla, check Global Configuration > Text Filters, and make sure the Author and Registered groups are still on a filtered list.
  4. On PRO with Gemini, rotate the Gemini API key if your traffic passes through a proxy or firewall that logs URLs.
  5. Review which backend users can run batch translation.

How mySites.guru Flags Autolanguage

mySites.guru flags every connected Joomla site running the Autolanguage system plugin, free or PRO, below 2.7.2. mySites.guru did not find these flaws; Joomill fixed them in its own release.

Flagged sites appear in the vulnerable extension list, so one screen shows which sites still need the update. The mass updater then pushes extension updates across Joomla sites in one run. Every Autolanguage rule we hold is on the Autolanguage vulnerabilities page.

The same kind of hole, script from anyone allowed to write an article, turned up in two Regular Labs extensions:

Modules Anywhere 10.0.0 and Tabs & Accordions 3.2.0 Close Two Content Author Security HolesRead the full post

For a site that has already been hacked, fix.mySites.guru patches it, audits it for backdoors and hands it back secure for a single fixed fee, usually the same day.

Timeline

  1. Joomill releases Autolanguage 2.7.2

    The free and PRO editions are released on the same day, with three security fixes.

  2. mySites.guru flags affected sites

    A rule flags every connected Joomla site running the Autolanguage system plugin below 2.7.2, free and PRO.

Further Reading

Frequently Asked Questions

Which Autolanguage version fixes the security issues?
Autolanguage 2.7.2, released by Joomill on 13 November 2026 in both the free and the PRO edition. The stored XSS and the batch translation rights check are fixed in both editions. The Gemini API key change applies to PRO only, because the free edition has no Gemini support.
Is there a CVE for Joomill Autolanguage 2.7.2?
No. No CVE has been assigned and the vendor page credits no reporter. The scores in this post, 5.1 Medium for the stored XSS and 5.3 Medium for the batch translation flaw, are mySites.guru's own CVSS 4.0 assessments.
How could a translation create a stored XSS?
An author could write an article that shows a script tag as escaped text, which Joomla's text filter allows because it is only text. Autolanguage ran a full HTML entity decode on every translated result, which turned that escaped text into a real script tag, and saved the translation without passing it through Joomla's text filter again.
Is the free edition of Autolanguage affected?
Yes. The same full entity decode is in the free 2.0.0, 2.4.1 and 2.7.1 packages, and articles and categories are batch translated in the free edition, so both the stored XSS and the batch translation flaw affect free and PRO. Only the Gemini API key issue is limited to PRO.
Do I need to change my Gemini API key after updating Autolanguage PRO?
Rotate it if your site's outgoing traffic passes through a proxy or firewall that logs web addresses. Before 2.7.2 the key was part of the Gemini request URL, so any device logging URLs on the way has a copy. Version 2.7.2 sends the key in a header.
Is Joomla core affected by the Autolanguage flaws?
No. Autolanguage is a third-party Joomla extension by Joomill, and all three issues are in the extension. Joomla's text filter did its job on the source article. The translations were written to the database without going through it.
EU icon: AI MODIFIEDWritten and edited by a human, with AI assistance. Our approach to AI

What our users say

Michael Sønderup Nielsen
Michael Sønderup NielsenJoomla Consultant, Joomlakonsulenten
★★★★★

I have been a mySites.guru customer since February 2014, and I now look after more than a hundred Joomla sites through it. Twelve years on, it is still the first place I look whenever something feels off. What makes it work is not just the scanning. It is the judgement built into it. The vulnerable extension alerts do not simply say "update this". They explain what the flaw actually does, whether an attacker needs to log in first, and exactly which version closes it. That is what cracked a case for me recently. The platform pointed out that a critical plugin on a client site was a hidden dependency, installed automatically in the background by another extension. The client had never chosen it and had no idea it was there. Nothing else I use would have told me that. The tools show the same care. Separating "100% certain hacked" from "suspect patterns" is exactly the right distinction, and it stops you frightening a client with a number that turns out to be ordinary software. The "executables only" filter on the core folder check took a list of 250 files down to 13 in a single click. And being able to read a file in the built-in editor before deleting it is a small thing that matters enormously. Then there is Phil. Sharp, quick to respond, and still clearly invested in the details after all these years. That combination is rare. Thank you, Phil. Genuinely.

Read more reviews
Tom Webb
Tom WebbCompany Director at Inlet Technologies
★★★★★

One dashboard for every client site — updates, vulnerable extensions, SSL and uptime, all in one place. What used to be a half-day of logging into admin panels one by one is now a five-minute morning check, and the vulnerability alerting has flagged issues before I'd have spotted them myself. If you look after more than a couple of sites, it pays for itself fast.

Read more reviews

Read all 306 reviews →

Get an email when the next post is published

Do any of your sites run Joomill Autolanguage?

mySites.guru flags every connected site running a vulnerable version and emails you when it finds one. Start with a free audit of one site.

Get Your Free Site Audit