Skip to content

Commit da04ccc

Browse files
committed
1 parent 9acefb2 commit da04ccc

File tree

6 files changed

+41
-4
lines changed

6 files changed

+41
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ Sort by letter.
3030
- [CORS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CORS.java)
3131
- [CRLF Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CRLFInjection.java)
3232
- [CSRF](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
33+
- [CVE-2022-22978](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
3334
- [Deserialize](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Deserialize.java)
3435
- [Fastjson](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Fastjson.java)
3536
- [File Upload](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/FileUpload.java)

README_zh.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ joychou/joychou123
2626
- [CORS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CORS.java)
2727
- [CRLF Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CRLFInjection.java)
2828
- [CSRF](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
29+
- [CVE-2022-22978](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
2930
- [Deserialize](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Deserialize.java)
3031
- [Fastjson](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Fastjson.java)
3132
- [File Upload](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/FileUpload.java)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.joychou.controller;
2+
3+
4+
5+
import java.net.URLDecoder;
6+
import java.nio.charset.StandardCharsets;
7+
import java.util.regex.Pattern;
8+
9+
10+
/**
11+
* Spring Security CVE-2022-22978 <p>
12+
* <a href="https://github.com/JoyChou93/java-sec-code/wiki/CVE-2022-22978">漏洞相关wiki</a>
13+
* @author JoyChou @2023-01-212
14+
*/
15+
16+
public class Dotall {
17+
18+
19+
/**
20+
* <a href="https://github.com/spring-projects/spring-security/compare/5.5.6..5.5.7">官方spring-security修复commit记录</a>
21+
* 漏洞描述:h
22+
*/
23+
public static void main(String[] args) throws Exception{
24+
Pattern vuln_pattern = Pattern.compile("/black_path.*");
25+
Pattern sec_pattern = Pattern.compile("/black_path.*", Pattern.DOTALL);
26+
27+
String poc = URLDecoder.decode("/black_path%0a/xx", StandardCharsets.UTF_8.toString());
28+
System.out.println("Poc: " + poc);
29+
System.out.println("Not dotall: " + vuln_pattern.matcher(poc).matches()); // false,非dotall无法匹配\r\n
30+
System.out.println("Dotall: " + sec_pattern.matcher(poc).matches()); // true,dotall可以匹配\r\n
31+
}
32+
}

src/main/java/org/joychou/security/CsrfAccessDeniedHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public void handle(HttpServletRequest request, HttpServletResponse response,
2929

3030
response.setContentType(MediaType.TEXT_HTML_VALUE); // content-type: text/html
3131
response.setStatus(HttpServletResponse.SC_FORBIDDEN); // 403 forbidden
32-
response.getWriter().write("CSRF check failed by JoyChou."); // response contents
32+
response.getWriter().write("403 forbidden by JoyChou."); // response contents
3333
}
3434

3535
}

src/main/java/org/joychou/security/WebSecurityConfig.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,16 @@ protected void configure(HttpSecurity http) throws Exception {
6262
.ignoringAntMatchers(csrfExcludeUrl) // 不进行csrf校验的uri,多个uri使用逗号分隔
6363
.csrfTokenRepository(new CookieCsrfTokenRepository());
6464
http.exceptionHandling().accessDeniedHandler(new CsrfAccessDeniedHandler());
65-
// http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());«
65+
66+
// http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
6667

6768
http.cors();
6869

6970
// spring security login settings
7071
http.authorizeRequests()
7172
.antMatchers("/css/**", "/js/**").permitAll() // permit static resources
73+
// CVE-2022-22978漏洞代码
74+
.regexMatchers("/black_path.*").denyAll() // 如果正则匹配到/black_path,则forbidden
7275
.anyRequest().authenticated().and() // any request authenticated except above static resources
7376
.formLogin().loginPage("/login").permitAll() // permit all to access /login page
7477
.successHandler(new LoginSuccessHandler())

src/main/java/org/joychou/util/HttpUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public static String HttpURLConnection(String url) {
146146
public static String Jsoup(String url) {
147147
try {
148148
Document doc = Jsoup.connect(url)
149-
//.followRedirects(false)
149+
// .followRedirects(false)
150150
.timeout(3000)
151151
.cookie("name", "joychou") // request cookies
152152
.execute().parse();
@@ -164,7 +164,7 @@ public static String Jsoup(String url) {
164164
*/
165165
public static String okhttp(String url) throws IOException {
166166
OkHttpClient client = new OkHttpClient();
167-
// client.setFollowRedirects(false);
167+
// client.setFollowRedirects(false);
168168
com.squareup.okhttp.Request ok_http = new com.squareup.okhttp.Request.Builder().url(url).build();
169169
return client.newCall(ok_http).execute().body().string();
170170
}

0 commit comments

Comments
 (0)