문제

System.Web.Configuration.HttpRuntimeSection.EnableHeaderChecking](http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.enableheaderChecking(vs.85).aspx) 로 설정 true (기본값) 응답 분할 등과 같은 HTTP 헤더 주입 공격을 완전히 방지하려면?

흰색 상자 침투 테스트 도구 (Fortify)가 악용 가능한 HTTP 헤더 주입 문제를보고하기 때문에 HttpResponse.Redirect 쿠키이지만 공격을 성공적으로 수행 할 수있는 방법을 찾지 못했습니다. (편집하다..

도움이 되었습니까?

해결책

나는 지금 이것을 한동안보고 있었고 EnableHeaderChecking 에게 true 실제로 HTTP 헤더 주입 공격을 방지하기에 충분합니다.

'반사 된'ASP.NET 코드를 살펴보면 다음을 발견했습니다.

  1. HTTP 응답에 사용자 정의 HTTP 헤더를 추가하는 방법은 한 가지만 있습니다. httpresponse.appendheader 방법
  2. httpresponse.appendheader 어느 하나
    • 인스턴스를 만듭니다 HttpResponseHeader (내부)
    • 또는 전화 HttpResponseHeader.MaybeEncodeHeader (을 위한 IIS7WorkerRequests)
    • 또는 해당 속성을 할당합니다 (알려진 헤더의 경우 리디렉션 리치 또는 컨텐츠 타입)
  3. HttpResponseHeader 인스턴스는 알려진 헤더보다 먼저 생성됩니다 리디렉션 리치 또는 컨텐츠 타입 전송된다 (HttpResponse.GenerateResponseHeaders)
  4. 그만큼 HttpResponseHeader 생성자가 확인합니다 EnableHeaderChecking 설정 및 전화 HttpResponseHeader.MaybeEncodeHeader 설정했을 때 true
  5. HttpResponseHeader.MaybeEncodeHeader HTTP 헤더 주입 공격을 불가능하게 만드는 Newline 문자를 올바르게 인코딩합니다.

다음은 내가 테스트 한 방법을 대략 보여주는 스 니펫입니다.

// simple http response splitting attack
Response.AddHeader("foo", "bar\n" + 
    // injected http response, bad if user provided
    "HTTP/1.1 200 OK\n" + 
    "Content-Length: 19\n" +
    "Content-Type: text/html\n\n" +
    "<html>danger</html>"
);

위는 명시 적으로 회전하는 경우에만 작동합니다 EnableHeaderChecking 끄다:

<httpRuntime enableHeaderChecking="false"/>

요소는 단순히 구성을 고려하지 않습니다 (설정 EnableHeaderChecking 명시 적으로 영향을 미치지 않았습니다) 언제나 이러한 유형의 문제를보고합니다.

다른 팁

Afaik 충분하고 기본적으로 켜져야합니다.

배포 등의 구성을 변경하는 것처럼 Fortify는 방어에 대해 깊이 생각하고 있다고 생각합니다.

나는 당신이 당신의 구성에 엄격하게 설정하지 않았다고 생각합니다. 당신이 아마도 당신이 아마도 우리를 알아내는 것이 그다지 똑똑하지 않다면.

확인하는 가장 좋은 방법은 활용하는 것입니다 :)

  • 피들러 사본을 받으십시오
  • 요청을 가로 채십시오
  • 새 라인을 주입하십시오
  • 방금 주입 한 새 라인이 HTTP 응답에 있는지 확인하십시오.

EnableHeaderChecking은 신뢰할 수없는 데이터에만 해당됩니다. 쿠키에서 리디렉션으로 직접 데이터를 전달하는 경우 결과 헤더가 신뢰할 수있는 것으로 간주 될 수 있으며 r n 값은 탈출되지 않습니다.

Josef, httpresponse.appendheader ()가 신뢰할 수없는 데이터가 HTTP 응답 헤더를 입력 할 수있는 유일한 곳은 아닙니다.

쿠키 또는 HTTP 리디렉션으로 끝나는 공격자의 데이터는 데이터에 캐리지 리턴 (또는 운송 반환으로 해석되는 것)이 포함 된 경우 새 헤더를 작성할 수 있습니다.

일반적으로, 자리에 앉아 착취를 시도하는 것보다 데이터를 검증하는 것이 시간을 훨씬 더 잘 사용하는 것입니다. 가능성은 해커가 당신이나 나보다 이것에 대해 더 나아질 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top