From 58a3efdec7ae81986aba299d07291a4f19b778f2 Mon Sep 17 00:00:00 2001 From: Giuseppe Villani Date: Fri, 21 Oct 2022 14:30:42 +0200 Subject: [PATCH] [aWB3q8K5] Fix CWE-73: Added check to prevent reading from outside metrics directory --- full/src/main/java/apoc/metrics/Metrics.java | 15 +++++++++++++-- full/src/test/java/apoc/metrics/MetricsTest.java | 13 +++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/full/src/main/java/apoc/metrics/Metrics.java b/full/src/main/java/apoc/metrics/Metrics.java index b45290f228..07e0731a84 100644 --- a/full/src/main/java/apoc/metrics/Metrics.java +++ b/full/src/main/java/apoc/metrics/Metrics.java @@ -13,6 +13,7 @@ import java.io.File; import java.io.FilenameFilter; +import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -28,6 +29,9 @@ */ @Extended public class Metrics { + public static final String OUTSIDE_DIR_ERR_MSG = "The path you are trying to access is outside the metrics directory and " + + "this procedure is only permitted to access files in it. " + + "This may occur if the path in question is a symlink or other link."; @Context public Log log; @@ -163,14 +167,21 @@ public Stream loadCsvForMetric(String metricName, Map Assert.fail("Should fail because the path is outside the dir ")); + } catch (RuntimeException e) { + assertEquals("Failed to invoke procedure `apoc.metrics.get`: Caused by: java.lang.RuntimeException: " + OUTSIDE_DIR_ERR_MSG, e.getMessage()); + } + } @Test public void shouldGetMetrics() {