[Android] Prevent a path traversal issue when uploading file through the remote access
Nicolas Pomepuy
git at videolan.org
Thu May 7 08:19:58 UTC 2026
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Tue Mar 31 13:18:17 2026 +0200| [4f0c7c7785a46d6e8ae3994b99cad74d19490ecd] | committer: Nicolas Pomepuy
Prevent a path traversal issue when uploading file through the remote access
> https://code.videolan.org/videolan/vlc-android/commit/4f0c7c7785a46d6e8ae3994b99cad74d19490ecd
---
.../org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
index c2ea2fa3bc..52d33835ae 100644
--- a/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
+++ b/application/remote-access-server/src/main/java/org/videolan/vlc/remoteaccessserver/RemoteAccessRouting.kt
@@ -235,8 +235,13 @@ fun Route.setupRouting(appContext: Context, scope: CoroutineScope) {
is PartData.FileItem -> {
File("${AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_DOWNLOAD_DIRECTORY_URI.path}/uploads").mkdirs()
fileName = part.originalFileName as String
- var fileBytes = part.streamProvider().readBytes()
- File("${AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_DOWNLOAD_DIRECTORY_URI.path}/uploads/$fileName").writeBytes(fileBytes)
+ val fileBytes = part.streamProvider().readBytes()
+ val file = File("${AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_DOWNLOAD_DIRECTORY_URI.path}/uploads/$fileName")
+ if (file.canonicalFile.parent?.startsWith(File("${AndroidDevices.MediaFolders.EXTERNAL_PUBLIC_DOWNLOAD_DIRECTORY_URI.path}/uploads").absolutePath) != true) {
+ call.respond(HttpStatusCode.Unauthorized)
+ throw (IllegalStateException("${file.canonicalFile.parent} is not a valid path"))
+ }
+ file.writeBytes(fileBytes)
}
else -> {}
}
More information about the Android
mailing list