Apache Struts2 Ô¶³Ì´úÂëÖ´ÐÐÎó²î£¨S2-057£© ÊÖÒÕÆÊÎöÓë·À»¤¼Æ»®
2018-08-24
×ÛÊö
±±¾©Ê±¼ä2018Äê8ÔÂ22ÈÕ£¬Apache¹Ù·½Ðû²¼Í¨¸æÐû²¼ÁËStruts2ÖÐÒ»¸öÔ¶³Ì´úÂëÖ´ÐÐÎó²î£¨CVE-2018-11776£¬CNVD-2018-15894£¬CNNVD-201808-740£©¡£¸ÃÎó²îÔÚÁ½ÖÖÇéÐÎϱ£´æ£¬µÚÒ»£¬µ±xmlÉèÖÃÖÐδÉèÖÃnamespaceÖµ£¬ÇÒÉϲãÐж¯ÉèÖã¨action(s) configurations£©ÖÐδÉèÖûòʹÓÃͨÅä·ûnamespaceֵʱ£¬¿ÉÄܵ¼ÖÂÔ¶³Ì´úÂëÖ´ÐÐÎó²îµÄ±¬·¢¡£µÚ¶þ£¬Ê¹ÓÃδÉèÖÃvalueºÍactionÖµµÄurl±êÇ©£¬ÇÒÉϲãÐж¯ÉèÖÃÖÐδÉèÖûòʹÓÃͨÅä·ûnamespaceÖµ£¬Í¬Ñù¿ÉÄܵ¼ÖÂÔ¶³Ì´úÂëÖ´ÐС£
Ïà¹ØÁ´½ÓÈçÏ£ºhttps://cwiki.apache.org/confluence/display/WW/S2-057
ÊÜÓ°Ïì°æ±¾
l Struts 2.3 - 2.3.34
l Struts 2.5 - 2.5.16
²»ÊÜÓ°Ïì°æ±¾
l Struts 2.3.35
l Struts 2.5.17
ÊÖÒÕ·À»¤¼Æ»®
°æ±¾¼ì²â
ͨ¹ýÉèÖÃÎļþ¼ì²â
´ËÎó²î±¬·¢ÓڵͰ汾µÄStruts×é¼þ£¬µ±Ó¦ÓÃϵͳÒýÈëÏà¹Ø×é¼þʱ£¬½«±£´æ±»¹¥»÷ÕßÔ¶³Ì¹¥»÷µÄΣº¦¡£½¨ÒéÓÉÓ¦Óÿª·¢Ö°Ô±ÅŲéÒýÈë×é¼þµÄ°æ±¾ÊÇ·ñ´¦ÓÚÊÜÓ°Ïì¹æÄ£Ö®ÄÚ¡£
Éó²éMavenÉèÖÃÎļþpom.xmlÖйØÓÚ×é¼þµÄ°æ±¾¡£È磺
|
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency> |
ͨ¹ý×é¼þÃû¼ì²âÈôºì×ÖËùʾ°æ±¾ÔÚÊÜÓ°Ïì¹æÄ£ÄÚ£¬ÔòÇëÓû§¾¡¿ìÉý¼¶Struts2ÖÁ×îа汾£¬ÒÔ°ü¹Üºã¾ÃÓÐÓõķÀ»¤¡£
LinuxϵͳÏ¿ÉʹÓÃÒÔÏÂÏÂÁî²éÕÒÄ¿½ñʹÓõÄstruts2-core°ü£¬Í¨¹ýÉó²éÆäÎļþÃû£¬ÅжÏÄ¿½ñ°æ±¾¡£
|
find / -name struts2-core-*.jar |
Èôºì¿ò´¦°æ±¾ºÅÔÚÊÜÓ°Ïì¹æÄ£ÄÚ£¬ÔòÇëÓû§¾¡¿ìÉý¼¶ÖÁ×îа汾¡£
¹Ù·½ÐÞ¸´¼Æ»®
¹Ù·½ÒÑÔÚ×îа汾ÖÐÐÞ¸´ÁË´ËÎó²î£¬ÇëÓû§¾¡¿ì½«StrutsÉý¼¶ÖÁ¹Ù·½ÐÞ¸´°æ±¾£¬2.3.*µÄÓû§ÇëÉý¼¶ÖÁ2.3.35£»2.5.*µÄÓû§ÇëÉý¼¶ÖÁ2.5.17¡£ÏÂÔØÁ´½ÓÈçÏÂËùʾ£º
Struts2.3.35:
http://mirrors.hust.edu.cn/apache/struts/2.3.35/struts-2.3.35-all.zip
Struts2.5.17:
http://mirrors.hust.edu.cn/apache/struts/2.5.17/struts-2.5.17-all.zip
ÔÝʱ½â¾ö¼Æ»®
ÅŲéËùÓÐStruts 2µÄÉèÖÃÎļþ£¬Èçstruts.xml£¬ÎªÃ»Óнç˵namespaceÃüÃû¿Õ¼äµÄpackage½ÚµãÌí¼ÓÃüÃû¿Õ¼äÉèÖá£
|
<package name="user" namespace="/user" extends="struts-default"> <action name="login"> </action> </package> |
¾ÅÓÎÀÏ¸ç¿Æ¼¼·À»¤½¨Òé
¾ÅÓÎÀÏ¸ç¿Æ¼¼¼ì²âÀà²úÆ·Óë·þÎñ
1¡¢ ¹«Íø×ʲú¿ÉʹÓþÅÓÎÀϸçÔÆ ½ôÆÈÎó²îÔÚÏß¼ì²â£¬¼ì²âµØµãÈçÏ£º
ÊÖ»ú¶Ë»á¿´·¨Ö·£º
https://cloud.nsfocus.com/megi/holes/hole_struts2_2018_8_23.html
PC¶Ë»á¿´·¨Ö·£º
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1026
2¡¢ÄÚÍø×ʲú¿ÉÒÔʹÓþÅÓÎÀÏ¸ç¿Æ¼¼µÄÈëÇÖ¼ì²âϵͳ(IDS)£¬Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V5¡¢V6£©ºÍWebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£©¾ÙÐмì²â¡£
l ÈëÇÖ¼ì²âϵͳ£¨IDS£©
http://update.nsfocus.com/update/listIds
l Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V5£©
http://update.nsfocus.com/update/listAurora/v/5
l Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V6£©
http://update.nsfocus.com/update/listRsasDetail/v/vulweb
l WebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£©http://update.nsfocus.com/update/listWvssDetail/v/6/t/plg
ͨ¹ýÉÏÊöÁ´½Ó£¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐмì²â£¡
ʹÓþÅÓÎÀÏ¸ç¿Æ¼¼·À»¤Àà²úÆ·¾ÙÐзÀ»¤
l ÈëÇÖ·À»¤ÏµÍ³£¨IPS£©
http://update.nsfocus.com/update/listIps
l ÏÂÒ»´ú·À»ðǽϵͳ£¨NF£©
http://update.nsfocus.com/update/listNf
l WebÓ¦Ó÷À»¤ÏµÍ³£¨WAF£©
http://update.nsfocus.com/update/wafIndex
ͨ¹ýÉÏÊöÁ´½Ó£¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐзÀ»¤£¡
¼ì²â·À»¤²úÆ·Éý¼¶°ü/¹æÔò°æ±¾ºÅ
|
¼ì²â²úÆ· |
Éý¼¶°ü/¹æÔò°æ±¾ºÅ |
|
IDS |
5.6.7.732¡¢5.6.8.732¡¢5.6.9.18479¡¢5.6.10.18479 |
|
RSAS V5 web²å¼þ°ü |
V051758 |
|
RSAS V6 web²å¼þ°ü |
V6.0R02F00.1004 |
|
WVSS V6 web²å¼þ°ü |
V6.0R03F00.113 |
|
·À»¤²úÆ· |
Éý¼¶°ü/¹æÔò°æ±¾ºÅ |
|
IPS |
5.6.7.732¡¢5.6.8.732¡¢5.6.9.18479¡¢5.6.10.18479 |
|
NF |
5.6.7.732¡¢6.0.1.732 |
|
WAF |
v6.0.5.1.39591¡¢v6.0.7.0.39590¡¢v6.0.6.1.39589 |
ÏêϸÉèÖÃÏê¼û¸½Â¼
ÊÖÒÕÆÊÎö
²¹¶¡±ÈÕÕ
ÈçͼËùʾ£¬²¹¶¡Ö÷ÒªÌí¼ÓÁËcleanNamespaceNameÒªÁ죬¸ÃÒªÁìͨ¹ý°×Ãûµ¥µÄ·½·¨À´ÑéÖ¤namespaceÊÇ·ñÕýµ±£¬´Ó¹Ù·½ÐÎòºÍÎó²îÐÞ¸´·½·¨À´¿´£¬¸ÃÎó²îÓ¦¸ÃÊÇÒ»¸öOgnlµÄ±í´ïʽעÈëÎó²î¡£
¶¯Ì¬ÆÊÎö
Îó²îÐû²¼¼¸¸öСʱ֮ºó£¬Îó²î·¢Ã÷×÷ÕßÐû²¼ÁËÕû¸ö·¢Ã÷Àú³Ì£¬²¢ÇÒÏêϸÆÊÎöÁËÒ»ÖÖÎó²îÇéÐΣºhttps://lgtm.com/blog/apache_struts_CVE-2018-11776¡£Æ¾Ö¤¸Ã²©¿ÍµÄ˵·¨£¬ÀÈ¡struts2-showcaseÏîÄ¿×÷ΪʾÀý£¬ÐÞ¸Ästruts-actionchaining.xml£¬ÏêϸÈçÏ£º
|
1. <struts> 2. <package name="actionchaining" extends="struts-default" > 3. <action name="actionChain1" class="org.apache.struts2.showcase.actionchaining.ActionChain1"> 4. <result type="redirectAction"> 5. <param name = "actionName">register2</param> 6. </result> 7. </action> 8. </package> 9. </struts>
|
ÔÚÕâÖÖÇéÐÎÏ£¬ËùÓе½actionChain1.actionµÄÇëÇóµÄ·µ»ØÐ§¹û¶¼»áÖ¸Ïòregister2£¬²¢ÇÒÖ´ÐÐÁ´»áµ½ServletActionRedirectResult.executeÒªÁìÖУ¬ÏêϸÈçÏ£º
´ÓÉÏͼ¿ÉÒÔ¿´³ö£¬Í¨¹ýnamespace×ֶΣ¬ÎÛȾÁËtmpLocation×ֵ䣬²¢ÇÒÉèÖÃΪÁËÔ¤ÆÚµÄÖ´ÐеÄPoC£¬ÕâÒ²ÊDz¹¶¡ÖÐΪʲôҪ¾»»¯namespaceµÄÔµ¹ÊÔÓÉ£¬¼ÌÐø¸ú×ÙnamespaceµÄÈ¥ÏòÖ´ÐÐÁ´»áµ½ServletActionRedirectResultµÄ¸¸ÀàµÄ¸¸ÀàStrutsResultSupport.executeÒªÁìÖУ¬ÏêϸÈçÏÂͼ£º

ÕâÀïÓиöconditionParseÒªÁ죬Õâ¸ö·½·¨¾ÍÊÇʹÓÃOgnl±í´ïʽÀ´ÅÌËãÊý¾ÝÖµ£¬ÔÚϵͳÖÐÓõúÜÊǶ࣬²¢ÇÒÔÚһЩÀúÊ·Îó²îÖУ¬Ò²Ó¦¸ÃÓÉËüÀ´±³¹ø£¬ËäÈ»×î´óµÄ¹øÕÕ¾Éstruts¹Ù·½£¬Ã¿´ÎÎó²î³öÔÚÄľÍÐÞÔÚÄÄ£¬µä·¶µÄͷʹҽͷ£¬½ÅÍ´Ò½½Å¡£ÒªÁìʵÏÖÈçÏÂͼËùʾ£º

ÔÚÕâ¸öÒªÁìÖлáʹÓõ½TextParseUtil.translateVariablesÒªÁ죬¼ÌÐø¸ú×Ù£¬Å²ÓÃÕ»½øÈëOgnlTextParserÖеÄevaluateÒªÁìÊ×ÏÈ»áÅжϴ«ÈëµÄ±í´ïʽÊÇ·ñÕýµ±£¬ºÃ±ÈÊÇ·ñÄÜÕÒµ½${}»òÕß%{}¶Ô£¬½Ó×ÅŲÓÃevaluator.evaluateÇóÖµ£¬ÇóÖµÀú³ÌºÜÊÇÖØ´ó£¬×ܵÃÀ´Ëµ¾ÍÊÇÁ´Ê½Ö´ÐÐÀú³Ì£¬ÏêϸÈçÏÂŲÓÃÕ»£º

´ÓÉÏͼҲ¿ÉÒÔ¿´³ö×î¶¥²ã¾ÍÊÇͨ¹ý·´ÉäµÄ·½·¨À´Å²ÓÃProcessBuilderµÄ½á¹¹º¯Êý£¬ÖÐÐIJ¿·Ö¾ÍÊÇÁ´Ê½Ö´ÐÐÀú³ÌÖÐÇ£Éæµ½Ò»Ð©²Ù×÷¡£
ÎÒÃÇ¿ÉÒÔ¿´ÏÂÇóÖµÀú³ÌÖвÎÊýµÄһЩÇéÐΡ£À´Éó²éOgnlÇå¾²¼Ó¹ÌµÄһЩת±ä£¬ÏêϸÈçÏÂͼ£º
Ö÷ÒªÊǺÚÃûµ¥ÉÏÓÖÌí¼ÓÁËһЩÀ࣬»®·ÖÊÇ£º
class
ognl.DefaultMemberAccess
class com.opensymphony.xwork2.ognl.SecurityMemberAccess
class java.lang.ProcessBuilder
ÆÊÎö¾Í¿¢ÊÂÁË£¬ÅÌËãÆ÷ÕÕ¾ÉÒªµ¯µÄ£¬ÈçÏÂͼ£º
·À»¤¼Æ»®ÏÂÔØ
Apache Struts2 Ô¶³Ì´úÂëÖ´ÐÐÎó²î£¨S2-057£© ÊÖÒÕÆÊÎöÓë·À»¤¼Æ»®

¾ÅÓÎÀϸçÔÆ





