3.3.7
3.3.7 is a security release. It closes a stored XSS in the pad and timeslider renderer (GHSA-4mx2-rqx5-2pp6).
Security
- Renderer — attribute-pool values can no longer forge class tokens (GHSA-4mx2-rqx5-2pp6, #8302).
linestylefilterappended thestartandlistline-attribute values verbatim to the space-delimited class string thatdomlineparses back, anddomlineemits anytag:token in that string as a raw element. Astartvalue containing a space, which can be planted through a crafted changeset or.etherpadimport, therefore smuggled in a token such astag:img/src=x/onerror=...and rendered a live element with a live event handler for every viewer of the pad and its timeslider. This is the same function as GHSA-f7h5-v9hm-548j but a different token.startis now emitted only when it is an integer andlistonly when it is a plain list type, anddomlineaccepts only a bare element name (letters, digits and hyphens) fortag:tokens, which also covers class strings contributed by plugins. Reported by @arpitjain099.
Notable fixes
- Auth — an empty-string password is refused on both login paths (#8261). A
settings.usersentry configured as"password": ""authenticated anyone who submitted an empty password, on the OIDC interaction path and on HTTP Basic. Both already failed closed for a nullish password; an empty string slipped through because it is a string and compares equal to an empty submission. Only explicit misconfiguration produces it, so this is hardening rather than a vulnerability. Reported by Wenhao Wu (Southeast University) while verifying the fix for GHSA-62cj-9j72-mfrh. - Admin — the plugin catalog no longer offers deprecated or known-broken plugins (#8246). The "Available plugins" list was built straight from the plugin feed, so any package the feed knew about could be installed from the admin UI — including packages npm marks deprecated, packages the plugin registry itself could not get working against the current release, and
ep_adminpads2, which is archived upstream and takes over/admin/padswith a template whose scripts core no longer ships, hanging the admin page on "Loading…". Those are now filtered out of the catalog, the admin UI refuses to install one if a stale page asks for it anyway (pnpm run plugins i ep_<name>on the server still overrides), and an already-installed plugin in that state is flagged as deprecated in the Installed plugins list. The npm deprecation lookup is cached for 12 hours and fails open: if the registry cannot be reached the full catalog is still listed. Reported by @JohnMcLear.