Skip to content

Commit 7f02baf

Browse files
committed
Verify insecure paths with ..\ and '..//'. Add more tests.
1 parent fa86e52 commit 7f02baf

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

spring-cloud-netflix-zuul/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,12 @@ private boolean isInsecurePath(String path) {
262262
}
263263
return true;
264264
}
265+
if (path.contains("..\\")) {
266+
if (log.isWarnEnabled()) {
267+
log.warn("Path contains \"..\\\"");
268+
}
269+
return true;
270+
}
265271
return false;
266272
}
267273

spring-cloud-netflix-zuul/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,9 +714,51 @@ public void exceptionThrownForInsecurePath() {
714714
.isInstanceOf(InsecureRequestPathException.class);
715715
}
716716

717+
@Test
718+
public void exceptionThrownForInsecurePathWithBackslash() {
719+
request.setRequestURI("'/api/..\\admin/index'");
720+
assertThatThrownBy(() -> filter.run())
721+
.isInstanceOf(InsecureRequestPathException.class);
722+
}
723+
724+
@Test
725+
public void exceptionThrownForInsecurePathWithDoubleSlash() {
726+
request.setRequestURI("'/api/..//admin/index'");
727+
assertThatThrownBy(() -> filter.run())
728+
.isInstanceOf(InsecureRequestPathException.class);
729+
}
730+
731+
@Test
732+
public void exceptionThrownForEncodedInsecurePathWithBackslash() {
733+
request.setRequestURI("%27%2Fapi%2F..%5Cadmin%2Findex%27");
734+
assertThatThrownBy(() -> filter.run())
735+
.isInstanceOf(InsecureRequestPathException.class);
736+
}
737+
738+
@Test
739+
public void exceptionThrownForEncodedInsecurePathWithDoubleSlash() {
740+
request.setRequestURI("%27%2Fapi%2F..%2F%2Fadmin%2Findex%27");
741+
assertThatThrownBy(() -> filter.run())
742+
.isInstanceOf(InsecureRequestPathException.class);
743+
}
744+
745+
@Test
746+
public void exceptionThrownForDoubleEncodedInsecurePathWithBackslash() {
747+
request.setRequestURI("%2527%252Fapi%252F..%255Cadmin%252Findex%2527");
748+
assertThatThrownBy(() -> filter.run())
749+
.isInstanceOf(InsecureRequestPathException.class);
750+
}
751+
752+
@Test
753+
public void exceptionThrownForDoubleEncodedInsecurePathWithDoubleSlash() {
754+
request.setRequestURI("%27%2Fapi%2F..%2F%2Fadmin%2Findex%27");
755+
assertThatThrownBy(() -> filter.run())
756+
.isInstanceOf(InsecureRequestPathException.class);
757+
}
758+
717759
@Test
718760
public void exceptionThrownForEncodedInsecurePath() {
719-
request.setRequestURI("%27%2Fapi%2F..%3B%2Fadmin%2Findex%27");
761+
request.setRequestURI("%2527%252Fapi%252F..%252F%252Fadmin%252Findex%2527");
720762
assertThatThrownBy(() -> filter.run())
721763
.isInstanceOf(InsecureRequestPathException.class);
722764
}

0 commit comments

Comments
 (0)