Skip to content
This repository was archived by the owner on Aug 6, 2025. It is now read-only.

Commit b0819e0

Browse files
jixinchigaul
authored andcommitted
more validation for containerName and blobKey to avoid access escape
1 parent c73660d commit b0819e0

3 files changed

Lines changed: 13 additions & 0 deletions

File tree

apis/filesystem/src/main/java/org/jclouds/filesystem/predicates/validators/internal/FilesystemBlobKeyValidatorImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public void validate(String name) throws IllegalArgumentException {
3838
//blobkey cannot start with / (or \ in Windows) character
3939
if (name.startsWith("\\") || name.startsWith("/"))
4040
throw new IllegalArgumentException("Blob key '" + name + "' cannot start with \\ or /");
41+
if (name.contains("../"))
42+
throw new IllegalArgumentException("Blob key '" + name + "' cannot contains ../");
4143
}
4244

4345
}

apis/filesystem/src/main/java/org/jclouds/filesystem/predicates/validators/internal/FilesystemContainerNameValidatorImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public void validate(String name) throws IllegalArgumentException {
3838
//container name cannot contains / (or \ in Windows) character
3939
if (name.contains("\\") || name.contains("/"))
4040
throw new IllegalArgumentException("Container name '" + name + "' cannot contain \\ or /");
41+
if (name.equals(".") || name.equals(".."))
42+
throw new IllegalArgumentException("Container name cannot be . or ..");
4143
}
4244

4345
}

apis/filesystem/src/main/java/org/jclouds/filesystem/strategy/internal/FilesystemStorageStrategyImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ public boolean createContainerInLocation(String container, Location location, Cr
187187

188188
@Override
189189
public ContainerAccess getContainerAccess(String container) {
190+
filesystemContainerNameValidator.validate(container);
190191
File file = new File(buildPathStartingFromBaseDir(container));
191192
if (!file.exists()) {
192193
throw new ContainerNotFoundException(container, "in getContainerAccess");
@@ -217,6 +218,7 @@ public ContainerAccess getContainerAccess(String container) {
217218

218219
@Override
219220
public void setContainerAccess(String container, ContainerAccess access) {
221+
filesystemContainerNameValidator.validate(container);
220222
Path path = new File(buildPathStartingFromBaseDir(container)).toPath();
221223

222224
if ( isWindows() ) {
@@ -310,6 +312,7 @@ else if (object.isDirectory() && (optsPrefix.endsWith(File.separator) || isNullO
310312

311313
@Override
312314
public StorageMetadata getContainerMetadata(String container) {
315+
filesystemContainerNameValidator.validate(container);
313316
MutableStorageMetadata metadata = new MutableStorageMetadataImpl();
314317
metadata.setName(container);
315318
metadata.setType(StorageType.CONTAINER);
@@ -378,6 +381,8 @@ public String apply(String string) {
378381

379382
@Override
380383
public Blob getBlob(final String container, final String key) {
384+
filesystemContainerNameValidator.validate(container);
385+
filesystemBlobKeyValidator.validate(key);
381386
BlobBuilder builder = blobBuilders.get();
382387
builder.name(key);
383388
File file = getFileForBlobKey(container, key);
@@ -658,6 +663,8 @@ public void removeBlob(final String container, final String blobKey) {
658663

659664
@Override
660665
public BlobAccess getBlobAccess(String containerName, String blobName) {
666+
filesystemContainerNameValidator.validate(containerName);
667+
filesystemBlobKeyValidator.validate(blobName);
661668
if (!new File(buildPathStartingFromBaseDir(containerName)).exists()) {
662669
throw new ContainerNotFoundException(containerName, "in getBlobAccess");
663670
}
@@ -691,6 +698,8 @@ public BlobAccess getBlobAccess(String containerName, String blobName) {
691698

692699
@Override
693700
public void setBlobAccess(String container, String name, BlobAccess access) {
701+
filesystemContainerNameValidator.validate(container);
702+
filesystemBlobKeyValidator.validate(name);
694703
Path path = new File(buildPathStartingFromBaseDir(container, name)).toPath();
695704
if ( isWindows() ) {
696705
try {

0 commit comments

Comments
 (0)