Struts2 s2-052 REST²å¼þÔ¶³Ì´úÂëÖ´ÐÐ ÊÖÒÕÆÊÎöÓë·À»¤¼Æ»®
2017-09-07
×ÛÊö
2017Äê9ÔÂ5ÈÕ£¬Apache StrutsÐû²¼×îеÄÇ徲ͨ¸æ£¬Apache Struts 2.5.xÒÔ¼°Ö®Ç°µÄ²¿·Ö2.x°æ±¾µÄREST²å¼þ±£´æÔ¶³Ì´úÂëÖ´ÐеĸßΣÎó²î£¬Îó²î±àºÅΪCVE-2017-9805£¨S2-052£©¡£Îó²îµÄ³ÉÒòÊÇÓÉÓÚʹÓÃXStreamHandler·´ÐòÁл¯XStreamʵÀýµÄʱ¼äûÓÐÈκÎÀàÐ͹ýÂ˵¼ÖÂÔ¶³Ì´úÂëÖ´ÐС£
Ïà¹ØµØµã£º
https://struts.apache.org/docs/s2-052.html
https://cwiki.apache.org/confluence/display/WW/S2-052
ÊÜÓ°ÏìµÄ°æ±¾
· Struts 2.1.2 – Struts 2.3.33
· Struts 2.5 - Struts 2.5.12
²»ÊÜÓ°ÏìµÄ°æ±¾
· Struts 2.3.34
· Struts 2.5.13
Îó²îÆÊÎö
ƾ֤¹Ù·½µÄÐÎòÐÅÏ¢À´¿´£¬ÊÇREST²å¼þʹÓõ½XStreamHandler´¦Öóͷ£xmlÊý¾ÝµÄʱ¼ä£¬ÓÉÓÚδ¶ÔxmlÊý¾Ý×öÈκιýÂË£¬ÔÚ¾ÙÐз´ÐòÁн«xmlÊý¾Ýת»»³ÉObjectʱµ¼ÖµÄRCE¡£
ÇéÐδ
´Ó¹Ù·½µØµã£¨https://archive.apache.org/dist/struts/2.5/struts-2.5-all.zip£©ÏÂÔØËùÓÐÔ´Âë°ü£¬ÕÒµ½ÆäÖеÄstruts2-rest-showcase.warÖ±½Ó°²Åŵ½tomcat¾ÍÐУ¬ËäÈ»ÎÒ¸üϲ»¶ÊÖ¶¯±àÒ룬ֱ½Óͨ¹ýMaven±àÒë¼´¿É¡£ÏêϸµÄ°²ÅÅÀú³ÌÕâÀï¾Í²»ÏêϸÐÎò£¬²»¹ýÓеãÊÇÐèÒª×¢ÖØµÄ£¬ÓÉÓÚjavax.imageioµÄÒÀÀµ¹ØÏµ£¬ÎÒÃǵÄÇéÐεÄjdk°æ±¾ÐèÒªÊÇjdk8ÒÔÉÏ£¬jdk8ijЩµÍ°æ±¾Ò²ÊDz»¿ÉµÄ£¬±¾ÎÄ×÷Õߵİ汾ÊÇjdk8_102£¬ºóÐøµÄһЩÑéÖ¤¶¼ÊÇÔÚÕâ¸ö°æ±¾ÉÏ×öµÄ
²¹¶¡ÆÊÎö
ÇéÐδºÃÁËÖ®ºó£¬Ê×ÏÈÎÒÃÇÀ´¿´ÏÂrest²å¼þµÄÏà¹ØÉèÖÃ

´ÓÕâ¸öÎļþÖоͿÉÒÔ¿´³öXStreamHanler¾ÍÊÇContent-Type:xmlµÄĬÈÏ´¦Öóͷ£¾ä±ú£¬²¢ÇÒ¿ÉÒÔ¿´³öxmlÊÇĬÈÏÖ§³ÖÃûÌã¬ÕâÒ²¾ÍÊÇ˵±£´ærest²å¼þ¾Í»á±£´æXStreamµÄ·´ÐòÁл¯Îó²î¡£
½Ó×Å¿´¿´¹Ù·½µÄÐÞ¸´¼Æ»®£¬²¹¶¡µØµã£ºhttps://github.com/apache/struts/commit/19494718865f2fb7da5ea363de3822f87fbda264
ÔÚ¹Ù·½µÄÐÞ¸´¼Æ»®ÖÐÖ÷Òª¾ÍÊǽ«xmlÖеÄÊý¾Ý°×Ãûµ¥»¯£¬°ÑCollectionºÍMap£¬Ò»Ð©»ù´¡À࣬ʱ¼äÀà·ÅÔÚ°×Ãûµ¥ÖУ¬ÕâÑù¾ÍÄÜ×èÖ¹XStream·´ÐòÁл¯µÄÀú³ÌÖдøÈëһЩÓк¦Àà¡£

POCµÄÌìÉú
ÏÖÔÚ¹ûÕæµÄPocÊÇ»ùÓÚjavax.imageioµÄ£¬ÕâÊÇÄÜÖ±½ÓÍâµØÖ´ÐÐÏÂÁ¿ÉÊÇmarshelsecÌṩÁË11¸öXStream·´ÐòÁл¯¿â£¬ÆäÖд󲿷ֶ¼ÊÇ»ùÓÚJNDI£¬Ïêϸ°üÀ¨£ºCommonsConfiguration Rome CommonsBeanutils ServiceLoader ImageIO
BindingEnumeration LazySearchEnumeration SpringAbstractBeanFactoryPointcutAdvisor SpringPartiallyComparableAdvisorHolder Resin XBean£¬
´ÓÍⲿÇëÇóÀàÍê³É·´ÐòÁл¯¡£
Îó²îÑéÖ¤¼°¼òÆÓÆÊÎö
ÏÂͼÊÇÒ»¸ö¼òÆÓµÄÑéÖ¤ÆÊÎöͼ£¬´ÓPocÖпÉÒÔ¿´³ö£¬ÇëÇóÊÇPUT£¬ÇëÇóµÄurlºó׺´øxml£¬ÇëÇóµÄContent-TypeΪdelicious/bookmark+xml£¬ÇëÇóµÄxmlµÄǰ׺ÊÇ

½Ó×ÅÎÒÃÇ¿´Ï´¥·¢µÄÖ´ÐÐŲÓÃÕ»£º

ÔÚXStreamHanler.toObjectŲÓÃÁËXStreamµÄfromXml£¬´Ó¶ø½øÈë·´ÐòÁл¯Á÷³Ì¡£
¹Ù·½ÔÝʱ»º½â²½·¥²»Æð×÷ÓÃ
¹Ù·½¸ø³öµÄ»º½â²½·¥
½«ÏÂͼºì¿ò²¿·ÖÐÞ¸ÄΪ£º

ÏêϸÐÞ¸ÄÒªÁìΪ£º
ʹÓÃѹËõ¹¤¾ß·¿ª¶ÔÓ¦µÄjar°ü£¬ÕâÀïÒÔstruts2-rest-plugin-2.5.10.1.jarΪÀý£º

½«struts-plugin.xml¾ÙÐÐÌáÈ¡£¬Ð޸ĶÔÓ¦µÄÉèÖã¬ÖØÐ·ÅÈëѹËõ°üÖУ¬Ìæ»»ÔÓÐÉèÖãº

ÖØÆô·þÎñÆ÷¼´¿É¡£
×èÖ¹xmlÆÊÎöºó£¬Ôٴλá¼ûxmlÇëÇóʱ£¬Ó¦ÓþͻáÏÔʾ404¹ýʧ£¬²»ÔÙÖ§³ÖxmlÃûÌÃÊý¾ÝµÄÆÊÎö¡£

ÏÂÃæ¸ø³ö²âÊÔÓÃÀý£¬´ÓÎÒÃǵÄpocÖÐÒ²¿ÉÒÔ¿´³ö£¬POSTÇëÇó²»´øxmlµÄºó׺ֱ½ÓºöÊÓÕâ¸ö»º½â²½·¥¡£XStreamÖ»¸úContent-TypeÓйأ¬ÈôÊÇContent-TypeÖк¬ÓÐxml£¬Ôò»á½»¸øXStream´¦Öóͷ££¬ÒÔÊÇpoc¸ÃÔõôʹ»¹Ôõôʹ£¬ÏÂÃæ¿´ÏÂÎÒÃǵÄÑéÖ¤£º

´ÓͼÉÏ¿ÉÒÔ¿´³ö£¬ÎÒÃÇÒѾȥ³ýÁËxmlµÄÖ§³Ö£¬ÏÂÃæÀ´¿´¿´PayloadµÄÖ´ÐÐЧ¹û£º

Àֳɵ¯³öÅÌËãÆ÷£¬ÕâÒ²¾ÍÑéÖ¤ÁËÎÒÃǵÄÏë·¨¡£Í¬Ê±Í¨¹ýÁ½¸ö²î±ðpocµÄ½ÏÁ¿£¬ÎÒÃÇÒ²ÄÜ·¢Ã÷һЩüĿ£¬Content-TypeÖ§³ÖxmlµÄ¼¸ÖÖÃûÌã¬POSTÇëÇó£¬PUTÇëÇó£¬GETÇëÇóÉõÖÁÊÇ×Ô½ç˵ÇëÇó¶¼ÊÇÄÜ´¥·¢Îó²î£¬ÎÒÃÇ¿ÉÒÔ½«pocÖÐ
ÊÖÒÕ·À»¤¼Æ»®
¹Ù·½ÐÞ¸´¼Æ»®
Struts¹Ù·½ÒѾÐû²¼ÁË×îа汾£¬ÇëÊÜÓ°ÏìµÄÊÜÓþ¡¿ìÉý¼¶À´¾ÙÐзÀ»¤¡£
²Î¿¼Á´½Ó£º
· Struts 2.3.34:
https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.3.34
· Struts 2.5.13:
https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.13
AG¹«Ë¾¿Æ¼¼·À»¤½¨Òé
AG¹«Ë¾¿Æ¼¼¼ì²âÀà²úÆ·Óë·þÎñ
1¡¢ ¹«Íø×ʲú¿ÉʹÓÃAG¹«Ë¾ÔÆ ½ôÆÈÎó²îÔÚÏß¼ì²â£¬¼ì²âµØµãÈçÏ£º
https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?page_id=12
2¡¢ÄÚÍø×ʲú¿ÉÒÔʹÓÃAG¹«Ë¾¿Æ¼¼µÄÔ¶³ÌÇå¾²ÆÀ¹Àϵͳ(RSAS V6)»ò WebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£©£¬ÒÔ¼°ÈëÇÖ¼ì²âϵͳ(IDS) ¾ÙÐмì²â¡£
Ô¶³ÌÇå¾²ÆÀ¹Àϵͳ£¨RSAS V6£©
http://update.nsfocus.com/update/listRsasDetail/v/vulweb
WebÓ¦ÓÃÎó²îɨÃèϵͳ£¨WVSS£©
http://update.nsfocus.com/update/listWvss
ÈëÇÖ¼ì²âϵͳ£¨IDS£©
http://update.nsfocus.com/update/listIds
ͨ¹ýÉÏÊöÁ´½Ó£¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐмì²â
ʹÓÃAG¹«Ë¾¿Æ¼¼·À»¤Àà²úÆ·£¨IPS/IDS/NF/WAF£©¾ÙÐзÀ»¤£º
ÈëÇÖ·À»¤ÏµÍ³£¨IPS£©
http://update.nsfocus.com/update/listIps
ÏÂÒ»´ú·À»ðǽϵͳ£¨NF£©
http://update.nsfocus.com/update/listNf
WebÓ¦Ó÷À»¤ÏµÍ³£¨WAF£©
http://update.nsfocus.com/update/wafIndex
ͨ¹ýÉÏÊöÁ´½Ó£¬Éý¼¶ÖÁ×îа汾¼´¿É¾ÙÐзÀ»¤£¡
ÔÝʱ½â¾ö¼Æ»®
Ìí¼Óxml¹ýÂËÆ÷£¬½«ËùÓеÄcontentTypeΪ“application/xml”µÄÇëÇ´Ô𲿹ýÂË¡£¸Ã¼Æ»®»áµ¼ÖÂËùÓÐcontentTypeΪapplication/xmlµÄÇëÇóʧЧ£¬ÎªÔÝʱÐԵķÀ»¤¼Æ»®¡£
Ïêϸ¹ýÂËÆ÷´úÂëÈçÏ£º
|
public void doFilter(ServletRequest request ServletResponse response FilterChain chain) throws IOException ServletException { if (request.getContentType() != null) { String contentType = request.getContentType().toLowerCase(Locale.ENGLISH); if (contentType != null && contentType.contains("application/xml")) { response.getWriter().write("Reject!"); } else { chain.doFilter(request response); } } else { chain.doFilter(request response); } } |
Ìí¼Ó¸Ã¹ýÂËÆ÷ºó£¬Ê¹ÓÃPOC²âÊÔ£¬¿ÉÒÔ×èµ²£º

ÐèÒª×¢ÖØµÄÊÇ£¬Ð°汾ʹÓõÄĬÈÏÏÞÖÆÕ½ÂԻᵼÖÂRESTµÄһЩº¯Êý×èÖ¹ÊÂÇ飬»á¶ÔһЩӪҵÔì³ÉÓ°Ï죬½¨ÒéʹÓÃÒÔÏÂеĽӿڣº
org.apache.struts2.rest.handler.AllowedClasses
org.apache.struts2.rest.handler.AllowedClassNames
org.apache.struts2.rest.handler.XStreamPermissionProvider
Éù Ã÷
±¾Ç徲ͨ¸æ½öÓÃÀ´ÐÎò¿ÉÄܱ£´æµÄÇå¾²ÎÊÌ⣬AG¹«Ë¾¿Æ¼¼²»Îª´ËÇ徲ͨ¸æÌṩÈκΰü¹Ü»òÔÊÐí¡£ÓÉÓÚÈö²¥¡¢Ê¹ÓôËÇ徲ͨ¸æËùÌṩµÄÐÅÏ¢¶øÔì³ÉµÄÈκÎÖ±½Ó»òÕß¼ä½ÓµÄЧ¹û¼°Ëðʧ£¬¾ùÓÉʹÓÃÕß×Ô¼ºÈÏÕæ£¬AG¹«Ë¾¿Æ¼¼ÒÔ¼°Ç徲ͨ¸æ×÷Õß²»Îª´Ë¼ç¸ºÈκÎÔðÈΡ£AG¹«Ë¾¿Æ¼¼ÓµÓжԴËÇ徲ͨ¸æµÄÐÞ¸ÄÏ¢ÕùÊÍȨ¡£ÈçÓû×ªÔØ»òÈö²¥´ËÇ徲ͨ¸æ£¬±ØÐè°ü¹Ü´ËÇ徲ͨ¸æµÄÍêÕûÐÔ£¬°üÀ¨°æÈ¨ÉùÃ÷µÈËùÓÐÄÚÈÝ¡£Î´¾AG¹«Ë¾¿Æ¼¼ÔÊÐí£¬²»µÃí§ÒâÐ޸ĻòÕßÔö¼õ´ËÇ徲ͨ¸æÄÚÈÝ£¬²»µÃÒÔÈκη½·¨½«ÆäÓÃÓÚÉÌҵĿµÄ¡£

AG¹«Ë¾ÔÆ





