¡¾·ì϶¹«¸æ¡¿Spring FrameworkÔ¶³Ì´úÂëÖ´Ðзì϶(CVE-2022-22965)
°ä²¼¹¦·ò 2022-03-310x00 ·ì϶¸ÅÊö
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ÎļþµÄºó׺Åú¸Ä³É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 ¸½Â¼
OG¶«·½Ìü¼ò½é
OG¶«·½Ìü¹«Ë¾³ÉÁ¢ÓÚ1996Ä꣬£¬£¬²¢ÓÚ2010Äê6ÔÂ23ÈÕÔÚÉî½»ËùÖÐС°åÕýʽ¹ÒÅÆÉÏÊУ¬£¬£¬ÊǹúÄÚ¼«¾ßʵÁ¦µÄ¡¢¡¢Õ¼ÓÐÆëÈ«×ÔÖ÷֪ʶ²úȨµÄÍøÂ簲ȫ²úÆ·¡¢¡¢¿ÉÐŰ²È«ÖÎÀíÆ½Ì¨¡¢¡¢°²È«·þÎñÓë½â¾ö¹æ»®µÄ×ÛºÏÌṩÉÌ¡£¡£¡£
¹«Ë¾×ܲ¿Î»ÓÚ±±¾©ÊÐÖйشåÈí¼þÔ°£¬£¬£¬ÔÚÈ«¹ú¸÷Ê¡¡¢¡¢ÊС¢¡¢×ÔÖÎÇøÉèÓзÖÖ§»ú¹¹£¬£¬£¬Õ¼Óи²¸ÇÈ«¹úµÄÇþµÀϵͳºÍ¼¼ÊõÖ§³ÖÖÐÐÄ£¬£¬£¬²¢ÔÚ±±¾©¡¢¡¢ÉϺ£¡£¡¢¡¢³É¶¼¡¢¡¢ÕÑͨ¡¢¡¢³¤É³¡¢¡¢¾£ÃÅµÈ¶àµØÉèÓÐÑз¢ÖÐÐÄ¡£¡£¡£
¶àÄêÀ´£¬£¬£¬OG¶«·½ÌüÖÂÁ¦ÓÚÌṩӵÓйú¼Ê¾ºÕùÁ¦µÄ×ÔÖ÷´´Ðµİ²È«²úÆ·ºÍ×î¼Ñʵ¼Ê·þÎñ£¬£¬£¬Ô®ÊÖ¿Í»§È«ÃæÌáÉýÆäIT»ù´¡ÉèÊ©µÄ°²È«ÐԺͳö²úЧÁ¦£¬£¬£¬Îª´òÔìºÍÌáÉý¹ú¼Ê»¯µÄÃñ×åÐÅÏ¢°²È«²úÒµÁì¾üÆ·ÅÆ¶ø²»Ð¸ÖÂÁ¦¡£¡£¡£
¹ØÓÚOG¶«·½Ìü
OG¶«·½Ìü°²È«Ó¦¼±ÏìÓ¦ÖÐÐÄÖØÒªÕë¶ÔÖØÒª°²È«·ì϶µÄÔ¤¾¯¡¢¡¢¸ú×ٺͷÖÏíÈ«Çò×îеÄÍþвµý±¨ºÍ°²È«»ã±¨¡£¡£¡£
¹Ø×¢ÒÔϹ«¼ÒºÅ£¬£¬£¬»ñȡȫÇò×îа²È«×ÊѶ£º



¾©¹«Íø°²±¸11010802024551ºÅ