A CVSS 10.0 Unauthenticated Upload in YOOtheme ZOO, Fixed in 4.1.66

ZOO is YOOtheme’s content construction kit for Joomla, installed as the com_zoo component, and it has been in service long enough to be running on sites first built a decade ago. Every version up to and including 4.1.63 carries three vulnerabilities that need no login, no account, and no help from anyone on the site. The worst of them is scored CVSS 10.0, the maximum, and ends in an attacker running their own code on your server.
We found all three, reported them, and YOOtheme fixed them in ZOO 4.1.64, released on 19 August 2026. Two more security releases followed inside three days. Update to 4.1.66 or later now.
TL;DR
TL;DR: YOOtheme ZOO (com_zoo) up to and including 4.1.63 has three unauthenticated flaws, all fixed in 4.1.64 on 19 August 2026, all found and reported by mySites.guru and all proved on a live test install rather than inferred from source. CVE-2026-74803 (CVSS 10.0, CWE-434) is an arbitrary file upload to remote code execution: the Image element on a front-end submission form checks the Content-Type the client sent and nothing else, so an anonymous visitor uploads a .php file declared as an image and it executes from inside the web root. CVE-2026-74804 (CVSS 9.3, CWE-89) is an unauthenticated SQL injection in the item element endpoint that needs no submission form at all, only an installed ZOO application, and returns whatever the database holds. CVE-2026-75114 (CVSS 5.1, CWE-601) is an open redirect. Update every ZOO install to 4.1.66 or later, then check images/zoo/uploads/ for anything that is not an image. 4.1.64 closes all three of these flaws; 4.1.65 and 4.1.66 followed inside three days with five more, the worst of them scored 8.6, described in the updates below.
Update, 25 August 2026: the Joomla 3 branch is patched too, and the 5.0.42 fixes now have CVE records.
YOOtheme has backported all four YOOtheme Pro fixes to its Joomla 3 line, in 4.5.34 on 24 August, with 4.5.35 a day later to repair a regression that release introduced. If you have Joomla 3 sites sitting on 4.5.33 because the 5.0.x line needs Joomla 4 or later, they are no longer stranded. The changelog extract and what it means are at the end of the YOOtheme Pro section below.
The two 5.0.42 fixes we flagged yesterday as security work filed under maintenance wording were published as CVE records this morning: CVE-2026-77996 for the unescaped custom field value, scored 7.5 High, and CVE-2026-77997 for the missing authorisation check, scored 5.1 Medium.
Update, 24 August 2026: two more releases, one of them matters.
ZOO 4.1.67 shipped this morning with no security fixes. We diffed it against 4.1.66 before writing this: the whole release replaces Joomla static helper calls left over from the security-fix rewrites with PHP's native file checks, and adds one MIME mapping that repairs a broken JSON import. Nothing here changes. 4.1.66 remains the release that closes all eight issues, and either version is fine to run. One oddity worth recording: the 4.1.66 changelog entry for CVE-2026-77029 has been reworded since Friday and no longer names submission deletion among the actions it protects. The code itself is untouched; only the changelog sentence moved.
YOOtheme Pro 5.0.42, out the same day, deserves closer reading than its changelog gives it. Both entries sit under the heading "Fixed", where 5.0.41's equivalents sat under "Security". One adds an authorisation check that was missing entirely from an endpoint returning any module's title together with its complete parameter set, and because the route is a GET request it never passed YOOtheme's token check either. The other escapes a custom field value that was being written into an HTML attribute unsanitised, which is stored cross-site scripting material. Both were given CVE records the following morning, on 25 August. If you installed 5.0.41 three days ago, install 5.0.42 as well.
Update, 21 August 2026: three releases in three days. Install 4.1.66.
This post was written for 4.1.64, and our customer alert went out naming that version. There have been two releases since, closing five more issues on the same component. We reported those as well.
4.1.65 arrived within the hour of 4.1.64 to finish a tag management fix that 4.1.64 had announced and not shipped. On 19 August we described that as a back end problem needing a login. It has since been published as CVE-2026-76610, scored 6.9, and the record describes it as reachable with no login at all. That is worse than we called it, and we would rather correct it here than leave the old wording standing.
4.1.66 followed on 21 August with four more, all reachable without an account. The one to plan around is CVE-2026-76612, scored 8.6: comments and user-supplied field elements are not escaped on output, so an anonymous visitor can store script that later runs in the browser of anyone viewing the page, administrators included. Alongside it, CVE-2026-76611 (6.9) lists directories through the Gallery element on a submission form, CVE-2026-77028 (5.3) is a reflected cross-site scripting and open redirect through the submission redirect parameter, and CVE-2026-77029 (4.6) is missing cross-site request forgery protection on front-end actions, submission deletion among them.
Two more lines in that changelog are not listed as security fixes at all, and both are worth reading anyway. One enforces the Download element's upload allow-list on front-end submissions, which is the same kind of guest upload route as the CVSS 10.0 below. The other reads "fix support for upload MIME validation on Joomla versions earlier than 4.4", which would mean the upload checking added in 4.1.64 was not running on Joomla 3 or Joomla 4.0 to 4.3. We have not verified that, and we are not going to claim it as fact. What we will say is that if your ZOO sites run on those Joomla versions, treat 4.1.66 rather than 4.1.64 as the release where the upload hardening below takes effect.
Everything below this box still stands: 4.1.64 fixes the CVSS 10.0. 4.1.66 is the version to install.
What Was Wrong in YOOtheme ZOO 4.1.63?
Three separate things, in three separate parts of the component, with one property in common: none of them requires an account on the site.
| Flaw | Identifier | Score | Needs a login? |
|---|---|---|---|
| Arbitrary file upload leading to remote code execution | CVE-2026-74803 | 10.0 Critical | No |
| SQL injection in the item element endpoint | CVE-2026-74804 | 9.3 Critical | No |
| Open redirect in the Twitter comment callback | CVE-2026-75114 | 5.1 Medium | No |
All three are credited to Phil Taylor of mySites.guru in the CVE records published by the Joomla project, which acts as the CVE Numbering Authority for Joomla extensions. The affected range on every record is 1.0.0 to 4.1.63, so this is not a bug introduced in a recent build. It has been there a long time.
If you run ZOO 3.x, read this bit
The CVE records list the affected range as 1.0.0 to 4.1.63, which includes the entire ZOO 3.x line. YOOtheme shipped a fix on the 4.x line only. There is no 3.x security release. If you are on 3.x you are inside the affected range with nowhere to update to, so the realistic options are moving the site to the 4.x line or taking ZOO off it. Leaving a 3.x install published and reachable is not one of them.
The Image Element Trusted the Browser’s Word
This is the CVSS 10.0 one, and the mechanism is worth understanding because the same mistake turns up across the whole Joomla and WordPress extension ecosystem.
ZOO lets visitors submit content through a front-end submission form. That is a documented, intended feature, and guest submissions are the default rather than an exotic configuration. If the form includes an Image element, which the stock layouts do, visitors can attach a picture.
The Image element validates that attachment. It builds a validator configured with a MIME type group of image and a maximum size, which reads, at a glance, like exactly the right check. The problem is which value that validator inspects. It reads the Content-Type header the client attached to the upload.
That header is not a property of the file. It is a label chosen by whoever is sending the request, and there is nothing stopping them writing whatever they like in it. So the check amounts to asking the attacker what kind of file they are uploading and believing the answer.
Nothing else closes the gap:
- the file’s actual contents are never inspected, so the bytes can be anything at all;
- no allow-list of permitted extensions is configured for this element;
- the filename goes through Joomla’s
File::makeSafe(), which strips dangerous characters but happily preserves a.phpextension; - the file is then written into
images/zoo/uploads/, a directory inside the web root, where the web server executes PHP.
Chain those together and an anonymous visitor uploads a PHP file, tells ZOO it is a JPEG, and then requests it in a browser to run it. That is unauthenticated remote code execution, the most severe outcome a web vulnerability can have, and it is why the Joomla CNA scored it at the top of the scale with high impact across confidentiality, integrity and availability, both for the component and for the wider system.
We proved it end to end on a Joomla 5.4.7 test install: a benign file that printed the server’s own php_uname() output was uploaded as an unauthenticated guest and returned that output over HTTP. We are not publishing the request.
Why “Check the MIME Type” Keeps Failing
There are two completely different things people mean by validating a file’s type, and only one of them is a security control.
The first is reading the Content-Type header sent with the upload. That is a hint supplied by the client. It is useful for deciding how to display something, and useless for deciding whether to trust it, because the client is the attacker.
The second is examining the file’s own contents server-side, checking the magic bytes, and rejecting anything that does not match an allow-list of extensions you have decided are acceptable. That one is a security control.
They read almost identically in code review. A line that says “check this is in the image MIME group” looks responsible either way, and the difference is one variable deep. That is exactly why this class of bug survives audits, and it is the same underlying mistake we wrote up in Page Builder CK, Balbooa Forms, iCagenda and RSFiles over the past few months.
The rule that actually holds: never let the extension of a stored file be decided by anything the caller sent you. Generate the name and the extension yourself from a fixed list, and the entire bug class stops existing.
How Bad Is the ZOO SQL Injection?
Bad enough to matter on its own, and it has a wider reach than the upload flaw because it has no preconditions.
CVE-2026-74804 sits in ItemController::element(). Two values taken straight from the request, filter_type and the type_filter array, are pasted into the SQL condition as string comparisons with no quoting and no escaping of any kind. The condition string is then concatenated into the query verbatim by the table layer underneath.
An anonymous visitor can therefore close the string early and write their own SQL. In testing that let us do two things. First, bypass the filters the query exists to enforce, so items that were unpublished and items restricted to logged-in users came back to a guest alongside the public ones. Second, attach a UNION and read arbitrary data: we pulled back the MySQL version and the database name as an unauthenticated request to prove the reach without touching customer data.
The practical difference from the upload flaw is the precondition. The upload needs a published submission form containing an Image element that guests can reach. The SQL injection needs nothing except an installed ZOO application, which every deployed ZOO site has by definition. A site with no submission form at all is still fully exposed to this one.
That matters for triage. If you were planning to skip the update on ZOO sites that do not take submissions, do not.
The Open Redirect Is the Least of It
CVE-2026-75114 is the small one, and in a release with a CVSS 10.0 in it there is a temptation to ignore the 5.1 entirely. It is still worth patching.
CommentController::twitterAuthenticate() takes a referer parameter from the request and hands it straight to setRedirect() without checking the scheme or the host. Ask for it and the site issues an HTTP 303 to wherever you named. It works whether or not Twitter authentication has ever been configured on the site.
Nobody loses a server to an open redirect. What they lose is the reputation of their domain, because a link that starts at your trusted site and ends somewhere else is exactly what a phishing campaign wants, and it survives the “check the link before you click it” advice that most staff training is built on.
How Do I Find Every ZOO Install Across My Joomla Sites?
If you run one Joomla site, log into it, open the extension manager, and read the ZOO version off the screen. That takes a minute and you are done.
If you run thirty, or two hundred, that approach is where the update stops happening. You get through the first dozen, something urgent arrives, and the rest of the list never gets checked. The sites that end up compromised are almost never the ones nobody knew about. They are the ones on a list somebody meant to get back to.
mySites.guru keeps an inventory of every extension on every connected Joomla and WordPress site. Search it for ZOO and you get every install, with its version, on one screen, and you can push the update to all of them from there.
The vulnerability rules go a step further and flag the versions rather than waiting for you to compare numbers yourself. The rule for this one went live on the day the records were published, so any connected site running ZOO below 4.1.64 is already marked, and two further rules cover 4.1.64 and 4.1.65 now that later releases exist. Our own numbers across connected sites when that rule went in were not encouraging: hundreds of sites still on a vulnerable ZOO, and not a single one yet on 4.1.64, which is what you would expect on release day and exactly why the next fortnight is the dangerous part. A meaningful share of those were still on the 3.x line, which has no fix to move to at all.
What to Do Right Now
In order, most urgent first.
- Update ZOO to 4.1.66 or later on every site. That closes the three flaws described below, and the five that 4.1.65 and 4.1.66 fixed after them. It is the only step that fixes anything; everything below is about checking what may already have happened.
- If a site is on ZOO 3.x, there is no security release for that branch. Plan the move to 4.x, and in the meantime treat the site as exposed rather than patched.
- Look in
images/zoo/uploads/for anything that is not an image. Anything ending in.phpthere should be treated as a web shell until proven otherwise. Widen the search to any unexpected PHP file anywhere underimages/. - Check your Joomla administrator accounts for any you do not recognise, and review recently modified files across the site.
- If the site was internet-facing on an old version, treat stored password hashes as read. The SQL injection could reach the user table. Force a password reset and rotate the Joomla secret in
configuration.php. - Do not skip sites that have no submission form. They are not exposed to the upload flaw, but they are fully exposed to the SQL injection, which needs nothing but an installed ZOO application.
If any of that turns up something you would rather not deal with yourself, fix.mySites.guru is the paid service where we do it for you: the site gets patched, checked for backdoors, and returned clean.
How Do I Tell If a ZOO Site Was Already Hit?
Updating stops the next attempt. It tells you nothing about the last one, and on a flaw this old the honest answer is that the window has been open for a long time.
Start with the upload folder, because that is where the evidence would be. images/zoo/uploads/ should contain images and nothing else. A .php file there, or a file with a double extension, or an image with a modification date that does not match anything you submitted, is worth treating as an incident rather than a curiosity.
Then look at the things a successful upload leads to. Administrator accounts you did not create. Scheduled tasks nobody set up. PHP files with recent modification times in directories that should be static. Outbound connections from the web server that you cannot account for.
The reason to do this rather than assume you are fine: an anonymous file upload is not a flaw that needs a targeted attacker. Mass scanners work through the Joomla extension list continuously, and we have watched several of these upload flaws get probed at scale within days of the details reaching the public, which the Page Builder CK case documented in detail. mySites.guru runs those checks, including the suspect content tool, across every connected site automatically.
Why Front-End Submission Forms Keep Producing This Bug
Step back from ZOO for a moment, because it is not really about ZOO.
Look at the pattern in what we have published this year: Page Builder CK, Balbooa Forms, iCagenda, RSFiles, and now ZOO. Different vendors, different codebases, different decades in some cases. The same bug.
What they share is a feature requirement that pulls directly against the security requirement. The whole point of a front-end submission form is that a stranger can use it without an account, and if it accepts pictures then it must accept a file from that stranger. Every safeguard you would reach for first is one the attacker controls: the filename, the extension in the filename, and the Content-Type label. The only inputs that are not attacker-controlled are the file’s actual bytes and the rules you wrote yourself, and checking those is more work than checking a header.
So the code that looks careful gets written, review sees a MIME check and moves on, and the bug sits there for years. ZOO’s affected range starts at 1.0.0.
If you build Joomla or WordPress extensions, the takeaway is short: the file’s declared type is not evidence. Read the bytes, enforce an extension allow-list you control, generate the stored filename yourself, and if you can, put the upload directory somewhere the web server will never execute anything.
If you run sites rather than build them, the takeaway is shorter still. Any extension that takes uploads from the public is a standing risk, and the number of them installed across your sites is the thing to keep an eye on. Our vulnerable extension list tracks the ones we know about.
Every YOOtheme CVE Published Since June
Eleven CVE records name YOOtheme as the vendor in the two months to 21 August 2026, spread across three products. Scores are CVSS 4.0 as published by the Joomla CNA, except the WordPress one, which WPScan scored on CVSS 3.1.
ZOO (com_zoo)
| CVE | Flaw | CVSS | Reported by | Fixed in |
|---|---|---|---|---|
| CVE-2026-74803 | Unauthenticated arbitrary file upload leading to remote code execution | 10.0 Critical | Phil Taylor, mySites.guru | 4.1.64 |
| CVE-2026-74804 | Unauthenticated SQL injection in the item element endpoint | 9.3 Critical | Phil Taylor, mySites.guru | 4.1.64 |
| CVE-2026-76612 | Unauthenticated stored XSS through comments and user-supplied field elements | 8.6 High | Phil Taylor, mySites.guru | 4.1.66 |
| CVE-2026-76610 | Unauthenticated tag modification through the comment controller | 6.9 Medium | Phil Taylor, mySites.guru | 4.1.65 |
| CVE-2026-76611 | Unauthenticated arbitrary directory listing via the Gallery element | 6.9 Medium | Phil Taylor, mySites.guru | 4.1.66 |
| CVE-2026-77028 | Reflected XSS and open redirect via the submission redirect parameter | 5.3 Medium | Phil Taylor, mySites.guru | 4.1.66 |
| CVE-2026-75114 | Open redirect in the Twitter comment callback | 5.1 Medium | Phil Taylor, mySites.guru | 4.1.64 |
| CVE-2026-77029 | Missing CSRF tokens on front-end state changes | 4.6 Medium | Phil Taylor, mySites.guru | 4.1.66 |
YOOtheme Pro for Joomla
| CVE | Flaw | CVSS | Reported by | Fixed in |
|---|---|---|---|---|
| CVE-2026-76613 | SQL injection the record describes as reachable by any contributor-level user | 8.6 High | nobody credited in the record | 5.0.41, or 4.5.34 on Joomla 3 |
| CVE-2026-75115 | Arbitrary file read through glob patterns in the Filesystem source’s path filter, for privileged users | 7.0 High | Jörg Steinsträter | 5.0.41, or 4.5.34 on Joomla 3 |
| CVE-2026-77996 | Stored cross-site scripting through an unescaped value in the Location custom field | 7.5 High | nobody credited in the record | 5.0.42, or 4.5.34 on Joomla 3 |
| CVE-2026-77997 | Module controller returns any module’s title and full parameter set with no permission check | 5.1 Medium | nobody credited in the record | 5.0.42, or 4.5.34 on Joomla 3 |
YOOtheme Pro WordPress theme
| CVE | Flaw | CVSS | Reported by | Fixed in |
|---|---|---|---|---|
| CVE-2026-10077 | Author-level stored XSS through UIkit data attributes that survive wp_kses_post() | 6.8 (CVSS 3.1) | Pierre Rudloff, via WPScan | 5.0.35 |
Two things in that table are worth pulling out.
- If you run YOOtheme Pro on Joomla, you have a second update to do today. 5.0.41 shipped on 21 August, the same day as ZOO 4.1.66, and it is a separate download. The affected ranges are 1.0.0 to 5.0.40 for the SQL injection and 2.3.0 to 5.0.40 for the file read, so every install before 5.0.41 is inside at least one of them. Updating ZOO does nothing for these, and neither does updating your template if it is not the YOOtheme Pro one. 5.0.42 followed on 24 August with two further fixes, covered at the end of this section.
- The record for CVE-2026-76613 has been corrected, and it now reads 8.6 High. When this post first went up, its title and description said the SQL injection needed a contributor-level account while the vector published alongside them was
PR:N, meaning no privileges at all, and thatPR:Nis what produced the original 9.2 Critical. YOOtheme got in touch to confirm the vector was wrong, and the record was updated on 23 August 2026: the score is now 8.6 High and the title reads “Authenticated, privileged SQL injection”.
One mismatch survives the correction. The revised vector says PR:H, which CVSS defines as privileges giving significant control over the component, while the description still says “any contributor-level user”, a role most sites treat as barely privileged at all. We have not audited YOOtheme Pro ourselves, so we cannot settle which reading is right, and the difference matters on any site that hands contributor accounts to people it has not met.
5.0.42, released on 24 August, has two more fixes that read as security work filed under maintenance wording. Both entries sit under “Fixed” in the changelog rather than under “Security”. The first adds an authorisation check to an endpoint that returns a module’s title together with its complete parameter set: until this release it ran no permission test at all, and being a GET route it never passed YOOtheme’s CSRF token check either, because that only applies to state-changing requests. The second escapes a custom field value that was previously written into an HTML attribute raw, which is textbook cross-site scripting. We have verified both fixes in the shipped code rather than taking the changelog’s word for it. Both were published as CVE records on 25 August, the morning after the release: CVE-2026-77996 at 7.5 High for the escaping fix, and CVE-2026-77997 at 5.1 Medium for the authorisation check. Install 5.0.42 either way; it contains everything 5.0.41 fixed plus these two.
The Joomla 3 branch got all four fixes, in 4.5.34
YOOtheme Pro runs two lines at once. The 5.0.x line needs Joomla 4 or later, and 4.5.x is the branch kept alive for sites still on Joomla 3. Every version number in all four CVE records is a 5.x number, so from the records alone a site on 4.5.33 looks stranded: inside the affected range, with nothing it can install. That is not the case. The whole set was backported on 24 August, and the package changelog says so:
## 4.5.35 (August 25, 2026)
### Fixed
- Fix regression in Articles Model (Joomla)
## 4.5.34 (August 24, 2026)
### Security
- CVE-2026-75115: Fix arbitrary file read exploitable by any contributor-level user
- CVE-2026-76613: Fix SQL injection exploitable by any contributor-level user
- Fix escaping location custom field value (Joomla)
- Fix missing authorization check in module controller (Joomla)
## 4.5.33 (December 16, 2025)
Three things are worth reading out of that.
- 4.5.34 closes all four, not the two it names. The two named CVEs are the pair fixed in 5.0.41. The two unnamed entries under them are word for word the 5.0.42 entries, which is how you can see the Joomla 3 branch caught up with both releases in one go. We checked the shipped code rather than trusting that mapping. The escaping fix adds
htmlspecialchars($data['value'], ENT_QUOTES, 'UTF-8')in the Location field plugin, and the authorisation fix adds acore.edittest againstcom_modules.module.{id}before the module controller will answer. Both are the same change 5.0.42 made. - Install 4.5.35 rather than 4.5.34. The regression named in the 4.5.35 entry follows directly from the SQL injection fix. Quoting the ORDER BY column is what closes the injection, but ordering an article list by a custom field uses a synthetic column name of the form
a.field:123, and quoting that as a literal identifier breaks it. 4.5.35 adds a branch that recognises the custom-field form before the quoting runs. If any of your article lists order by a custom field, 4.5.34 broke that ordering and 4.5.35 puts it back. - Older majors are still stranded, which is a different problem from being behind. The affected range starts at 1.0.0, and the fix exists on the 4.5.x and 5.0.x lines only. A site on YOOtheme Pro 3.x, or anywhere in 4.0 to 4.4, has no security release on its own line at all. For those the answer is a move to 4.5.35, or a migration to Joomla 4 or later and the 5.0.x line. There is no update that fixes them where they stand.
Timeline
ZOO 4.1.64 fixes the three flaws we reported
CVE-2026-74803, an arbitrary file upload to remote code execution scored CVSS 10.0, plus CVE-2026-74804 and CVE-2026-75114. All three were found and reported by mySites.guru, and all three were proved on a live test install rather than inferred from the source.
4.1.65 closes a hole 4.1.64 had claimed to fix
CVE-2026-76610, in tag management. The first release did not finish the job, which is the reason 4.1.64 is not a safe ceiling.
4.1.66 closes four more, and this is the version to install
CVE-2026-76612, an unauthenticated stored cross-site scripting flaw at 8.6 and the worst of the set after the 10.0, plus CVE-2026-76611, CVE-2026-77028 and CVE-2026-77029. Three releases in three days. Our customer alert had named 4.1.64, so we wrote again.
YOOtheme Pro 5.0.41 ships the same day, and is a separate download
CVE-2026-76613 and CVE-2026-75115, neither of them ours. Updating ZOO does nothing for these, and neither does updating your template if it is not the YOOtheme Pro one.
CVE-2026-76613 is corrected from 9.2 Critical to 8.6 High
Its description said the SQL injection needed a contributor-level account while the vector published alongside said PR:N, no privileges at all, and the PR:N is what produced the original 9.2. YOOtheme took it to the CNA and the vector was the wrong half.
The Joomla 3 branch is backported, and two more Pro fixes ship
YOOtheme Pro 4.5.34 brings all four Pro fixes to the line kept alive for Joomla 3 sites, so a site on 4.5.33 was behind rather than stranded. YOOtheme Pro 5.0.42 adds CVE-2026-77996 and CVE-2026-77997, both filed under maintenance wording rather than security. ZOO 4.1.67 also shipped with no security fixes in it.
4.5.35 repairs a regression the SQL injection patch caused
Quoting the ORDER BY column broke ordering by a custom field, whose synthetic column name is not a plain identifier. A day after the backport.
Further Reading
- CVE-2026-74803, CVE-2026-74804 and CVE-2026-75114 at CVE.org, the authoritative records for the three flaws in this post
- CVE-2026-76610, CVE-2026-76611, CVE-2026-76612, CVE-2026-77028 and CVE-2026-77029, the five that followed in 4.1.65 and 4.1.66
- YOOtheme's ZOO changelog
- YOOtheme Pro's changelog, which covers both the 5.0.x and 4.5.x lines
- CWE-434: Unrestricted Upload of File with Dangerous Type at MITRE
- CWE-89: SQL Injection at MITRE
- The Joomla Security Strike Team's vulnerable extensions list
- Our standard for disclosing Joomla extension vulnerabilities
- A month of Joomla security disclosures, the wider pattern these keep fitting


