Needs work
Project:
Drupal.org security advisory coverage applications
Component:
module
Priority:
Normal
Category:
Task
Assigned:
Unassigned
Reporter:
Created:
18 Sep 2026 at 09:35 UTC
Updated:
26 Sep 2026 at 22:44 UTC
Jump to comment: Most recent
Comments
Comment #2
rushikesh raval commentedThank you for applying!
Before giving links helpful to understand how the review process works, what to expect from a review, and what to do to avoid a review takes more time than needed, I would like to thank all the reviewers for the work they do.
These applications are volunters-driven, which also means it is not possible to predict when an application will be marked fixed and the applicant will get the permission to opt projects into security advisory policy. While we aim to make an application as quick as possible, it is also important for us that more people review the project used for an application. In this way, we make sure applications do not miss some important points that should be instead reported.
Applications are not meant to be complete debugging sessions that eliminate every existing bug, though. I apologize if sometimes applications seem to go into too-detailed reviews.
Please read Review process for security advisory coverage: What to expect for more details and Security advisory coverage application checklist to understand what reviewers look for. Tips for ensuring a smooth review gives some hints for a smoother review.
The important notes are the following.
Keep in mind that once the project is opted into security advisory coverage, only Security Team members may change coverage.
To the reviewers
Please read How to review security advisory coverage applications, Application workflow, What to cover in an application review, and Tools to use for reviews.
The important notes are the following.
For new reviewers, I would also suggest to first read In which way the issue queue for coverage applications is different from other project queues.
Comment #3
avpadernoComment #4
avpadernoComment #5
elfifou commentedReviewed the module's file-processing code (ZipArchive-based OOXML metadata stripping) for the risks inherent to zip/XML processing: zip-slip, XXE, decompression bombs, and file-type validation.
Positive observations:
- No zip-slip: entry paths passed to deleteName()/getFromName() are hardcoded literals, never derived from the archive's own entries.
- No XML/DOM parsing anywhere (verified via grep) — _rels/.rels is edited via string regex, not DOMDocument/SimpleXML, so there's no XXE surface despite the "OOXML sanitizer" name.
- Corrupted/non-zip uploads fail gracefully (logged, no crash); legacy .doc (OLE format) is explicitly rejected rather than mishandled.
Issue found - Medium (memory exhaustion / DoS): src/Service/OoxmlSanitizer.php:83. $zip->getFromName('_rels/.rels') decompresses that entry fully into memory, with no length limit and no prior ZipArchive::statName() size check.
This runs automatically on every managed file insert/update, with no permission check of its own, so any form accepting anonymous .docx/.xlsx/.pptx uploads triggers it. Since a .docx is a fully attacker-controlled zip archive, a crafted _rels/.rels entry using a high-ratio DEFLATE decompression bomb (a legitimate one is only a few hundred bytes) can inflate to several GB in memory, exhausting the PHP worker - a repeatable DoS.
Suggested fix: check ZipArchive::statName('_rels/.rels')['size'] against a small ceiling before calling getFromName(), and skip/log if exceeded.
The rest of the module is clean and well-designed - this is a localized, easily-fixed issue, but a real exploitable one as written. Not ready for security advisory coverage until addressed.
Comment #6
avpadernoComment #7
avpaderno