적절한 JavaScript 문자열 이스케이프를 사용하여 XSS가 JSON 응답을 악용할 수 있습니까?
JSON 응답은 어레이 컨스트럭터를 덮어쓰거나 적대값이 JavaScript 문자열 이스케이프가 아닌 경우 이용할 수 있습니다.
이 두 벡터가 정상적인 방법으로 처리된다고 가정해 봅시다.Google은 모든 JSON에 다음과 같은 접두사를 붙임으로써 JSON 응답 다이렉트 소싱을 함정에 빠뜨리는 것으로 유명합니다.
throw 1; < don't be evil' >
그리고 나머지 JSON이 뒤따릅니다.그래서 닥터 이블은 여기서 논의한 그런 종류의 착취로 할 수 없습니다.사이트에 다음 내용을 게시하여 쿠키를 얻습니다(로그인한 것으로 가정).
<script src="http://yourbank.com/accountStatus.json">
문자열 이스케이프 규칙에 대해서는 이중 따옴표를 사용하는 경우 각각에 백슬래시를 붙이고 각 백슬래시에 다른 백슬래시 등을 붙여야 합니다.
하지만 제 질문은, 만약 당신이 이 모든 것을 한다면요?
Burp Suite(자동 보안 도구)는 JSON 응답에서 HTML로 이스케이프되지 않은 상태로 반환되는 내장된 XSS 시도를 탐지하고 이를 XSS 취약성으로 보고합니다.내 응용 프로그램에 이런 종류의 취약성이 포함되어 있다는 보고가 있지만 납득할 수 없습니다.시도해보았는데 악용할 수 없어요.
그래서 이건 아닌 것 같아요.
IE MIME 타입의 스니핑이 악용될 가능성이 있다고 생각되는 경우가 있습니다.결국 IE 7은 Content-Type 헤더에 관계없이 이미지에 포함된 스크립트 태그를 실행하는 "기능"을 가지고 있었습니다.그런 명백한 어리석은 행동도 처음에는 제쳐두자.
JSON의 JavaScript(Windows)를 사용합니다.) JSON에 eval()
jQuery jQuery 。어느 경우든 다음 식에서는 경고가 실행되지 않습니다.
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
내가 맞나, 틀렸나?
이 인 xss xss를 사용하면 할 수 .Content-Type
RFC-4627에 의거한 모든 JSON 응답은application/json
type. 다음 코드는 xss에 취약하지 않습니다. 테스트해 보십시오.
<?php
header('Content-type: application/json');
header("x-content-type-options: nosniff");
print $_GET['json'];
?>
nosniff
header(헤더) Internet Explorer(인터넷 익스플로러). 다른
<?php
header("Content-Type: application/json");
header("x-content-type-options: nosniff");
print('{"someKey":"<body onload=alert(\'alert(/ThisIsNotXSS/)\')>"}');
?>
위의 코드가 브라우저에 의해 표시되었을 때 사용자는 JSON 파일을 다운로드하도록 요구받았습니다.JavaScript는 최신 버전의 Chrome, FireFox 및 Internet Explorer에서 실행되지 않았습니다.이는 RFC 위반이 됩니다.
to JavaScript 를 하는 .eval()
위의 JSON 또는 페이지에 대한 응답을 쓰면 DOM 기반 XSS가 됩니다.DOM 기반 XSS는 이 데이터에 대처하기 전에 JSON을 삭제함으로써 클라이언트에서 패치됩니다.
Burpsuite(자동 보안 도구)는 JSON 응답에서 HTML로 이스케이프되지 않고 반환된 임베디드 XSS 시도를 검출하여 XSS 취약성으로 보고합니다.
OWASP XSS 치트시트의 규칙 3.1에 기재되어 있는 취약성을 회피하려고 하는 경우가 있습니다.
이들은 다음과 같은 취약한 코드의 예를 제시합니다.
<script>
var initData = <%= data.to_json %>;
</script>
큰따옴표, 슬래시 및 줄바꿈이 올바르게 이스케이프되어 있어도 HTML에 포함되어 있으면 JSON에서 벗어날 수 있습니다.
<script>
var initData = {"foo":"</script><script>alert('XSS')</script>"};
</script>
to_json()
각 슬래시 앞에 백슬래시를 붙이면 이 문제를 방지할 수 있습니다.HTML JSON JSON HTML JSON입니다.★★★★★★★★★★★★★★★에 사용되고 있는 경우href="javascript:"
attribute URL이어야 .
범위를 IE(모든 버전)로 한정하는 경우는, PHP 또는 ASP에 근거해 사이트를 실행하고 있다고 가정해 주세요.NET IE XSS의 XSS. ★★'Content-type: application/json'
도움도 안 돼요
이는 (상기하신 바와 같이) IE의 콘텐츠 검출 동작에 기인하며, 이는 응답 본문의 HTML 태그에 대한 스니핑이 아닌 URI 분석을 포함합니다.
이 블로그의 투고에서는, 다음과 같이 설명하고 있습니다.
https://www.adico.me/post/json-based-xss-exploitation
참고로 답변은 받아들였지만, 질문하는 리터럴한 질문에 대해서는 제가 옳았고 JSON 값 내에 HTML이 아닌 Escaped HTML이 올바르게 존재하기 때문에 취약성은 없었습니다.클라이언트측의 이스케이프를 실시하지 않고 그 값을 DOM 에 삽입했을 경우, 버그가 발생할 가능성이 있습니다만, Burpsuite 는 네트워크트래픽을 보는 것만으로 그러한 일이 일어날지를 알 가능성은 거의 없습니다.
이러한 상황에서 보안 취약점이 무엇인지 판단하는 일반적인 경우, 좋은 설계가 아닌 것처럼 느껴질 수 있지만 이를 인식하는 것이 유익합니다.JSON 값의 응답 내용은 합법적으로 사용자 입력을 포함하지 않으며 이미 HTML로 렌더링되어 이스케이프 없이 DOM에 안전하게 삽입되도록 의도된 것으로 알려져 있습니다.다른 코멘트에서도 언급했듯이, 그것을 회피하는 것은 (비보안) 버그입니다.
언급URL : https://stackoverflow.com/questions/3146324/is-it-possible-to-xss-exploit-json-responses-with-proper-javascript-string-escap
'code' 카테고리의 다른 글
리액트 - 컴포넌트 동적 Import (0) | 2023.03.19 |
---|---|
MVC 4에서의 적절한 JSON 시리얼화 (0) | 2023.03.19 |
다중 인수 대 옵션 개체 (0) | 2023.03.19 |
useEffect에 비동기 함수를 추가한 후 오류가 발생함 (0) | 2023.03.19 |
"유체" 내비게이션은 pjax가 사용 방법입니까? (0) | 2023.03.14 |