2011-01-12 6 views
4

현재 고객의 사이트 중 하나에 PCI 컴플라이언스를 전달하려고하고 있지만 테스트 회사가 이해할 수없는 취약점을 신고하고 있습니다!pci complience를 전달하려고하지만 크로스 사이트 스크립팅 문제가 발생했습니다.

여기에 문제가 은 일반적으로 전자 상거래 응용 프로그램과 연결된 크로스 사이트 스크립팅 취약점입니다 : 다음과 같이 테스트 회사에서

(제거 사이트) 세부 정보입니다. 하나의 테스트 은 URL 끝에 GET 요청의 무해한 스크립트를 추가했습니다. 이 사용자 (우리 스캐너)가 입력 한 동일한 스크립트가 서버에서 헤더에 unsanitized되어 반환 되었기 때문에이 사이트는 크로스 사이트 스크립팅 취약점으로 플래그를 지정했습니다. 이 경우 스크립트는 헤더에 반환되어 스캐너가 취약점을 표시했습니다. 여기

내가 내 터미널에서 실행 된 검사는이를 복제하는 것입니다

GET /osCsid = % 22 % 3E % 3Ciframe % 20src = foo는 % 3E % 3C/iframe이 % 3E HTTP/1.0? 호스트 : (제거)

HTTP/1.1 302 Found 
Connection: close 
Date: Tue, 11 Jan 2011 23:33:19 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Location: http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe> 
Set-Cookie: ASP.NET_SessionId=bc3wq445qgovuk45ox5qdh55; path=/; HttpOnly 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Length: 203 

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2> 
</body></html> 

이 문제에 대한 해결책은 확인 문자를 만드는 요청 이러한 유형에 위생적으로 사용자 입력입니다 은 헤더 또는 페이지에 이 반환되지 않는 실행 스크립트를 트리거 할 수 있습니다.

먼저 테스터가 한 결과를 얻을 수 없으며 위치를 포함하지 않는 200 개의 헤더 만 반환하며 이동 된 객체 페이지도 반환하지 않습니다. 둘째, 나는 (어떻게 iis 6) 그것에 쿼리 문자열로 헤더를 반환 중지하는 방법을 잘 모르겠어요! 마지막으로, 헤더의 코드가 중요한 이유는 분명히 브라우저가 http 헤더의 코드를 실제로 실행하지 않기 때문입니다.

답변

0

안전해야 할 필요가없는 https가 액세스하는 모든 페이지에 대해 Response.redirect가 있고 이것이 리디렉션의 일부로 위치를 반환하고 있음이 밝혀졌습니다. (이것이 오에스 커머스 사이트가 아닙니다)

Response.Status = "301 Moved Permanently"; 
Response.AddHeader("Location", Request.Url.AbsoluteUri.Replace("https:", "http:")); 
Response.End(); 

문제

2

요청 : GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 Host:(removed)

<iframe src=foo></iframe> 여기서 문제입니다.

응답 텍스트 :

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2> 
</body></html> 

응답 링크는 다음과 같습니다 요청 문자열의 내용이 포함

http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe> 

.

기본적으로 누군가 다른 사람에게 osCsid가 다른 방식으로 페이지를 렌더링 할 수있는 텍스트를 포함하는 링크를 보낼 수 있습니다. osCsid가 입력 또는 필터를 위와 같이 위생적으로 처리하는지 확인해야합니다. 예를 들어 원하는 자바 스크립트를로드 할 수있는 문자열을 제공하거나 페이지를 완전히 다르게 렌더링 할 수 있습니다.


부수적으로 브라우저가 존재하지 않는 페이지로 전달하려고합니다.

+0

문제는, 내가 모두의 사이트에 대한 관련성이없는, 아무것도 osCsid를 사용하지 않는 것입니다에게 고정 :이 변경. 그들은 내 사이트가 그것을 사용하는지 여부에 관계없이 모든 쿼리 문자열 매개 변수를 사용할 수 있다고 말합니다. –

+0

맞습니다. osCsid가 의미하는 바를 잊어 버리십시오. 요점은 누군가가 페이지에 삽입 될 코드를 제공하게한다는 것입니다. 그들이 그 주장을 제공 할 수 있고 어딘가에 HTML로 나오면 문제가됩니다. – Incognito

+0

물론 이죠. 그러나 코드는 http 헤더에 나오지 않습니다. –

관련 문제