보상이 걸린 질문
질문에 답변을 달고 보상을 받아가세요!
<script nonce={{ nonce }}>
window.addEventListener("load", function() {
var name_elem = document.getElementById("name");
name_elem.innerHTML = ${location.hash.slice(1)} is my name !;
});
</script>
<script id="name"></script>
위 코드는 질문하기 쉽게 문제와 유사하게 만든 코드입니다.
위 코드에서 nonce를 가진 script(CSP에 의해 신뢰된 스크립트)를 A라 두고
id=name 인 script(CSP에 의해 신뢰되지 않은 스크립트)를 B라 지칭하겠습니다.
A 스크립트는 nonce를 가지고 있어 CSP에 의해 허용된 스크립트입니다. 하지만 B 스크립트는 CSP의 화이트리스트를 통과하지 못해 차단 되어야 합니다.
A 스크립트가 B 스크립트의 내용을 InnerHTML을 통해 수정하였을 때 B스크립트에 내용을 넣어줍니다. HTML Standard 명세에 따라 내용이 비어있어서 실행되지 않았던 script는 요소가 변형되면 실행된다는 것은 알 수 있었습니다. 하지만 수정된 B 스크립트의 코드가 실행된다 하여도 CSP를 통과하는 것은 다른 문제입니다.
관련 명세나 문서를 아무리 찾아봐도 Strict Dynamic은 신뢰된 스크립트가 동적으로 생성하거나 로드한 script만 허용한다는 말 밖에 없습니다.
위 경우는 동적으로 생성한 것도 아니고, 로드한 것도 아닌, 기존의 B스크립트의 내용만을 생성했을 뿐이며, B스크립트를 따로 호출하지도 않습니다. 그렇다면 A가 삽입한 코드이지만 B스크립트 내에서 실행 될텐데 신뢰 전파의 영향을 받는 정확한 이유가 궁급합니다.
해당 문제 메커니즘은 대부분 이해했는데 헷갈리는 부분이 있습니다.
더블프리를 해서 청크의 next부분을 stdout (library내의 IOstdout을 가르키는 포인터)로 덮고 alloc을 두번 해주면 library 주소가 leak된다고 하였는데,
stdout이 library영역을 가르킨다면, 청크가 할당 될 때 청크의 위치가 library 영역이 되는거고 그 청크를 프린트하면 나오는건 library 영역에 써져있는 코드여야 하는거 아닌가요?
tcache_entry구조에서 next에 들어가 있는 주소는 다음 할당할 청크의 주소일텐데, 그 청크의 주소가 libary 영역이라고 해도 우리가 프린트할 수 있는 data섹션에 담긴 값은 주소가 아닌 그저 stdoutIO를 이루는 코드인 것 아닌가요?
커뮤니티 최신글
나에게 맞는 해킹 분야는 어떻게 찾을까요? (대표적인 해킹 분야, 성향별 추천)
[0]
236
💬 친구들이랑 드림핵 계정 하나를 공유해도 되나요? - 구독 관련 질문 답변 모음
[0]
296
드림핵 구독 무료 vs 유료, 뭐가 좋을까요?
[0]
327
👾 옵치 솜브라 해킹, 현실에서도 가능한걸까? ☠️아빠 썬글라스 뿌세쓰!
[0]
385
🏆 공식 한국인 첫 Pwnie Awards 수상자가, 드림핵으로 해킹을 시작했다고!?
[1]
644
💻 해킹 부트캠프가 좋아요? 학원이 좋아요? (나에게 맞는 학습 플랫폼은?)
[0]
808
🕹 5가지 실수만 피하고 이세계 만렙 해커가 되었다 (해킹 공부할 때 많이 하는 실수, 해결하는 방법)
[0]
750
[청년취업사관학교 서초캠퍼스] LLM Agent를 활용한 서비스 기획 및 제작 과정 교육생 모집
[0]
40
네 앞에 서있는 건 천 년 이상 CTF한 해커야 <CTF S7 #22>
[0]
238
CyKor CTF 개최
[0]
578
제11회 BoB 정보보안 컨퍼런스 BISC 개최
[0]
307
새싹(SeSAC) 도봉3기 <AI 바이브코딩을 활용한 클라우드 DevOps 엔지니어 양성 과정>
[0]
164
[CTF] 제 1회 감귤 CTF 개최합니다!
[8]
1078
[청년취업사관학교 용산캠퍼스(SeSAC)] AI 활용 클라우드·데이터 엔지니어 양성과정 교육생 모집(~11/28)
[0]
158
