3.9.6
🚨 Security release
This release fixes several vulnerabilities that were all responsibly reported to us in June 2023:
- Insufficient Session Expiration after a password change (high severity, CVSS score 7.3)
- Field injection in the KirbyData text storage handler (high severity, CVSS score 7.1)
- XML External Entity (XXE) vulnerability in the XML data handler (medium severity, CVSS score 6.8)
- Cross-site scripting (XSS) from MIME type auto-detection of uploaded files (medium severity, CVSS score 5.7)
- Denial of service from unlimited password lengths (medium severity, CVSS score 5.3)
Thanks to Shankar Acharya (@5hank4r), Alexandre Zanni (@noraj) at ACCEIS and Patrick Falb (@dapatrese) at FORMER 03 for responsibly reporting the identified issues.
Updated default .htaccess
We have updated the .htaccess
that ships with our kits to the new version 2023-07-22
, which adds protection against browser MIME type detection from malicious file uploads for files that have already been copied to the media
folder. We recommend to update your sites’ .htaccess
or server configuration with the new changes if you might have potential attackers in your group of authenticated Panel users or if your sites allow file uploads by visitors and the file extensions of uploaded files are not limited to a fixed safe list.
You can find the changes to the .htaccess
in this commit and read more about the added rules in the security guide.
Thanks to Shankar Acharya (@5hank4r) for making us aware of this potential attack vector.
Frame-blocking in the Panel
The Panel now sends the Content-Security-Policy: frame-ancestors 'none'
header to increase the protection against clickjacking attacks. The session cookie was already set to SameSite
before, so this is an additional layer of protection.
Thanks to Shankar Acharya (@5hank4r) for suggesting this security enhancement.
Security-related breaking changes
- All users are logged out from their sessions after updating to this patch release.
- The
Xml
data handler (e.g.Data::decode($string, 'xml')
) and theXml::parse()
method no longer process XML external entities. - The Panel can no longer be embedded in HTML frames.
🎉 Features
- Added Rumanian translation (thanks to @danburzo) 🎉
✨ Enhancements
- Updated translations (is, ko, pl, sv)
- Stats section:
link
,label
,info
andvalue
now all support translations and Kirby queries #5256 - Support for variadic controller arguments (thanks to @lukaskleinschmidt) #5222
collection()
helper (and corresponding methods) allow passing an$options
array which will be provided as additional arguments to the collection closure (thanks to @ceesvanegmond)<?php // site/controller/news.php $articles = collection('news', ['order' => 'asc']); // site/collection/news.php use Kirby\Cms\Site; return function (Site $site, string $order) { return $site->find('news')->children()->template('article')->orderBy($order); };
🐛 Bug fixes
- Fixed
lock
API routes for files that are ancestors of a page calledfiles
#5273 - Kirby queries can handle integers and floats as arguments correctly now
- Fixed using Query helpers, such as
page()
alongside provided objects with the same name #5276 - Structure form options button doesn't disappear anymore when form is open but disabled #5302
- Fixed Panel URL redirect issue when running on subfolder #5266
- Fixed number field blur issue #5170
- Fixed language detection with custom locale #5320
- Fixed user blueprint home option #5359 (regression)
- Fixed full preview slug in change URL dialog when in multi-language mode #5371
- Fixed correct slug rules usage for Romanian (thanks to @danburzo) #5376
♻️ Refactored
- Clean up
search
component #5297