[SECURITY] Mitigate directly accessible file upload in form framework
File handling implementation in `UploadedFileReferenceConverter` of `ext:form` creates files in `/fileadmin/user_uploads/` whenever some Extbase controller is (implicitly) dealing with `FileReference` models, unless particular implementations assign specific type converters or register type converters having a higher processing priority. As a side-effect this could lead to by-passing mime-type validators, allowing to plant cross-site scripting and other malicious binaries to public accessible `/fileadmin/` storage. PHP files and similar are blocked since `fileDenyPattern` rule is active in any case. This change makes the usage of `UploadedFileReferenceConverter` more specific in the scope of processing contact forms with `ext:form` * use random folder names for files, `.../form_abcde12345/image.png` * removes `UploadedFileReferenceConverter` from being used implicitly by other Extbase implementations dealing with `FileReference` models `PseudoFileReference` has been introduced to limit properties being serialized to `uid` (in case it's a real file reference) or `uidLocal` (in case it's a transient reference, pointing to a file). Direct URLs to uploaded files are substituted by `fileDump` eID script now, enforcing corresponding FAL mime-type and denying the web server from guessing/interpreting a different mime-type based on file suffix. A unique form `__session` value has been introduce, serving as seed to derive for instance mentioned folder names for uploaded files. In addition to that, form `__state` is only parsed when having been submitted via expected `FormFrontendController::performAction`. Resolves: #92136 Releases: master, 11.1, 10.4, 9.5 Change-Id: I7c33803443a68d6b3c895ec74da802a70bd390c1 Security-Bulletin: TYPO3-CORE-SA-2021-002 Security-References: CVE-2021-21355 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/68435 Tested-by:Oliver Hader <oliver.hader@typo3.org> Reviewed-by:
Oliver Hader <oliver.hader@typo3.org>
Showing
- Build/Scripts/generateMimeTypes.php 82 additions, 0 deletionsBuild/Scripts/generateMimeTypes.php
- Build/package.json 1 addition, 0 deletionsBuild/package.json
- Build/yarn.lock 5 additions, 0 deletionsBuild/yarn.lock
- typo3/sysext/core/Classes/Resource/FileReference.php 4 additions, 2 deletionstypo3/sysext/core/Classes/Resource/FileReference.php
- typo3/sysext/core/Classes/Resource/MimeTypeCollection.php 993 additions, 0 deletionstypo3/sysext/core/Classes/Resource/MimeTypeCollection.php
- typo3/sysext/core/Classes/Resource/MimeTypeDetector.php 60 additions, 0 deletionstypo3/sysext/core/Classes/Resource/MimeTypeDetector.php
- typo3/sysext/form/Classes/Domain/Finishers/DeleteUploadsFinisher.php 39 additions, 0 deletions...t/form/Classes/Domain/Finishers/DeleteUploadsFinisher.php
- typo3/sysext/form/Classes/Domain/Runtime/FormRuntime.php 113 additions, 4 deletionstypo3/sysext/form/Classes/Domain/Runtime/FormRuntime.php
- typo3/sysext/form/Classes/Domain/Runtime/FormRuntime/FormSession.php 94 additions, 0 deletions...t/form/Classes/Domain/Runtime/FormRuntime/FormSession.php
- typo3/sysext/form/Classes/Domain/Runtime/FormRuntime/Lifecycle/AfterFormStateInitializedInterface.php 34 additions, 0 deletions...mRuntime/Lifecycle/AfterFormStateInitializedInterface.php
- typo3/sysext/form/Classes/Mvc/Property/PropertyMappingConfiguration.php 58 additions, 6 deletions...orm/Classes/Mvc/Property/PropertyMappingConfiguration.php
- typo3/sysext/form/Classes/Mvc/Property/TypeConverter/PseudoFile.php 106 additions, 0 deletions...xt/form/Classes/Mvc/Property/TypeConverter/PseudoFile.php
- typo3/sysext/form/Classes/Mvc/Property/TypeConverter/PseudoFileReference.php 86 additions, 0 deletions...lasses/Mvc/Property/TypeConverter/PseudoFileReference.php
- typo3/sysext/form/Classes/Mvc/Property/TypeConverter/UploadedFileReferenceConverter.php 90 additions, 22 deletions...Property/TypeConverter/UploadedFileReferenceConverter.php
- typo3/sysext/form/Classes/Mvc/Validation/FileSizeValidator.php 8 additions, 4 deletions.../sysext/form/Classes/Mvc/Validation/FileSizeValidator.php
- typo3/sysext/form/Classes/Mvc/Validation/MimeTypeValidator.php 32 additions, 6 deletions.../sysext/form/Classes/Mvc/Validation/MimeTypeValidator.php
- typo3/sysext/form/Classes/Slot/ResourcePublicationSlot.php 83 additions, 0 deletionstypo3/sysext/form/Classes/Slot/ResourcePublicationSlot.php
- typo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php 36 additions, 6 deletionstypo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php
- typo3/sysext/form/Configuration/Services.yaml 7 additions, 0 deletionstypo3/sysext/form/Configuration/Services.yaml
- typo3/sysext/form/Resources/Private/Language/locallang.xlf 3 additions, 0 deletionstypo3/sysext/form/Resources/Private/Language/locallang.xlf
Please register or sign in to comment