This is an automated email from the ASF dual-hosted git repository.

xxyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/main by this push:
     new 45341307d5 vuln-fix: Temporary File Information Disclosure
45341307d5 is described below

commit 45341307d573c181fa343a34e95fc76b89a5e0ba
Author: Jonathan Leitschuh <jonathan.leitsc...@gmail.com>
AuthorDate: Fri Nov 18 22:53:02 2022 +0000

    vuln-fix: Temporary File Information Disclosure
    
    
    
    This fixes temporary file information disclosure vulnerability due to the 
use
    of the vulnerable `File.createTempFile()` method. The vulnerability is 
fixed by
    using the `Files.createTempFile()` method which sets the correct posix 
permissions.
    
    Weakness: CWE-377: Insecure Temporary File
    Severity: Medium
    CVSSS: 5.5
    Detection: CodeQL & OpenRewrite 
(https://public.moderne.io/recipes/org.openrewrite.java.security.SecureTempFileCreation)
    
    Reported-by: Jonathan Leitschuh <jonathan.leitsc...@gmail.com>
    Signed-off-by: Jonathan Leitschuh <jonathan.leitsc...@gmail.com>
    
    Bug-tracker: https://github.com/JLLeitschuh/security-research/issues/18
    
    
    Co-authored-by: Moderne <t...@moderne.io>
---
 .../java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java    | 3 ++-
 .../main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java | 3 ++-
 .../org/apache/kylin/common/persistence/AutoDeleteDirectory.java     | 3 ++-
 .../java/org/apache/kylin/common/persistence/FileResourceStore.java  | 3 ++-
 .../main/java/org/apache/kylin/common/persistence/ResourceStore.java | 3 ++-
 .../src/test/java/org/apache/kylin/common/util/SSHClientTest.java    | 3 ++-
 .../src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java | 3 ++-
 .../src/test/java/org/apache/kylin/measure/topn/TopNCounterTest.java | 3 ++-
 core-metadata/src/test/java/org/apache/kylin/source/H2Database.java  | 3 ++-
 .../org/apache/kylin/engine/spark/job/NSparkMergeStatisticsStep.java | 3 ++-
 .../src/test/java/org/apache/kylin/engine/spark/NSparkBasicTest.java | 3 ++-
 .../main/java/org/apache/kylin/query/schema/OLAPSchemaFactory.java   | 3 ++-
 .../java/org/apache/kylin/tool/extractor/AbstractInfoExtractor.java  | 3 ++-
 tool/src/test/java/org/apache/kylin/tool/KylinConfigCLITest.java     | 5 +++--
 14 files changed, 29 insertions(+), 15 deletions(-)

diff --git 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
index fd4d4133bd..e2f7e0b5f6 100644
--- 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
+++ 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
@@ -29,6 +29,7 @@ import static 
org.apache.kylin.engine.mr.common.JobRelatedMetaUtil.collectCubeMe
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -595,7 +596,7 @@ public abstract class AbstractHadoopJob extends Configured 
implements Tool {
 
     protected void dumpKylinPropsAndMetadata(String prj, Set<String> dumpList, 
KylinConfig kylinConfig,
             Configuration conf) throws IOException {
-        File tmp = File.createTempFile("kylin_job_meta", "");
+        File tmp = Files.createTempFile("kylin_job_meta", "").toFile();
         FileUtils.forceDelete(tmp); // we need a directory, so delete the file 
first
 
         File metaDir = new File(tmp, "meta");
diff --git 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
index 14f0cbf0ae..ae06fa8bd9 100644
--- 
a/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
+++ 
b/build-engine/src/main/java/org/apache/kylin/engine/mr/common/CubeStatsReader.java
@@ -26,6 +26,7 @@ import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
@@ -156,7 +157,7 @@ public class CubeStatsReader {
     }
 
     private File writeTmpSeqFile(InputStream inputStream) throws IOException {
-        File tempFile = File.createTempFile("kylin_stats_tmp", ".seq");
+        File tempFile = Files.createTempFile("kylin_stats_tmp", 
".seq").toFile();
         FileOutputStream out = null;
         try {
             out = new FileOutputStream(tempFile);
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/persistence/AutoDeleteDirectory.java
 
b/core-common/src/main/java/org/apache/kylin/common/persistence/AutoDeleteDirectory.java
index a496ba8d3f..8ce05f8e95 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/persistence/AutoDeleteDirectory.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/persistence/AutoDeleteDirectory.java
@@ -21,6 +21,7 @@ package org.apache.kylin.common.persistence;
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
 
 public class AutoDeleteDirectory implements Closeable {
 
@@ -31,7 +32,7 @@ public class AutoDeleteDirectory implements Closeable {
     }
     public AutoDeleteDirectory(String prefix, String suffix) {
         try {
-            tempFile = File.createTempFile(prefix, suffix);
+            tempFile = Files.createTempFile(prefix, suffix).toFile();
             org.apache.commons.io.FileUtils.forceDelete(tempFile); // we need 
a directory, so delete the file first
             tempFile.mkdirs();
         } catch (IOException e) {
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/persistence/FileResourceStore.java
 
b/core-common/src/main/java/org/apache/kylin/common/persistence/FileResourceStore.java
index 75c625bdd0..8ab9b6a99e 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/persistence/FileResourceStore.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/persistence/FileResourceStore.java
@@ -24,6 +24,7 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.Collection;
 
 import org.apache.commons.io.FileUtils;
@@ -130,7 +131,7 @@ public class FileResourceStore extends ResourceStore {
         if (--failPutResourceCountDown == 0)
             throw new IOException("for test");
 
-        File tmp = File.createTempFile("kylin-fileresource-", ".tmp");
+        File tmp = Files.createTempFile("kylin-fileresource-", 
".tmp").toFile();
         try {
 
             try (FileOutputStream out = new FileOutputStream(tmp); 
DataOutputStream dout = new DataOutputStream(out)) {
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index 65d4f59f2d..0a332bb9bb 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -24,6 +24,7 @@ import java.io.DataOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -787,7 +788,7 @@ abstract public class ResourceStore {
             boolean loadContent, Visitor visitor) throws IOException;
 
     public static String dumpResources(KylinConfig kylinConfig, 
Collection<String> dumpList) throws IOException {
-        File tmp = File.createTempFile("kylin_job_meta", "");
+        File tmp = Files.createTempFile("kylin_job_meta", "").toFile();
         FileUtils.forceDelete(tmp); // we need a directory, so delete the file 
first
 
         File metaDir = new File(tmp, "meta");
diff --git 
a/core-common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java 
b/core-common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java
index f93a0e3bfa..4a3d475f48 100644
--- a/core-common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java
+++ b/core-common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.kylin.common.KylinConfig;
@@ -81,7 +82,7 @@ public class SSHClientTest extends LocalFileMetadataTestCase {
             return;
 
         SSHClient ssh = new SSHClient(this.hostname, this.port, this.username, 
this.password);
-        File tmpFile = File.createTempFile("test_scp", "", new File("/tmp"));
+        File tmpFile = Files.createTempFile(new File("/tmp").toPath(), 
"test_scp", "").toFile();
         tmpFile.deleteOnExit();
         FileUtils.write(tmpFile, "test_scp", Charset.defaultCharset());
         ssh.scpFileToRemote(tmpFile.getAbsolutePath(), "/tmp");
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java
index ff66805e56..aba0d2fc28 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java
@@ -30,6 +30,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
+import java.nio.file.Files;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -666,7 +667,7 @@ public class GTAggregateScanner implements IGTScanner, 
IGTBypassChecker {
             DataInputStream dis;
 
             public Dump(SortedMap<byte[], MeasureAggregator[]> buffMap, long 
estMemSize) throws IOException {
-                this.dumpedFile = File.createTempFile("KYLIN_SPILL_", ".tmp");
+                this.dumpedFile = Files.createTempFile("KYLIN_SPILL_", 
".tmp").toFile();
                 this.buffMap = buffMap;
                 this.estMemSize = estMemSize;
             }
diff --git 
a/core-metadata/src/test/java/org/apache/kylin/measure/topn/TopNCounterTest.java
 
b/core-metadata/src/test/java/org/apache/kylin/measure/topn/TopNCounterTest.java
index 817f27aea4..7247da9540 100644
--- 
a/core-metadata/src/test/java/org/apache/kylin/measure/topn/TopNCounterTest.java
+++ 
b/core-metadata/src/test/java/org/apache/kylin/measure/topn/TopNCounterTest.java
@@ -27,6 +27,7 @@ import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -76,7 +77,7 @@ public class TopNCounterTest {
         ZipfDistribution zipf = new ZipfDistribution(KEY_SPACE, 0.5);
         int keyIndex;
 
-        File tempFile = File.createTempFile("ZipfDistribution", ".txt");
+        File tempFile = Files.createTempFile("ZipfDistribution", 
".txt").toFile();
 
         if (tempFile.exists())
             FileUtils.forceDelete(tempFile);
diff --git 
a/core-metadata/src/test/java/org/apache/kylin/source/H2Database.java 
b/core-metadata/src/test/java/org/apache/kylin/source/H2Database.java
index bec7434d1d..16fd9fa193 100644
--- a/core-metadata/src/test/java/org/apache/kylin/source/H2Database.java
+++ b/core-metadata/src/test/java/org/apache/kylin/source/H2Database.java
@@ -29,6 +29,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -93,7 +94,7 @@ public class H2Database {
         File tempFile = null;
 
         try {
-            tempFile = File.createTempFile("tmp_h2", ".csv");
+            tempFile = Files.createTempFile("tmp_h2", ".csv").toFile();
             FileOutputStream tempFileStream = new FileOutputStream(tempFile);
             String path = path(tableDesc);
             InputStream csvStream = 
metaMgr.getStore().getResource(path).content();
diff --git 
a/kylin-spark-project/kylin-spark-engine/src/main/java/org/apache/kylin/engine/spark/job/NSparkMergeStatisticsStep.java
 
b/kylin-spark-project/kylin-spark-engine/src/main/java/org/apache/kylin/engine/spark/job/NSparkMergeStatisticsStep.java
index 1884cd48f2..024cacdd90 100644
--- 
a/kylin-spark-project/kylin-spark-engine/src/main/java/org/apache/kylin/engine/spark/job/NSparkMergeStatisticsStep.java
+++ 
b/kylin-spark-project/kylin-spark-engine/src/main/java/org/apache/kylin/engine/spark/job/NSparkMergeStatisticsStep.java
@@ -52,6 +52,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.List;
 import java.util.Map;
 
@@ -94,7 +95,7 @@ public class NSparkMergeStatisticsStep extends 
NSparkExecutable {
                 File tempFile = null;
                 FileOutputStream tempFileStream = null;
                 try {
-                    tempFile = File.createTempFile(segmentId, ".seq");
+                    tempFile = Files.createTempFile(segmentId, 
".seq").toFile();
                     tempFileStream = new FileOutputStream(tempFile);
                     org.apache.commons.io.IOUtils.copy(is, tempFileStream);
                 } finally {
diff --git 
a/kylin-spark-project/kylin-spark-engine/src/test/java/org/apache/kylin/engine/spark/NSparkBasicTest.java
 
b/kylin-spark-project/kylin-spark-engine/src/test/java/org/apache/kylin/engine/spark/NSparkBasicTest.java
index c1cf6a4c40..ebfae7a286 100644
--- 
a/kylin-spark-project/kylin-spark-engine/src/test/java/org/apache/kylin/engine/spark/NSparkBasicTest.java
+++ 
b/kylin-spark-project/kylin-spark-engine/src/test/java/org/apache/kylin/engine/spark/NSparkBasicTest.java
@@ -31,6 +31,7 @@ import org.junit.Test;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
 import java.util.List;
 
 @Ignore("convenient trial tool for dev")
@@ -39,7 +40,7 @@ public class NSparkBasicTest extends 
LocalWithSparkSessionTest {
     @Test
     public void testToRdd() throws IOException {
         final String dataJson = "0,1,2,1000\n0,1,2,1\n3,4,5,2";
-        File dataFile = File.createTempFile("tmp", ".csv");
+        File dataFile = Files.createTempFile("tmp", ".csv").toFile();
         dataFile.deleteOnExit();
         FileUtils.writeStringToFile(dataFile, dataJson, 
Charset.defaultCharset());
 
diff --git 
a/query/src/main/java/org/apache/kylin/query/schema/OLAPSchemaFactory.java 
b/query/src/main/java/org/apache/kylin/query/schema/OLAPSchemaFactory.java
index 534b02f5a4..7c1c370890 100644
--- a/query/src/main/java/org/apache/kylin/query/schema/OLAPSchemaFactory.java
+++ b/query/src/main/java/org/apache/kylin/query/schema/OLAPSchemaFactory.java
@@ -20,6 +20,7 @@ package org.apache.kylin.query.schema;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Locale;
@@ -119,7 +120,7 @@ public class OLAPSchemaFactory implements SchemaFactory {
             String jsonContent = out.toString();
             File file = cachedJsons.get(jsonContent);
             if (file == null) {
-                file = File.createTempFile("olap_model_", ".json");
+                file = Files.createTempFile("olap_model_", ".json").toFile();
                 file.deleteOnExit();
                 FileUtils.writeStringToFile(file, jsonContent);
 
diff --git 
a/tool/src/main/java/org/apache/kylin/tool/extractor/AbstractInfoExtractor.java 
b/tool/src/main/java/org/apache/kylin/tool/extractor/AbstractInfoExtractor.java
index 845a182ab1..3a8025fcf4 100644
--- 
a/tool/src/main/java/org/apache/kylin/tool/extractor/AbstractInfoExtractor.java
+++ 
b/tool/src/main/java/org/apache/kylin/tool/extractor/AbstractInfoExtractor.java
@@ -22,6 +22,7 @@ package org.apache.kylin.tool.extractor;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
@@ -122,7 +123,7 @@ public abstract class AbstractInfoExtractor extends 
AbstractApplication {
 
         // compress to zip package
         if (shouldCompress) {
-            File tempZipFile = File.createTempFile(packageType + "_", ".zip");
+            File tempZipFile = Files.createTempFile(packageType + "_", 
".zip").toFile();
             File tempZipDir = new File(exportDest + packageName + "/");
             FileUtils.forceMkdir(tempZipDir);
             for (File file : exportDir.listFiles()) {
diff --git a/tool/src/test/java/org/apache/kylin/tool/KylinConfigCLITest.java 
b/tool/src/test/java/org/apache/kylin/tool/KylinConfigCLITest.java
index e28e567cd1..5977fc9478 100644
--- a/tool/src/test/java/org/apache/kylin/tool/KylinConfigCLITest.java
+++ b/tool/src/test/java/org/apache/kylin/tool/KylinConfigCLITest.java
@@ -25,6 +25,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.nio.charset.Charset;
+import java.nio.file.Files;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.kylin.common.util.LocalFileMetadataTestCase;
@@ -36,7 +37,7 @@ public class KylinConfigCLITest extends 
LocalFileMetadataTestCase {
     @Test
     public void testGetProperty() throws IOException {
         PrintStream o = System.out;
-        File f = File.createTempFile("cfg", ".tmp");
+        File f = Files.createTempFile("cfg", ".tmp").toFile();
         PrintStream tmpOut = new PrintStream(new FileOutputStream(f), false, 
"UTF-8");
         System.setOut(tmpOut);
         KylinConfigCLI.main(new String[] { "kylin.storage.url" });
@@ -51,7 +52,7 @@ public class KylinConfigCLITest extends 
LocalFileMetadataTestCase {
     @Test
     public void testGetPrefix() throws IOException {
         PrintStream o = System.out;
-        File f = File.createTempFile("cfg", ".tmp");
+        File f = Files.createTempFile("cfg", ".tmp").toFile();
         PrintStream tmpOut = new PrintStream(new FileOutputStream(f), false, 
"UTF-8");
         System.setOut(tmpOut);
         KylinConfigCLI.main(new String[] { "kylin.cube.engine." });

Reply via email to