Skip to content

Commit 6595c0b

Browse files
vuln-fix: Partial Path Traversal Vulnerability
This fixes a partial path traversal vulnerability. Replaces `dir.getCanonicalPath().startsWith(parent.getCanonicalPath())`, which is vulnerable to partial path traversal attacks, with the more secure `dir.getCanonicalFile().toPath().startsWith(parent.getCanonicalFile().toPath())`. To demonstrate this vulnerability, consider `"/usr/outnot".startsWith("/usr/out")`. The check is bypassed although `/outnot` is not under the `/out` directory. It's important to understand that the terminating slash may be removed when using various `String` representations of the `File` object. For example, on Linux, `println(new File("/var"))` will print `/var`, but `println(new File("/var", "/")` will print `/var/`; however, `println(new File("/var", "/").getCanonicalPath())` will print `/var`. Weakness: CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') Severity: Medium CVSSS: 6.1 Detection: CodeQL & OpenRewrite (https://public.moderne.io/recipes/org.openrewrite.java.security.PartialPathTraversalVulnerability) Reported-by: Jonathan Leitschuh <Jonathan.Leitschuh@gmail.com> Signed-off-by: Jonathan Leitschuh <Jonathan.Leitschuh@gmail.com> Bug-tracker: JLLeitschuh/security-research#13 Co-authored-by: Moderne <team@moderne.io>
1 parent 2c8bb62 commit 6595c0b

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

ttorrent-client/src/main/java/com/turn/ttorrent/client/storage/FileCollectionStorage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public static FileCollectionStorage create(TorrentMetadata metadata, File parent
7676
for (TorrentFile file : metadata.getFiles()) {
7777
File actual = new File(parent, file.getRelativePathAsString());
7878

79-
if (!actual.getCanonicalPath().startsWith(parent.getCanonicalPath())) {
79+
if (!actual.getCanonicalFile().toPath().startsWith(parent.getCanonicalFile().toPath())) {
8080
throw new SecurityException("Torrent file path attempted " +
8181
"to break directory jail!");
8282
}

0 commit comments

Comments
 (0)