2014-07-01 11 views
2
나는 오픈 소스 애플리케이션 "Project-Open" 일하고 있어요

와 나는 다음과 같은 취약점을 가지고 스캔하는 동안 업데이트되지 않음 : 수정이 언급되지만보안 : 세션 식별자는 TCL

[Medium] Session Identifier Not Updated 
Issue: 13800882 
Severity: Medium 
URL: https://<server_name>/register/ 
Risk(s): It is possible to steal or manipulate customer session and cookies, which might be used to impersonate a legitimate user,allowing the hacker to view or alter user records, and to perform transactions as that user 
Fix: Do not accept externally created session identifiers 

을하지만 나를 위해 충분하지 않습니다 그것을 완전하게 이해하십시오. 제가 어떻게 이것을 제거해야하는지 안내해주십시오. 또한 질문을 이해하기 위해 더 자세한 내용이 필요한지 알려주십시오. 프로젝트 소스 코드가 tcl에 있습니다.

동일한 코드를 찾았지만 java에 있습니다.

public HttpSession changeSessionIdentifier(HttpServletRequest request) throws AuthenticationException { 

    // get the current session 
     HttpSession oldSession = request.getSession(); 

    // make a copy of the session content 
     Map<String,Object> temp = new ConcurrentHashMap<String,Object>(); 
     Enumeration e = oldSession.getAttributeNames(); 
     while (e != null && e.hasMoreElements()) { 
       String name = (String) e.nextElement(); 
       Object value = oldSession.getAttribute(name); 
       temp.put(name, value); 
     } 

    // kill the old session and create a new one 
     oldSession.invalidate(); 
     HttpSession newSession = request.getSession(); 
     User user = ESAPI.authenticator().getCurrentUser(); 
     user.addSession(newSession); 
     user.removeSession(oldSession); 

    // copy back the session content 
     for (Map.Entry<String, Object> stringObjectEntry : temp.entrySet()){ 
      newSession.setAttribute(stringObjectEntry.getKey(),  stringObjectEntry.getValue()); 
     } 
    return newSession; 

}

P.S. 나는 TCL에서 초보자입니다. 더 자세한 설명이 필요하면 알려 주시기 바랍니다.

+0

Tcl 서버 코드가 세션 ID를 데이터베이스 항목에 매핑하는 방법을 살펴 보셨습니까? –

+2

BTW, project-open에 대한 태그를 만들었습니다. [이에 대한 질문은 더 명확하게 표시 할 수 있습니다. "오픈 소스"는 확실히 올바른 선택이 아니 었습니다! –

+0

@DonalFellows 세션 ID를 db 항목에 매핑하는 데 사용되는 코드를 찾을 수 없습니다. 그리고 감정에 대한 감사합니다. –

답변

0

OWASP 보고서에서 말하는 문제는 새 ID를 사용하도록 세션을 마이그레이션 할 수 없으므로 공격자가 ID를 찾고 쉽게 다시 사용할 수 있습니다. 이것에 대한 보호는 세션 ID를 수시로 변경하는 것입니다 (아니오, 얼마나 자주 해야할지 모르겠다!). 그리고 자바 코드가 이와 관련되어 있습니다.

세션은 브라우저에 저장되는 토큰 (대개 쿠키로 표시됨)으로 표시됩니다 (쿠키가 의도 한 것입니다). 그런 다음 해당 토큰은 세션에 해당하는 데이터베이스 레코드를 조회하는 데 사용되며 세션의 키/값 매핑의 직렬화를 보유합니다. 이것은 간단한 메커니즘이지만 매우 강력합니다. 이 모든 작업을 수행하는 Java 코드는 직렬화 등으로 인해 막후에서 상당히 복잡하지만 Tcl 값은 자연적으로 직렬화 가능하므로 (일반적으로 항상 내장 된 유형의 경우)이 점에서 문제를 훨씬 적게 증명해야합니다. ; 세션을 새로운 키로 복사하는 것은 처음에 역 직렬화하지 않고도 수행 할 수 있습니다.

정확한 코드는 사용중인 프레임 워크에 따라 다릅니다. 나는 무엇을 ]project-open[이 사용하는지 모른다. 그래서 지금까지 우리가 드릴 수있는 한 멀리있다. 당신이없는 세션 키를 변경 할 수 있도록 모든 것을 들어 ... 실제로 PO 작업을 다른 사람에게


을 얘기해야, 가장 좋은 방법은, 클라이언트에게 주어진 키가 기본 키하지 않을 수 있도록하는 것입니다 사물을 삭제해야합니다. 세션 키 열 (색인 포함) 만 있으면 작업을 올바르게 할 수 있습니다. 이것은보다 정교한 접근 방식입니다. 사용자 환경에 구현하는 것이 현실적이지 않을 수 있습니다.

+0

@Donal_fellos 아직 프로젝트가 열려있는 팀으로부터 응답이 없습니다. –