CWE-384: Session Fixation 會話固定漏洞有哪些修補方法?

zktq2021發表於2021-08-06

本期主題為會話固定(CWE-384: Session Fixation)漏洞的相關介紹。

一、什麼是會話固定?

對使用者進行身份鑑別並建立一個新的會話時沒有讓原來的會話失敗。

二、會話固定漏洞的構成條件有哪些?

當使用者成功驗證而應用程式不更新cookie時,這個時候就存在會話固定漏洞。

HTTP的無狀態性,導致Web應用程式必須使用會話機制來識別使用者。如果使用者未登入時的會話ID和登入後的會話ID保持一致,那麼攻擊者可以迫使受害者使用一個已知(有效)的會話ID,當受害者透過身份驗證,攻擊者就可以利用這個會話ID進入驗證後的會話(登入狀態)。

三、會話固定漏洞會造成哪些後果?

攻擊者可誘使使用者在攻擊者建立的會話基礎上進行身份鑑別,從而竊取使用者透過身份鑑別的會話並冒充使用者進行惡意操作。

四、會話固定漏洞的防範和修補方法有哪些?

對使用者進行身份鑑別並建立一個新的會話時讓原來的會話失效。核心程式碼如下。

// 會話失效

session.invalidate();

// 會話重建

session=request.getSession(true);

五、會話固定漏洞樣例:

protected WebSession updateSession_DELETEME(HttpServletRequest request,HttpServletResponse response, ServletContext context)

{

HttpSession hs;

hs = request.getSession(true);

//System.out.println( "Entering Session_id: " + hs.getId() );

// dumpSession( hs );

// Make a temporary session to avoid the concurreny issue

// in WebSession

WebSession session = new WebSession(this, context);

WebSession realSession = null;

Object o = hs.getAttribute(WebSession.SESSION);

if ((o != null) && o instanceof WebSession)

{

realSession = (WebSession) o;

}

session.setCurrentScreen(realSession.getCurrentScreen());

session.setCourse(realSession.getCourse());

session.setRequest(request);

// to authenticate

//System.out.println( "Leaving Session_id: " + hs.getId() );

//dumpSession( hs ); return (session);

}

……

使用Wukong靜態程式碼安全檢測上述程式程式碼,則可以發現程式碼中存在著“會話固定”的安全漏洞。請見下圖:

“會話固定”在CWE中被編號為:CWE-384:Session Fixation


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2785659/,如需轉載,請註明出處,否則將追究法律責任。

相關文章