Summary
The Struts 2 defaultStack in 6.8.0 includes both the old FileUploadInterceptor and the new ActionFileUploadInterceptor. Actions that don't implement UploadedFilesAware fall back to the old vulnerable interceptor, leaving a critical CVE (path traversal via file upload) unmitigated.
Problem
- The old
FileUploadInterceptor injects uploaded files via OGNL parameter setters — this is the vulnerable code path
- The new
ActionFileUploadInterceptor only processes files for actions implementing UploadedFilesAware — otherwise it skips entirely
- All 30 file upload 2Action classes currently use the old
File setter pattern, meaning the vulnerable interceptor handles every upload
Confirmed via runtime stack trace analysis — FileUploadInterceptor.intercept() is active in the call chain for all upload actions.
Solution
- Implement
UploadedFilesAware on all 30 upload 2Action classes
- Use
withUploadedFiles(List<UploadedFile>) callback to receive files via the secure ActionFileUploadInterceptor
- Use
PathValidationUtils.toFile() helper for safe UploadedFile → File extraction
- Remove explicit
fileUpload interceptor refs from struts.xml action mappings
- Pass
allowedTypes/allowedExtensions via actionFileUpload params where needed
Affected Actions (30 files)
Billing, case management, document management, eforms, encounters, forms, HRM, MCEDT, labs, login, reports, traceability — all 2Action classes with file upload functionality.
References
Summary
The Struts 2
defaultStackin 6.8.0 includes both the oldFileUploadInterceptorand the newActionFileUploadInterceptor. Actions that don't implementUploadedFilesAwarefall back to the old vulnerable interceptor, leaving a critical CVE (path traversal via file upload) unmitigated.Problem
FileUploadInterceptorinjects uploaded files via OGNL parameter setters — this is the vulnerable code pathActionFileUploadInterceptoronly processes files for actions implementingUploadedFilesAware— otherwise it skips entirelyFilesetter pattern, meaning the vulnerable interceptor handles every uploadConfirmed via runtime stack trace analysis —
FileUploadInterceptor.intercept()is active in the call chain for all upload actions.Solution
UploadedFilesAwareon all 30 upload 2Action classeswithUploadedFiles(List<UploadedFile>)callback to receive files via the secureActionFileUploadInterceptorPathValidationUtils.toFile()helper for safeUploadedFile→FileextractionfileUploadinterceptor refs fromstruts.xmlaction mappingsallowedTypes/allowedExtensionsviaactionFileUploadparams where neededAffected Actions (30 files)
Billing, case management, document management, eforms, encounters, forms, HRM, MCEDT, labs, login, reports, traceability — all 2Action classes with file upload functionality.
References