Jetty是一款流行的Java Web服務器。 Jetty中捆綁有HTTP服務器、HTTP客戶端和javax.servlet容器, 其中HTTP服務器的URI處理器沒有正確的解釋規範的路徑,遠程攻擊者能夠經過目錄遍歷攻擊訪問web應用或文檔樹之外的文件。成功利用這個漏洞要求使 用了支持別名的DefaultServlet,或使用ResourceHandler類提供靜態內容。對於UNIX系統,僅在webapp或 docroot中存在以「?」字符結尾的目錄名時才受這個漏洞影響。 Jetty在顯示Web目錄列表時沒有正確地過濾URL輸入便返回給了用戶,遠程攻擊者能夠在HTTP響應中目錄列表路徑前附加「;」字符執行跨站腳本攻擊,在用戶瀏覽器會話中注入並執行任意HTML和腳本代碼。 <*來源:Greg Wilkins 連接:http://secunia.com/advisories/34975/ http://www.kb.cert.org/vuls/id/402580 http://jira.codehaus.org/si/jira.issueviews:issue-html/JETTY-1004/JETTY-1004.html http://jira.codehaus.org/si/jira.issueviews:issue-html/JETTY-980/JETTY-980.html *> 測試方法: -------------------------------------------------------------------------------- 警 告 如下程序(方法)可能帶有攻擊性,僅供安全研究與教學之用。使用者風險自負! $ echo -e "GET /cometd/dijit/;<script>alert(document.title);</script> HTTP/1.0\n\n" | nc 127.0.0.1 8080 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 5097 Server: Jetty(7.0.0.pre5) 建議: -------------------------------------------------------------------------------- 臨時解決方法: * 若是沒有使用ResourceHandler,確認jetty例程默認的servlet別名initParam設置爲false,還要確認沒有設置org.mortbay.util.FileResource.checkAliases系統屬性或設置爲true。 * 若是在使用ResourceHandler,對所使用的Jetty編譯如下源碼,並使用這個類而不是ResourceHandler: package org.mortbay.jetty.cert; import java.net.MalformedURLException; import org.mortbay.jetty.handler.ResourceHandler; import org.mortbay.resource.Resource; import org.mortbay.util.StringUtil; import org.mortbay.util.URIUtil; public class TempFixResourceHandler extends ResourceHandler { public Resource getResource(String path) throws MalformedURLException { if (path!=null && path.indexOf('?')>=0) { path=URIUtil.decodePath(URIUtil.canonicalPath(StringUtil.replace(path,"?","%3F"))); if (path==null) return null; } return super.getResource(path); } } 廠商補丁: Jetty ----- 目前廠商已經發布了升級補丁以修復這個安全問題,請到廠商的主頁下載: http://jira.codehaus.org/secure/attachment/41486/JETTY-980.patch