feat: 가상화 문서들 추가

This commit is contained in:
DongHyeonka
2026-09-10 08:54:05 +09:00
parent e9f6a93327
commit 43e1aadef0
695 changed files with 153404 additions and 12754 deletions
@@ -10,13 +10,13 @@ nginx 는 자기가 proxy_set_header 로 설정한 헤더만 덮어쓴다. 설
## Elements and evidence
- **밖에서 보낸 위조 헤더** (actor): 앱이 믿는 이름을 그대로 쓴다. Evidence: L393L400.
- **외부 위조 헤더** (actor): 밖에서 들어온 요청이 앱이 믿는 헤더 이름을 그대로 쓴다. Evidence: L393L400.
- **nginx** (gateway): 설정하지 않은 이름은 덮어쓰지 않는다. Evidence: L393L400.
- **oauth2-proxy** (gateway): 인증 결과를 헤더로 넣는다. Evidence: L393L400.
- **앱** (service): 헤더를 믿고 인가한다. Evidence: L401L408.
## Relationships
- **밖에서 보낸 위조 헤더 → nginx:** 위조 헤더. Evidence: L393L400.
- **외부 위조 헤더 → nginx:** 위조 헤더. Evidence: L393L400.
- **nginx → oauth2-proxy:** 미삭제 시 통과. Evidence: L393L400.
- **oauth2-proxy → 앱:** 인가 헤더. Evidence: L393L408.
@@ -1,7 +1,7 @@
# 지우지 않으면 통과한다
# Question: Edge 가 넣어주는 인가 헤더를 앱이 믿어도 되는가
direction: down
n0: "밖에서 보낸 위조 헤더" {
n0: "외부 위조 헤더" {
shape: person
}
n1: "nginx" {
@@ -2,7 +2,7 @@ digraph techviz {
graph [rankdir=TB, splines=ortho, nodesep=0.55, ranksep=0.85];
node [fontname=Helvetica, fontsize=11, margin="0.18,0.12", style="rounded,filled", fillcolor=white, color="#2d4357", penwidth=1.5];
edge [fontname=Helvetica, fontsize=10, color="#364b5f", penwidth=1.4, arrowsize=0.75];
n0 [label="밖에서 보낸 위조 헤더", shape=box, style="rounded,dashed,filled"];
n0 [label="외부 위조 헤더", shape=box, style="rounded,dashed,filled"];
n1 [label="nginx", shape=diamond, style="rounded,filled"];
n2 [label="oauth2-proxy", shape=diamond, style="rounded,filled"];
n3 [label="앱", shape=box, style="rounded,filled"];
@@ -5,7 +5,7 @@
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="n_attacker" value="밖에서 보낸 위조 헤더&lt;br/&gt;X-Auth-Request-Roles" tooltip="앱이 믿는 이름을 그대로 쓴다. | Evidence: L393-L400" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;dashed=1;fillColor=#f5f7fa;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxCell id="n_attacker" value="외부 위조 헤더&lt;br/&gt;X-Auth-Request-Roles" tooltip="밖에서 들어온 요청이 앱이 믿는 헤더 이름을 그대로 쓴다. | Evidence: L393-L400" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;dashed=1;fillColor=#f5f7fa;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
<mxGeometry x="82.5" y="60.0" width="170.0" height="84.0" as="geometry"/>
</mxCell>
<mxCell id="n_nginx" value="nginx&lt;br/&gt;proxy_set_header ... &quot;&quot;" tooltip="설정하지 않은 이름은 덮어쓰지 않는다. | Evidence: L393-L400" style="whiteSpace=wrap;html=1;rounded=1;strokeWidth=2;fontSize=14;fontStyle=1;fillColor=#ffffff;strokeColor=#2d4357;verticalAlign=middle;rhombus;perimeter=rhombusPerimeter;fillColor=#fff7e8;strokeColor=#d97706;fillColor=#fffdf5;" vertex="1" parent="1">
@@ -361,11 +361,11 @@
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "밖에서 보낸 위조 헤더\nX-Auth-Request-Roles",
"text": "외부 위조 헤더\nX-Auth-Request-Roles",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "밖에서 보낸 위조 헤더\nX-Auth-Request-Roles",
"originalText": "외부 위조 헤더\nX-Auth-Request-Roles",
"autoResize": true,
"lineHeight": 1.25
},
@@ -2,7 +2,7 @@
"harness_version": "0.2.0",
"spec_id": "b4-header-trust-boundary",
"spec_version": "1.1",
"spec_sha256": "56747d5f7826ad63f202d8dc4d6a4f1323f12eeaedb4bf989b67d0bfab5f09cd",
"spec_sha256": "ad0e26787a9e508ddce08e196ceeaacf2dfe1ef2caa047537f4355b5e34739a1",
"source_context": {
"document": "docs/keycloak-session-store/final/document.md",
"document_sha256": "1d44cba1905544d92f1d26ae36a8deb64a3db3914d6b488fd30d6ae7f8cfbabe",
@@ -14,10 +14,10 @@
},
"outputs": [
"b4-header-trust-boundary.svg",
"b4-header-trust-boundary.drawio",
"b4-header-trust-boundary.mmd",
"b4-header-trust-boundary.d2",
"b4-header-trust-boundary.dot",
"b4-header-trust-boundary.drawio",
"b4-header-trust-boundary.excalidraw",
"b4-header-trust-boundary.alt.md"
],
@@ -1,7 +1,7 @@
%% 지우지 않으면 통과한다
%% question: Edge 가 넣어주는 인가 헤더를 앱이 믿어도 되는가
flowchart TB
n0(["밖에서 보낸 위조 헤더"])
n0(["외부 위조 헤더"])
n1{"nginx"}
n2{"oauth2-proxy"}
n3["앱"]
@@ -61,7 +61,7 @@
<text class="edge-label" x="191.5" y="527.0">인가 헤더</text>
<g id="node-attacker">
<g class="actor-symbol emphasis-warning" data-evidence="393-400"><circle cx="167.5" cy="80.0" r="11.0" /><line x1="167.5" y1="96.0" x2="167.5" y2="105.0" /><line x1="149.5" y1="106.0" x2="185.5" y2="106.0" /><line x1="167.5" y1="105.0" x2="152.5" y2="122.0" /><line x1="167.5" y1="105.0" x2="182.5" y2="122.0" /></g>
<text class="node-label" x="167.5" y="137.0">밖에서 보낸 위조 헤더</text>
<text class="node-label" x="167.5" y="137.0">외부 위조 헤더</text>
</g>
<g id="node-nginx">
<polygon class="node-shape kind-gateway emphasis-warning role-control" data-evidence="393-400" points="167.5,240.0 265.0,275.5 167.5,311.0 70.0,275.5" />

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB