Skip to content

Commit 920e5a0

Browse files
vuln-fix: Temporary Directory Hijacking or Information Disclosure
This fixes either Temporary Directory Hijacking, or Temporary Directory Local Information Disclosure. Weakness: CWE-379: Creation of Temporary File in Directory with Insecure Permissions Severity: High CVSSS: 7.3 Detection: CodeQL & OpenRewrite (https://public.moderne.io/recipes/org.openrewrite.java.security.UseFilesCreateTempDirectory) Reported-by: Jonathan Leitschuh <[email protected]> Signed-off-by: Jonathan Leitschuh <[email protected]> Bug-tracker: JLLeitschuh/security-research#10 Co-authored-by: Moderne <[email protected]>
1 parent ae818cc commit 920e5a0

File tree

3 files changed

+11
-23
lines changed

3 files changed

+11
-23
lines changed

src/main/java/com/salesforce/perfeng/uiperf/imageoptimization/service/ImageOptimizationService.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,7 @@ public final static <C> ImageOptimizationService<C> createInstance(final String
346346
logger.debug("Current local directory is: {}", new File(".").getCanonicalPath());
347347
}
348348

349-
final File tmpDir = File.createTempFile(ImageOptimizationService.class.getName(), "");
350-
tmpDir.delete();
351-
tmpDir.mkdir();
349+
final File tmpDir = Files.createTempDirectory(ImageOptimizationService.class.getName()).toFile();
352350
return new ImageOptimizationService<>(tmpDir, new File(pathToBinaryProgramsForImageOptimizationDirectory).getCanonicalFile(), timeoutInSeconds);
353351
}
354352

src/test/java/com/salesforce/perfeng/uiperf/imageoptimization/service/ImageOptimizationServiceTest.java

+7-16
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
import java.io.File;
4646
import java.io.IOException;
47+
import java.nio.file.Files;
4748
import java.util.ArrayList;
4849
import java.util.Collection;
4950
import java.util.Collections;
@@ -91,9 +92,7 @@ public class ImageOptimizationServiceTest {
9192
*/
9293
@BeforeEach
9394
public void setUp() throws IOException {
94-
final File tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
95-
tmpDir.delete();
96-
tmpDir.mkdir();
95+
final File tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
9796
tmpDir.deleteOnExit();
9897

9998
imageOptimizationService = new ImageOptimizationService<>(tmpDir, new File(DEFAULT_BINARY_APP_LOCATION));
@@ -120,9 +119,7 @@ public void testImageOptimizationService() throws IOException {
120119
actualException = assertThrows(IllegalArgumentException.class, () -> new ImageOptimizationService<>(file, new File(DEFAULT_BINARY_APP_LOCATION)));
121120
assertThat(actualException.getMessage(), matchesRegex("The passed in tmpWorkingDirectory, \".+\", needs to be a directory."));
122121

123-
final File tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
124-
tmpDir.delete();
125-
tmpDir.mkdir();
122+
final File tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
126123
tmpDir.deleteOnExit();
127124
assertThat(new ImageOptimizationService<>(tmpDir, new File(DEFAULT_BINARY_APP_LOCATION)), notNullValue());
128125
}
@@ -150,9 +147,7 @@ public void testImageOptimizationService2() throws IOException {
150147
actualException = assertThrows(IllegalArgumentException.class, () -> new ImageOptimizationService<>(file, new File(DEFAULT_BINARY_APP_LOCATION), 1));
151148
assertThat(actualException.getMessage(), matchesRegex("The passed in tmpWorkingDirectory, \".+\", needs to be a directory."));
152149

153-
File tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
154-
tmpDir.delete();
155-
tmpDir.mkdir();
150+
File tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
156151
tmpDir.deleteOnExit();
157152
assertThat(new ImageOptimizationService<>(tmpDir, new File(DEFAULT_BINARY_APP_LOCATION), 1), notNullValue());
158153

@@ -166,9 +161,7 @@ public void testImageOptimizationService2() throws IOException {
166161
file2.deleteOnExit();
167162
actualException = assertThrows(IllegalArgumentException.class, () -> new ImageOptimizationService<>(file2, new File(DEFAULT_BINARY_APP_LOCATION), 0));
168163

169-
tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
170-
tmpDir.delete();
171-
tmpDir.mkdir();
164+
tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
172165
tmpDir.deleteOnExit();
173166
assertThat(new ImageOptimizationService<>(tmpDir, new File(DEFAULT_BINARY_APP_LOCATION), 0), notNullValue());
174167
}
@@ -222,9 +215,7 @@ private static final void validateFileOptimization(final OptimizationResult<Obje
222215
}
223216

224217
private static final File getTempDir() throws IOException {
225-
final File tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
226-
tmpDir.delete();
227-
tmpDir.mkdir();
218+
final File tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
228219
tmpDir.deleteOnExit();
229220
return tmpDir;
230221
}
@@ -1188,4 +1179,4 @@ public boolean equals(final Object obj) {
11881179
&& masterFileChecksum == other.masterFileChecksum;
11891180
}
11901181
}
1191-
}
1182+
}

src/test/java/com/salesforce/perfeng/uiperf/imageoptimization/utils/ImageUtilsTest.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import java.io.IOException;
4747
import java.io.InputStream;
4848
import java.net.URLConnection;
49+
import java.nio.file.Files;
4950

5051
import org.apache.commons.io.FileUtils;
5152
import org.hamcrest.io.FileMatchers;
@@ -163,9 +164,7 @@ public void testConvertImageNative() throws IOException, ThirdPartyBinaryNotFoun
163164
}
164165
assertThat(ImageUtils.visuallyCompare(new File("./src/test/java/com/salesforce/perfeng/uiperf/imageoptimization/utils/forceapp_bg.gif"), convertedFile), equalTo(TRUE));
165166

166-
final File tmpDir = File.createTempFile(ImageOptimizationServiceTest.class.getName(), "");
167-
tmpDir.delete();
168-
tmpDir.mkdir();
167+
final File tmpDir = Files.createTempDirectory(ImageOptimizationServiceTest.class.getName()).toFile();
169168
tmpDir.deleteOnExit();
170169

171170
convertedFile = new File(tmpDir.getCanonicalPath() + "/forceapp_bg." + IImageOptimizationService.PNG_EXTENSION);
@@ -195,4 +194,4 @@ public void testIsAminatedGif() {
195194
assertThat(ImageUtils.isAminatedGif(new File("./src/test/java/com/salesforce/perfeng/uiperf/imageoptimization/service/el_icon.gif")), equalTo(FALSE));
196195
assertThat(ImageUtils.isAminatedGif(new File("./src/test/java/com/salesforce/perfeng/uiperf/imageoptimization/service/addCol.gif")), equalTo(FALSE));
197196
}
198-
}
197+
}

0 commit comments

Comments
 (0)