¡¾Â©¶´Í¨¸æ¡¿Spring FrameworkÔ¶³Ì´úÂëÖ´ÐЩ¶´(CVE-2022-22965)

Ðû²¼Ê±¼ä 2022-03-31

0x00 ©¶´¸ÅÊö

CVE   ID

CVE-2022-22965

ʱ    ¼ä

2022-03-31

Àà    ÐÍ

RCE

µÈ    ¼¶

ÑÏÖØ

Ô¶³ÌÀûÓÃ

ÊÇ

Ó°Ï췶Χ


¹¥»÷ÅÓ´ó¶È

µÍ

Óû§½»»¥

ÎÞ

PoC/EXP

ÒѹûÈ»

ÔÚÒ°ÀûÓÃ


 

0x01 ©¶´ÏêÇé

Spring Framework ÊÇÒ»¸ö¿ªÔ´µÄÇáÁ¿¼¶J2EEÓ¦Ó÷¨Ê½¿ª·¢¿ò¼Ü ¡£

3ÔÂ31ÈÕ£¬VMwareÐû²¼Äþ¾²Í¨¸æ£¬ÐÞ¸´ÁËSpring FrameworkÖеÄÔ¶³Ì´úÂëÖ´ÐЩ¶´£¨CVE-2022-22965£© ¡£ÔÚ JDK 9 ¼°ÒÔÉϰ汾»·¾³Ï£¬¿ÉÒÔÀûÓôË©¶´ÔÚδÊÚȨµÄÇé¿öÏÂÔÚÄ¿±êϵͳÉÏдÈë¶ñÒⷨʽ´Ó¶øÔ¶³ÌÖ´ÐÐÈÎÒâ´úÂë ¡£

¸Ã©¶´Ó°ÏìÁËÔÚJDK 9+ÉÏÔËÐеÄSpring¿ò¼Ü»òÆäÑÜÉú¿ò¼Ü¹¹½¨µÄÍøÕ¾»òÓ¦Óã¬Ä¿Ç°¹Ù·½ÒÑÔÚSpring Framework 5.3.18+ºÍ5.2.20+ÖÐÐÞ¸´ÁË´Ë©¶´ ¡£¼øÓÚ´Ë©¶´µÄPoC/EXPÒѹûÈ»£¬½¨ÒéÏà¹ØÓû§¾¡¿ìÅŲéÐÞ¸´ ¡£

 

Ó°Ï췶Χ

ÔËÐл·¾³ÎªJDK9¼°ÒÔÉϰ汾µÄ£º

Spring Framework 5.3.0 -5.3.17

Spring Framework 5.2.0 - 5.2.19

ÒÔ¼°ÆäËü¾É°æµÄ¡¢²»ÊÜÖ§³ÖµÄ°æ±¾ ¡£


0x02 Äþ¾²½¨Òé

ͨÓÃÐÞ¸´

Ŀǰ¹Ù·½ÒѾ­ÐÞ¸´ÁË´Ë©¶´£¬ÊÜÓ°ÏìÓû§¿ÉÒÔÉý¼¶¸üе½Spring Framework 5.3.18»ò5.2.20 ¡£

ÏÂÔØÁ´½Ó£º

https://github.com/spring-projects/spring-framework/tags

 

©¶´ÅŲé

µ±Í¬Ê±Âú×ãÒÔÏÂÌõ¼þʱ£¬±íÃ÷¿ÉÄÜÊÜ´Ë©¶´Ó°Ï죺

l  JDK°æ±¾ >= 9 £»

l  ʹÓÃSpring¿ò¼Ü»òÑÜÉú¿ò¼Ü£¬µ±Ç°Ê¹ÓÃÁËTomcatÖмä¼þ£¨Ä¿Ç°¹ûÈ»µÄ©¶´ÀûÓôúÂëÖ»Õë¶ÔTomcatÖмä¼þ£¬µ«²»Åųý´æÔÚÆäËü·çÏÕ£© ¡£

 

ÅŲéÒªÁì

l  JDK°æ±¾ºÅÅŲé

Ö´ÐС°java -version"ÃüÁî¼ì²ìJDK°æ±¾£¬Èç¹û°æ±¾ºÅСÓÚ¼´ÊÇ8£¬Ôò²»ÊÜ´Ë©¶´Ó°Ïì ¡£

l  Spring¿ò¼ÜʹÓÃÇé¿öÅÅ–Ë

1.Èç¹ûÒµÎñϵͳÏîÄ¿ÒÔwar°üÐÎʽ²¿Êð£¬Æ¾¾ÝÈçϵIJ½Öè½øÐÐÅжϣº

½âѹwar°ü£º½«warÎļþµÄºó¼¶ÐÞ¸Ä³É .zipÎļþ £»

ÔÚ½âѹËõĿ¼ÏÂËÑË÷ÊÇ·ñ´æÔÚspring-beans-*.jar¸ñʽµÄÎļþ£¨ÀýÈçspring-beans-5.3.16.jar£©£¬Èç´æÔÚÔò˵Ã÷ÒµÎñϵͳʹÓÃÁË Spring¿ò¼Ü½øÐпª·¢ £»

Èç¹ûspring-beans-*.jarÎļþ²»´æÔÚ£¬ÔòÔÚ½âѹËõĿ¼ÏÂËÑË÷CachedlntrospectionResults.classÎļþÊÇ·ñ´æÔÚ£¬Èç´æÔÚÔò˵Ã÷ÒµÎñϵͳʹÓÃÁË Spring¿ò¼Ü½øÐпª·¢ ¡£

2. Èç¹ûÒµÎñϵͳÏîÄ¿ÒÔjar°üÐÎʽ¶ÀÁ¢ÔËÐУ¬Æ¾¾ÝÈçϵIJ½Öè½øÐÐÅжϣº

½âѹjar°ü£º½«jarÎļþµÄºó׺Ð޸ijÉzip£¬½âѹzip Îļþ £»

ÔÚ½âѹËõĿ¼ÏÂËÑË÷ÊÇ·ñ´æÔÚspring-beans-*.jar¸ñʽµÄjarÎļþ£¨ÀýÈçspring-beans-5.3.16.jar£©£¬Èç´æÔÚÔò˵Ã÷ÒµÎñϵͳʹÓÃÁË Spring¿ò¼Ü½øÐпª·¢ £»

Èç¹ûspring-beans-*.jarÎļþ²»´æÔÚ£¬ÔòÔÚ½âѹËõĿ¼ÏÂËÑË÷CachedIntrospectionResults.classÎļþÊÇ·ñ´æÔÚ£¬Èç¹û´æÔÚÔò˵Ã÷ÒµÎñϵͳʹÓÃÁË Spring¿ò¼Ü½øÐпª·¢ ¡£

 

ÁÙʱ´ëÊ©

Ðèͬʱ°´ÒÔÏÂÁ½¸ö²½Öè½øÐЩ¶´µÄÁÙʱÐÞ¸´:

1¡¢ÔÚÓ¦ÓÃÖÐÈ«¾ÖËÑË÷@InitBinder×¢½â£¬¿´¿´ÒªÁìÌåÄÚÊÇ·ñµ÷ÓÃdataBinder.setDisallowedFieldsÒªÁ죬Èç¹û·¢ÏÖ´Ë´úÂëÆ¬¶ÎµÄÒýÈë,ÔòÔÚÔ­À´µÄºÚÃûµ¥ÖУ¬Ìí¼Ó{"class.*","Class.*","*.class.*","*.Class.*"} ¡£×¢:Èç¹û´Ë´úÂëÆ¬¶ÎʹÓý϶࣬ÐèҪÿ¸öµØ·½¶¼×·¼Ó ¡£

2¡¢ÔÚÓÃϵͳµÄÏîÄ¿°üÏÂн¨ÒÔÏÂÈ«¾ÖÀ࣬²¢±£Ö¤Õâ¸öÀà±»Spring ¼ÓÔØµ½(ÍÆ¼öÔÚControllerËùÔڵİüÖÐÌí¼Ó) ¡£Íê³ÉÀàÌí¼Óºó£¬Ðè¶ÔÏîÄ¿½øÐÐÖØÐ±àÒë´ò°üºÍ¹¦Ð§ÑéÖ¤²âÊÔ£¬²¢ÖØÐÂÐû²¼ÏîÄ¿ ¡£

import org.springframework.core.annotation.Order;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.InitBinder;

@ControllerAdvice

@Order(10000)

public class GlobalControllerAdvicc{

@InitBinder

public void setAllowedFields(webdataBinder dataBinder){

String[]abd=new string[]{"class.*","Class.*","*.class.*","*.Class.*"};            dataBinder.setDisallowedFields(abd);

}

}

 

0x03 ²Î¿¼Á´½Ó

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

https://tanzu.vmware.com/security/cve-2022-22965

https://github.com/spring-projects/spring-framework/

 

0x04 °æ±¾ÐÅÏ¢

°æ±¾

ÈÕÆÚ

ÐÞ¸ÄÄÚÈÝ

V1.0

2022-03-31

Ê×´ÎÐû²¼

 

0x05 ¸½Â¼

¶«É­Æ½Ì¨¼ò½é

¶«É­Æ½Ì¨¹«Ë¾½¨Á¢ÓÚ1996Ä꣬²¢ÓÚ2010Äê6ÔÂ23ÈÕÔÚÉî½»ËùÖÐС°åÕýʽ¹ÒÅÆÉÏÊУ¬ÊǹúÄÚ¼«¾ßʵÁ¦µÄ¡¢ÓµÓÐÍêÈ«×ÔÖ÷֪ʶ²úȨµÄÍøÂçÄþ¾²²úÎï¡¢¿ÉÐÅÄþ¾²¹ÜÀíÆ½Ì¨¡¢Äþ¾²·þÎñÓë½â¾ö·½°¸µÄ×ÛºÏÌṩÉÌ ¡£

¹«Ë¾×ܲ¿Î»ÓÚ±±¾©ÊÐÖйشåÈí¼þÔ°£¬ÔÚÈ«¹ú¸÷Ê¡¡¢ÊС¢×ÔÖÎÇøÉèÓзÖÖ§»ú¹¹£¬ÓµÓÐÁýÕÖÈ«¹úµÄÇþµÀÌåϵºÍ¼¼ÊõÖ§³ÖÖÐÐÄ£¬²¢ÔÚ±±¾©¡¢ÉϺ£¡¢³É¶¼¡¢¹ãÖÝ¡¢³¤É³¡¢º¼ÖÝµÈ¶àµØÉèÓÐÑз¢ÖÐÐÄ ¡£

¶àÄêÀ´£¬¶«É­Æ½Ì¨ÖÂÁ¦ÓÚÌṩ¾ßÓйú¼Ê¾ºÕùÁ¦µÄ×ÔÖ÷´´ÐµÄÄþ¾²²úÎïºÍ×î¼Ñʵ¼ù·þÎñ£¬×ÊÖú¿Í»§È«ÃæÌáÉýÆäIT»ù´¡ÉèÊ©µÄÄþ¾²ÐÔºÍÉú²úЧÄÜ£¬Îª´òÔìºÍÌáÉý¹ú¼Ê»¯µÄÃñ×åÐÅÏ¢Äþ¾²¹¤ÒµÁì¾üÆ·ÅÆ¶ø²»Ð¸Å¬Á¦ ¡£


¹ØÓÚ¶«É­Æ½Ì¨

¶«É­Æ½Ì¨Äþ¾²Ó¦¼±ÏìÓ¦ÖÐÐÄÖ÷ÒªÕë¶ÔÖØÒªÄþ¾²Â©¶´µÄÔ¤¾¯¡¢¸ú×ٺͷÖÏíÈ«Çò×îеÄÍþвÇ鱨ºÍÄþ¾²³ÂËß ¡£

¹Ø×¢ÒÔϹ«Öںţ¬»ñȡȫÇò×îÐÂÄþ¾²×ÊѶ£º

image.png