-
Notifications
You must be signed in to change notification settings - Fork 879
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix regression when extracting tar archive #816
Conversation
…on directory Commit 93d77ff introduced a check that files extracted from a tar archive will not be written outside of the destination directory. Unfortunately it also introduced a regression prventing the extraction of any tar archive when the path to the destination directory contains a symbolic link. For example on a jenkins agent where /var/lib/jenkins is a symbolic link to /data/jenkins and a job tries to extact nodejs to /var/lib/jenkins/workspace/example-project/target/node/tmp. The old code would then check if canonical path to a tar entry like /data/jenkins/workspace/example-project/target/node/tmp/XXX starts with /var/lib/jenkins/workspace/example-project/target/node/tmp which always fails. This commit compares the canonical extraction paths of the tar entries with the canonical path of the destination directory, which fixes the regression and still checks that no file is extracted outside of the destination directory.
Could this please get merged? I cannot build my projects anymore this is kind of really bad... |
Ok, looks good. |
while (tarEntry != null) { | ||
// Create a file for this tarEntry | ||
final File destPath = new File(destinationDirectory + File.separator + tarEntry.getName()); | ||
prepDestination(destPath, tarEntry.isDirectory()); | ||
if (!destPath.getCanonicalPath().startsWith(destinationDirectory)) { | ||
if (!destPath.getCanonicalPath().startsWith(canonicalDestinationDirectory)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this fix was lost in 26 aug 2019
Line 113 in 7d6b690
if (!startsWithPath(destPath.getCanonicalPath(), destinationDirectory)) { |
i think this fix was lost in 26 August Line 113 in 7d6b690
|
There we go, 1.9.0 is released, merry christmas! 🎅 ❄️ 🎄 |
Summary
Commit 93d77ff introduced a check that files extracted from a tar archive will not be written outside of the destination directory. Unfortunately it also introduced a regression prventing the extraction of any tar archive when the path to the destination directory contains a symbolic link.
For example on a jenkins agent where
/var/lib/jenkins
is a symbolic link to/data/jenkins
and a job tries to extact nodejs to/var/lib/jenkins/workspace/example-project/target/node/tmp
. The old code would then check if canonical path to a tar entry like/data/jenkins/workspace/example-project/target/node/tmp/XXX
starts with/var/lib/jenkins/workspace/example-project/target/node/tmp
which always fails.The new check compares the canonical extraction paths of the tar entries with the canonical path of the destination directory. This also works when the destination directory path contains a symbolic link and still protects against extracting files outside the destination directory.