Fix Refactor file path handling to use Path API #3007
+5
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
General fix approach
When checking whether a user-supplied path is within a given directory, ensure you are comparing normalized
Pathobjects or, if using strings, that directory paths are slash-terminated before usingstartsWith. In Java,Path#startsWithperforms a component-wise check and avoids the partial-prefix issue.Best concrete fix here
We only need to adjust
Util.isAppSpecificStorageFileUriinUtil.java. Currently it does:We will convert these to
Pathobjects and usestartsWithon normalized paths:This keeps the original behavior (checking “inside app-specific internal or external storage”) but removes the partial-prefix issue.
toRealPath()is roughly thePathequivalent ofgetCanonicalPath(), resolving symlinks and...We must add the necessary imports at the top of
Util.java:(We actually only need
Path;Pathsis not strictly required, so we will only importPath.)References
Partial Path Traversal
CVE-2022-23457: ESAPI Vulnerability Report