
CVE-2026-73296에 대한 비파괴적 보안 평가 도구로, 노출된 Mobile MCP HTTP 서버(포트 8020/8021)의 인증 경계를 점검하여 잠재적인 무단 Android 기기 접근을 탐지합니다.
UFO-Vuln 💥
인증되지 않은 Mobile MCP 접근으로 Android 화면 데이터가 노출될 수 있으며, ADB를 통한 원격 UI 제어 기능이 제공될 수 있습니다.
이 저장소는 공인된 보안 연구, 취약점 검증, 방어적 테스트 및 통제된 실험실 환경에서만 사용하도록 제작되었습니다.
포함된 검사 도구는 비파괴적 인증 경계 검사를 수행하도록 설계되었습니다.
다음 작업을 수행하지 않습니다:
CVE: CVE-2026-73296
제품: Microsoft UFO
구성 요소: Mobile MCP HTTP 서버
심각도: 치명적(Critical)
CVSS v3.1: 9.4
영향을 받는 버전: <= v3.0.7
공식 패치 버전: 본 문서 작성 시점 기준 Microsoft UFO 권고에 명시된 패치 버전 없음.
CWE:
이 취약점은 UFO의 Mobile MCP 데이터 수집 및 액션 서버가 적절한 인증 없이 네트워크에 노출될 때 발생합니다.
공식 권고는 취약한 구현을 다음과 같이 식별합니다:```text ufo/client/mcp/http_servers/mobile_mcp_server.py
영향을 받는 서비스는 ADB에 연결된 Android 기기와 상호작용할 수 있는 Streamable HTTP MCP 인터페이스를 노출합니다.
서비스가 원격으로 접근 가능하고 인증이 적용되지 않는 경우, 인증되지 않은 네트워크 클라이언트가 민감한 기기 정보에 접근하고 Android UI 제어 기능을 호출할 수 있습니다.
---
# 🎯 핵심 요약
Microsoft UFO는 지능형 자동화와 다중 기기 오케스트레이션을 위해 설계된 AI 에이전트 프레임워크입니다.
해당 프레임워크의 Mobile MCP 기능은 ADB를 통해 Android 기기와 상호작용하기 위한 MCP 서버를 제공합니다.
취약한 구성은 두 가지 중요한 네트워크 서비스를 노출합니다:
| 서비스 | 포트 | 기능 |
| -------------------------- | -----: | ----------------------------------- |
| Mobile Data Collection MCP | `8020` | Android 정보 및 화면 데이터 |
| Mobile Action MCP | `8021` | Android 상호작용 및 제어 |
영향을 받는 버전에서는 Mobile MCP 서버가 인증 제공자 또는 요청 수준 권한 부여 검사 없이 생성될 수 있습니다.
결과적으로:```text
Remote Client
│
│ HTTP / MCP
▼
┌──────────────────────┐
│ Mobile MCP Server │
│ │
│ Authentication: │
└──────────┬───────────┘
│
▼
ADB Interface
│
▼
Android Device
원격 네트워크 클라이언트와 ADB 기반 기능 사이의 보안 경계가 따라서 충분히 보호되지 않습니다.
9.4 CRITICAL
Vector:```py
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
이 취약점은 악용에 본질적으로 다음이 필요하지 않기 때문에 특히 중요합니다:
공식 권고에 따르면 노출된 서비스에 도달할 수 있는 네트워크 클라이언트는 자격 증명을 제시하지 않고도 MCP 세션을 초기화하고 해당 도구를 호출할 수 있습니다.
공식 Microsoft UFO 보안 권고에 따르면:```py Affected: <= v3.0.7
Patched: None listed
공식 저장소는 현재 `3.0.7`을 릴리스로 등재하고 있습니다.
> **중요:** Microsoft가 해당 정보를 공개하지 않는 한 `3.0.8`이 공식적으로 패치된 릴리스라고 주장하지 마십시오. 공식 보안 권고에는 현재 패치된 버전이 등재되어 있지 않습니다.
---
# 🏗️ 취약한 아키텍처
취약한 기능은 다음에 구현되어 있습니다:```py
ufo/client/mcp/http_servers/mobile_mcp_server.py
공식 권고에서 확인된 주요 기능은 다음과 같습니다:
create_mobile_data_collection_server capture_screenshot get_ui_tree get_device_info get_mobile_app_target_info get_app_window_controls_target_info
### 모바일 작업```py
create_mobile_action_server
tap
swipe
type_text
launch_app
press_key
click_control
두 HTTP 서비스는 다음 항목과 연결됩니다:```py TCP/8020 TCP/8021
The advisory specifically identifies these services as the Mobile data-collection and action MCP servers.
---
# 🔬 근본 원인
근본적인 보안 문제는 다음과 같습니다:```py
Powerful functionality
+
Network exposure
+
Missing authentication
=
Unauthorized access
영향을 받는 구현에서 Mobile MCP FastMCP 서버는 인증 제공자 또는 이에 상응하는 요청 수준 권한 부여 강제 없이 구성되었습니다.
개념적으로:```python mcp = FastMCP( "Mobile MCP Server", host=host, port=port, )
문제는 단순히 MCP의 존재 자체가 아니다.
문제는 네트워크로 접근 가능한 인터페이스가 호출자가 인증된 신원을 확립하도록 요구하지 않으면서 보안에 민감한 작업을 노출한다는 점이다.
---
# 🔗 공격 흐름
단순화된 공격 체인은 다음과 같다:```py
┌───────────────────┐
│ Unauthenticated │
│ Network Client │
└─────────┬─────────┘
│
│ HTTP
▼
┌─────────────────────────┐
│ Mobile MCP :8020/:8021 │
│ │
│ Authentication missing │
└───────────┬─────────────┘
│
│ MCP Tool
▼
┌─────────────────────────┐
│ Mobile MCP Tool │
└───────────┬─────────────┘
│
│ ADB operation
▼
┌─────────────────────────┐
│ Android Device / ADB │
└─────────────────────────┘
중요한 보안 전환은 다음과 같습니다:```py Unauthenticated network request ↓ MCP functionality ↓ ADB-backed action ↓ Android device
---
# 📡 노출된 서비스
## 포트 8020 — 데이터 수집
데이터 수집 서버는 다음과 관련된 기능을 노출할 수 있습니다:```py
capture_screenshot
get_ui_tree
get_device_info
get_mobile_app_target_info
get_app_window_controls_target_info
잠재적으로 노출될 수 있는 정보는 다음과 같습니다:
이는 심각한 기밀성 위험을 초래합니다.
액션 서버는 다음과 관련된 기능을 노출합니다:```text tap swipe type_text launch_app press_key click_control
이러한 작업은 원격 호출자에게 Android UI 상호작용 기능을 제공할 수 있습니다.
기기 상태와 접근 가능한 애플리케이션에 따라, 이는 잠재적으로 다음을 허용할 수 있습니다:```text
Remote input
↓
UI navigation
↓
Application interaction
↓
Device-state modification
공식 권고는 이러한 기능을 원격으로 주입 가능한 Android UI 작업으로 구체적으로 설명합니다.
화면 및 UI 정보에 대한 무단 액세스는 잠재적으로 다음을 노출할 수 있습니다:
정확한 영향은 연결된 ADB 환경을 통해 액세스할 수 있는 Android 기기 및 애플리케이션에 따라 달라집니다.
무단 모바일 작업을 통해 공격자는 다음을 수행할 수 있습니다:```text Tap Swipe Type text Press keys Launch applications Click UI controls
이로 인해 애플리케이션 상태가 수정되거나 기기에서 실행 중인 워크플로와 상호작용할 가능성이 있습니다.
---
# 💥 가용성 영향
반복적인 자동화 작업은 다음을 초래할 수 있습니다:
* 자동화 중단
* 애플리케이션 전환
* 워크플로에서 이탈
* 예상치 못한 UI 동작 유발
* 테스트 환경 간섭
* Android 자동화 세션 방해
CVSS 평가는 **낮은 가용성 영향**을 부여하며, 기밀성과 무결성은 **높음**으로 평가됩니다.
---
# 🧪 안전한 탐지
이 저장소에는 다음이 포함됩니다:```text
cve-2026-73296.py
체커는 의도적으로 비파괴적 보안 평가 도구로 설계되었습니다.
다음을 확인합니다:```text TCP reachability ↓ HTTP response ↓ Authentication boundary ↓ SAFE / VULNERABLE / UNKNOWN
It does **not** invoke Mobile MCP tools.
---
# 🟢 SAFE
`SAFE` 결과는 테스트된 HTTP 엔드포인트가 다음과 같은 인증/권한 부여 장벽을 반환했음을 의미합니다:```text
HTTP 401
HTTP 403
예시:```text [SAFE] Port 8020: authentication/authorization barrier detected
---
# 🔴 취약
`VULNERABLE` 결과는 테스트된 HTTP 엔드포인트가 인증 요구 없이 성공적으로 응답했음을 의미합니다.
예시:```text
[VULNERABLE] Port 8021:
HTTP endpoint responded without an authentication challenge
이는 확인을 요하는 잠재적 노출로 처리해야 합니다.
UNKNOWN 결과는 체커가 인증 상태를 확실하게 판별하지 못했음을 의미합니다.
예시:```text TCP unreachable TLS error HTTP timeout Unexpected HTTP response Redirect
`UNKNOWN`은 안전하거나 취약한 것으로 해석되어서는 안 됩니다.
---
# ⚠️ 탐지 제한 사항
이 검사 도구는 의도적으로 **취약점을 증명한다고 주장하지 않습니다**.
녹색 결과는 다음을 의미합니다:
> 테스트된 HTTP 경계에서 인증 보호가 관찰되었습니다.
이는 전체 UFO 배포가 안전하다는 것을 수학적으로 증명하지는 **않습니다**.
마찬가지로, 빨간색 결과는 다음을 나타냅니다:
> 테스트된 엔드포인트가 인증 요청 없이 응답했습니다.
이는 다음 항목과 연관 지어 확인해야 합니다:
* UFO 버전
* 배포 구성
* 네트워크 노출
* MCP 구성
* 리버스 프록시
* TLS 구성
* 방화벽 규칙
* ADB 연결
---
# 🚀 사용법
저장소를 클론합니다:```bash
git clone https://github.com/0xBlackash/CVE-2026-73296.git
cd CVE-2026-73296
의존성 설치:```bash python3 -m pip install requests
구문 검사:```bash
python3 -m py_compile cve-2026-73296.py
승인된 테스트 시스템에 대해 실행합니다:```bash python3 cve-2026-73296.py 127.0.0.1
예제 실습 대상:```bash
python3 cve-2026-73296.py 192.168.56.10
HTTPS 및 실험실/자체 서명 인증서를 사용하는 경우:```bash python3 cve-2026-73296.py https://192.168.56.10 --no-verify-tls
---
# 🖥️ 예제 출력
### 보호된 엔드포인트```py
════════════════════════════════════════════════════════
SECURITY ASSESSMENT
────────────────────────────────────────────────────────
SAFE : 2
VULNERABLE : 0
UNKNOWN : 0
✓ AUTHENTICATION CHECK PASSED
════════════════════════════════════════════════════════ SECURITY ASSESSMENT ────────────────────────────────────────────────────────
SAFE : 0 VULNERABLE : 2 UNKNOWN : 0
⚠ POTENTIAL CVE-2026-73296 EXPOSURE
→ TCP/8020 responded without an authentication challenge. → TCP/8021 responded without an authentication challenge.
<img width="1523" height="789" alt="CVE-2026-73296" src="https://assets.kitploit.com/production/public/readmes/54023/5754c6ba111148250c8f3067db1c7dfbb9cb85e4910f2afe13443f7906926573/def8f2a924188fdd01d3ef2b3880c3bc22bef0c251f9b13d24ac458f2143f3eb-display-v1.webp" />
---
# 🧬 소스-투-싱크 모델
이 취약점은 소스-투-싱크 보안 실패로 이해할 수 있습니다:```py
SOURCE
│
│ Unauthenticated network request
▼
MCP HTTP Server
│
│ Missing authentication/authorization
▼
MCP Tool
│
▼
ADB-backed operation
│
▼
ANDROID DEVICE
의도된 보안 경계는 대신 다음과 같아야 합니다:```py Network Request │ ▼ Authentication │ ├──── INVALID ────► REJECT │ ▼ Authorization │ ├──── DENIED ─────► REJECT │ ▼ MCP Tool │ ▼ ADB
---
# 🔐 권장 수정 조치
주요 수정 조치는 Mobile MCP HTTP 전송 경계에서 인증을 강제하는 것입니다.
권장 보안 아키텍처:```py
┌──────────────────┐
│ Authorized MCP │
│ Client │
└────────┬─────────┘
│
Bearer Token
│
▼
┌──────────────────┐
│ Authentication │
│ Middleware │
└────────┬─────────┘
│
Authorized?
/ \
NO YES
│ │
▼ ▼
REJECT MCP Tool
│
▼
ADB
공식 권고사항은 다음을 기반으로 한 인증 설계를 권장합니다:```py UFO_MCP_API_KEY
보안 모델은 다음을 보장해야 합니다:
1. 높은 엔트로피의 비밀값이 필요합니다.
2. 자격 증명이 누락된 경우 서버는 폐쇄(fail closed)되어야 합니다.
3. 유효하지 않은 Bearer 자격 증명은 거부됩니다.
4. 도구 실행 전에 인증이 수행됩니다.
5. 자격 증명은 LLM이 볼 수 있는 도구 매개변수로 노출되지 않습니다.
6. 자격 증명 비교는 상수 시간 비교(constant-time comparison)를 사용해야 합니다.
7. 원격 배포는 암호화된 전송을 사용해야 합니다.
8. 가능한 경우 localhost가 기본값으로 유지되어야 합니다.
---
# 🌐 네트워크 노출
다음의 노출을 피하십시오:```py
0.0.0.0:8020
0.0.0.0:8021
직접 신뢰할 수 없는 네트워크에 연결하지 마십시오.
다음과 같이 하십시오:```py 127.0.0.1
로컬 전용 배포를 위한 것입니다.
합법적인 원격 접근을 위해서는 다음을 고려하세요:```py
Client
│
▼
TLS / Private Tunnel
│
▼
Authenticated Reverse Proxy
│
▼
UFO MCP
│
▼
ADB
가능한 보안 통제에는 다음이 포함됩니다:
적절한 보안 회귀 테스트 스위트는 다음을 검증해야 합니다:
Request ↓ No Authorization header ↓ REJECT ↓ ADB not reached
## 2. 2단계: `-p` 플래그를 사용하여 프로젝트를 생성합니다.
```bash
$ nuclei -update-templates
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150" -var "bulk-size=25"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150" -var "bulk-size=25" -var "max-host-error=10"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150" -var "bulk-size=25" -var "max-host-error=10" -var "follow-redirects=true"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150" -var "bulk-size=25" -var "max-host-error=10" -var "follow-redirects=true" -var "max-redirects=5"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password=password123" -var "token=abc123" -var "api_key=xyz789" -var "secret=secret123" -var "cookie=sessionid=abc123" -var "header=X-Custom-Header: value" -var "body={\"key\":\"value\"}" -var "method=POST" -var "path=/api/v1" -var "query=param=value" -var "fragment=section" -var "scheme=https" -var "host=example.com" -var "port=443" -var "timeout=10" -var "retries=3" -var "delay=2" -var "concurrency=50" -var "rate-limit=150" -var "bulk-size=25" -var "max-host-error=10" -var "follow-redirects=true" -var "max-redirects=5" -var "proxy=http://proxy.example.com:8080"
-p 플래그를 사용하여 프로젝트를 생성합니다.$ nuclei -p https://example.com -json -o output.json -silent -v -debug -stats -si 100 -c 50 -rl 150 -bulk-size 25 -retries 3 -mhe 10 -timeout 5 -delay 1 -H "X-API-Key: 12345" -templates http -severity critical -tags cve -exclude-tags dos -var "target=example.com" -var "port=8080" -var "username=admin" -var "password```py
PASS
Bearer: invalid-token ↓ REJECT ↓ ADB not reached
## 3. 2단계: `--no-edit` 플래그 사용
`--no-edit` 플래그는 Git이 커밋 메시지 편집기를 열지 않도록 지시합니다. 이는 `git commit` 명령에 `-m` 옵션을 제공하지 않을 때 유용합니다. 이 플래그를 사용하면 Git은 기본 커밋 메시지를 사용하거나, 이전에 `git commit --amend`를 사용한 경우 기존 메시지를 유지합니다.
```bash
git commit --no-edit
이 명령은 편집기를 열지 않고도 커밋을 생성합니다. 이는 특히 스크립트나 자동화된 워크플로우에서 유용하며, 수동 개입 없이 커밋을 생성할 수 있습니다.
--amend 플래그 사용--amend 플래그는 Git이 마지막 커밋을 수정하도록 지시합니다. 이는 커밋 메시지를 변경하거나, 파일을 추가하거나, 마지막 커밋의 내용을 수정해야 할 때 유용합니다.
git commit --amend
이 명령은 편집기를 열어 마지막 커밋의 메시지를 수정할 수 있게 합니다. 메시지를 변경하지 않고 마지막 커밋에 파일을 추가하려면 --no-edit 플래그와 함께 사용할 수 있습니다:
git commit --amend --no-edit
이 명령은 편집기를 열지 않고 마지막 커밋에 변경 사항을 추가합니다.
--author 플래그 사용--author 플래그는 Git이 커밋에 대해 다른 작성자를 사용하도록 지시합니다. 이는 다른 사람을 대신해 커밋하거나, 커밋의 작성자 정보를 수정해야 할 때 유용합니다.
git commit --author="John Doe <[email protected]>"
이 명령은 지정된 작성자 정보로 커밋을 생성합니다. 이는 특히 오픈 소스 프로젝트에서 다른 기여자를 대신해 커밋할 때 유용합니다.
--date 플래그 사용--date 플래그는 Git이 커밋에 대해 다른 날짜를 사용하도록 지시합니다. 이는 커밋 날짜를 수정해야 할 때 유용합니다.
git commit --date="2023-01-01 12:00:00"
이 명령은 지정된 날짜로 커밋을 생성합니다. 이는 특히 과거 날짜로 커밋해야 하거나, 커밋 날짜를 수정해야 할 때 유용합니다.
--gpg-sign 플래그 사용--gpg-sign 플래그는 Git이 GPG 키로 커밋에 서명하도록 지시합니다. 이는 커밋의 무결성과 신뢰성을 보장해야 할 때 유용합니다.
git commit --gpg-sign
이 명령은 GPG 키로 서명된 커밋을 생성합니다. 이는 특히 보안이 중요한 프로젝트에서 커밋이 특정 작성자에 의해 생성되었는지 확인해야 할 때 유용합니다.
--no-verify 플래그 사용--no-verify 플래그는 Git이 사전 커밋 및 커밋 메시지 훅을 건너뛰도록 지시합니다. 이는 훅이 실패하거나, 훅을 실행하지 않고 커밋해야 할 때 유용합니다.
git commit --no-verify
이 명령은 훅을 실행하지 않고 커밋을 생성합니다. 이는 특히 훅이 실패하거나, 훅을 실행하지 않고 커밋해야 할 때 유용합니다.
--dry-run 플래그 사용--dry-run 플래그는 Git이 커밋을 생성하지 않고 커밋 프로세스를 시뮬레이션하도록 지시합니다. 이는 커밋에 포함될 변경 사항을 확인해야 할 때 유용합니다.
git commit --dry-run
이 명령은 커밋에 포함될 변경 사항을 표시하지만 실제 커밋은 생성하지 않습니다. 이는 특히 커밋하기 전에 변경 사항을 검토해야 할 때 유용합니다.
--quiet 플래그 사용--quiet 플래그는 Git이 커밋 프로세스 중 출력을 억제하도록 지시합니다. 이는 출력을 최소화해야 할 때 유용합니다.
git commit --quiet
이 명령은 출력을 최소화하면서 커밋을 생성합니다. 이는 특히 스크립트나 자동화된 워크플로우에서 유용하며, 출력을 최소화해야 할 때 유용합니다.
--verbose 플래그 사용--verbose 플래그는 Git이 커밋 프로세스 중 자세한 출력을 표시하도록 지시합니다. 이는 커밋에 포함될 변경 사항에 대한 자세한 정보를 확인해야 할 때 유용합니다.
git commit --verbose
이 명령은 커밋에 포함될 변경 사항에 대한 자세한 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋하기 전에 변경 사항을 검토해야 할 때 유용합니다.
--signoff 플래그 사용--signoff 플래그는 Git이 커밋 메시지에 "Signed-off-by" 라인을 추가하도록 지시합니다. 이는 커밋이 특정 작성자에 의해 승인되었음을 나타내야 할 때 유용합니다.
git commit --signoff
이 명령은 커밋 메시지에 "Signed-off-by" 라인을 추가하면서 커밋을 생성합니다. 이는 특히 오픈 소스 프로젝트에서 커밋이 특정 작성자에 의해 승인되었음을 나타내야 할 때 유용합니다.
--trailer 플래그 사용--trailer 플래그는 Git이 커밋 메시지에 트레일러 라인을 추가하도록 지시합니다. 이는 커밋 메시지에 추가 메타데이터를 포함해야 할 때 유용합니다.
git commit --trailer="Signed-off-by: John Doe <[email protected]>"
이 명령은 커밋 메시지에 트레일러 라인을 추가하면서 커밋을 생성합니다. 이는 특히 커밋 메시지에 추가 메타데이터를 포함해야 할 때 유용합니다.
--cleanup 플래그 사용--cleanup 플래그는 Git이 커밋 메시지를 정리하는 방법을 지시합니다. 이는 커밋 메시지에서 불필요한 공백이나 주석을 제거해야 할 때 유용합니다.
git commit --cleanup=scissors
이 명령은 커밋 메시지에서 불필요한 공백이나 주석을 제거하면서 커밋을 생성합니다. 이는 특히 커밋 메시지를 깨끗하게 유지해야 할 때 유용합니다.
--status 플래그 사용--status 플래그는 Git이 커밋 프로세스 중 상태 정보를 표시하도록 지시합니다. 이는 커밋에 포함될 변경 사항에 대한 정보를 확인해야 할 때 유용합니다.
git commit --status
이 명령은 커밋에 포함될 변경 사항에 대한 상태 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋하기 전에 변경 사항을 검토해야 할 때 유용합니다.
--no-status 플래그 사용--no-status 플래그는 Git이 커밋 프로세스 중 상태 정보를 표시하지 않도록 지시합니다. 이는 상태 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
git commit --no-status
이 명령은 상태 정보를 표시하지 않고 커밋을 생성합니다. 이는 특히 상태 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
--porcelain 플래그 사용--porcelain 플래그는 Git이 커밋 프로세스 중 기계가 읽을 수 있는 출력을 표시하도록 지시합니다. 이는 스크립트나 자동화된 워크플로우에서 출력을 파싱해야 할 때 유용합니다.
git commit --porcelain
이 명령은 기계가 읽을 수 있는 출력을 표시하면서 커밋을 생성합니다. 이는 특히 스크립트나 자동화된 워크플로우에서 출력을 파싱해야 할 때 유용합니다.
--long 플래그 사용--long 플래그는 Git이 커밋 프로세스 중 자세한 출력을 표시하도록 지시합니다. 이는 커밋에 포함될 변경 사항에 대한 자세한 정보를 확인해야 할 때 유용합니다.
git commit --long
이 명령은 커밋에 포함될 변경 사항에 대한 자세한 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋하기 전에 변경 사항을 검토해야 할 때 유용합니다.
--short 플래그 사용--short 플래그는 Git이 커밋 프로세스 중 간결한 출력을 표시하도록 지시합니다. 이는 커밋에 포함될 변경 사항에 대한 간결한 정보를 확인해야 할 때 유용합니다.
git commit --short
이 명령은 커밋에 포함될 변경 사항에 대한 간결한 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋하기 전에 변경 사항을 검토해야 할 때 유용합니다.
--branch 플래그 사용--branch 플래그는 Git이 커밋 프로세스 중 분기 정보를 표시하도록 지시합니다. 이는 커밋이 생성되는 분기에 대한 정보를 확인해야 할 때 유용합니다.
git commit --branch
이 명령은 커밋이 생성되는 분기에 대한 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋이 생성되는 분기를 확인해야 할 때 유용합니다.
--no-branch 플래그 사용--no-branch 플래그는 Git이 커밋 프로세스 중 분기 정보를 표시하지 않도록 지시합니다. 이는 분기 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
git commit --no-branch
이 명령은 분기 정보를 표시하지 않고 커밋을 생성합니다. 이는 특히 분기 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
--show-signature 플래그 사용--show-signature 플래그는 Git이 커밋 프로세스 중 서명 정보를 표시하도록 지시합니다. 이는 커밋의 서명 정보를 확인해야 할 때 유용합니다.
git commit --show-signature
이 명령은 커밋의 서명 정보를 표시하면서 커밋을 생성합니다. 이는 특히 커밋의 서명 정보를 확인해야 할 때 유용합니다.
--no-show-signature 플래그 사용--no-show-signature 플래그는 Git이 커밋 프로세스 중 서명 정보를 표시하지 않도록 지시합니다. 이는 서명 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
git commit --no-show-signature
이 명령은 서명 정보를 표시하지 않고 커밋을 생성합니다. 이는 특히 서명 정보를 표시하지 않고 커밋해야 할 때 유용합니다.
--allow-empty 플래그 사용--allow-empty 플래그는 Git이 변경 사항이 없는 커밋을 생성하도록 지시합니다. 이는 변경 사항이 없어도 커밋을 생성해야 할 때 유용합니다.
git commit --allow-empty
이 명령은 변경 사항이 없어도 커밋을 생성합니다. 이는 특히 변경 사항이 없어도 커밋을 생성해야 할 때 유용합니다.
--allow-empty-message 플래그 사용--allow-empty-message 플래그는 Git이 빈 커밋 메시지로 커밋을 생성하도록 지시합니다. 이는 커밋 메시지 없이 커밋을 생성해야 할 때 유용합니다.
git commit --allow-empty-message
이 명령은 빈 커밋 메시지로 커밋을 생성합니다. 이는 특히 커밋 메시지 없이 커밋을 생성해야 할 때 유용합니다.
--no-allow-empty 플래그 사용--no-allow-empty 플래그는 Git이 변경 사항이 없는 커밋을 생성하지 않도록 지시합니다. 이는 변경 사항이 없을 때 커밋을 생성하지 않아야 할 때 유용합니다.
git commit --no-allow-empty
이 명령은 변경 사항이 없을 때 커밋을 생성하지 않습니다. 이는 특히 변경 사항이 없을 때 커밋을 생성하지 않아야 할 때 유용합니다.
--no-allow-empty-message 플래그 사용--no-allow-empty-message 플래그는 Git이 빈 커밋 메시지로 커밋을 생성하지 않도록 지시합니다. 이는 커밋 메시지 없이 커밋을 생성하지 않아야 할 때 유용합니다.
git commit --no-allow-empty-message
이 명령은 빈 커밋 메시지로 커밋을 생성하지 않습니다. 이는 특히 커밋 메시지 없이 커밋을 생성하지 않아야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
--no-renames 플래그 사용--no-renames 플래그는 Git이 파일 이름 변경을 감지하지 않도록 지시합니다. 이는 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
git commit --no-renames
이 명령은 파일 이름 변경을 감지하지 않고 커밋을 생성합니다. 이는 특히 파일 이름 변경을 감지하지 않고 커밋해야 할 때 유용합니다.
PASS
### 테스트 3 — 유효한 자격 증명```py
Bearer: valid-token
↓
ACCEPT
↓
MCP Tool
↓
ADB
--no-verify 플래그를 사용하면 서명 확인을 건너뛸 수 있습니다. 이는 신뢰할 수 없는 소스의 이미지를 검사할 때 유용할 수 있습니다.```py
PASS
### 테스트 4 — 누락된 서버 시크릿```py
UFO_MCP_API_KEY = missing
The -f flag is used to specify the file containing the list of subdomains to check. The -o flag is used to specify the output file where the results will be saved. The -t flag is used to specify the number of threads to use for concurrent requests. The -p flag is used to specify the protocol to use (HTTP or HTTPS). The -c flag is used to specify the cookie to include in the requests. The -H flag is used to specify the headers to include in the requests. The -d flag is used to specify the data to include in the POST requests. The -m flag is used to specify the HTTP method to use (GET or POST). The -r flag is used to specify the redirect handling behavior. The -k flag is used to specify whether to ignore SSL certificate errors. The -x flag is used to specify the proxy to use for the requests. The -a flag is used to specify the user-agent to use for the requests. The -T flag is used to specify the timeout for the requests. The flag is used to specify the delay between requests. The flag is used to enable verbose output. The flag is used to enable quiet mode. The flag is used to display the help message.```py
Server fails closed
### 테스트 5 — 자격 증명 자리 표시자
확인되지 않은 환경 변수는 우연히 인증 자격 증명이 되어서는 안 됩니다.
예상 결과:```py
Client initialization fails
인증만으로는 충분하다고 간주해서는 안 됩니다.
권장 통제 사항:
---```py Internet │ X │ Firewall/VPN │ ▼ TLS / Proxy │ ▼ API Authentication │ ▼ Authorization │ ▼ MCP Server │ ▼ ADB │ ▼ Android Device
---
# 🔎 탐지 및 모니터링
보안 팀은 다음에 대한 예상치 못한 접근을 모니터링해야 합니다:```text
TCP/8020
TCP/8021
다음을 확인하세요:
유용한 네트워크 텔레메트리:```text source_ip destination_ip destination_port timestamp HTTP_method HTTP_status user_agent authorization_present request_frequency
---
# 📋 침해 대응 체크리스트
노출된 취약 인스턴스가 발견된 경우:
### 1. 네트워크 접근 제한
즉시 다음에 대한 접근을 제한하세요:```text
8020
8021
서비스가 필요하지 않은 경우, 연결된 ADB 기기를 연결 해제하세요.
다음을 확인하세요:```text Unknown source IPs Unexpected MCP sessions Unexpected device interactions Unexpected application launches
### 4. 자격 증명 교체
인증 비밀번호가 노출되었을 수 있는 경우:```text
Generate a new high-entropy API key
다음을 확인합니다:
최신 Microsoft UFO 보안 권고 및 릴리스 정보를 따르세요.
조치 후 안전 검사기를 다시 실행하세요.
이 프로젝트는 방어적 취약점 검증 방법론을 따릅니다:```py
---
# 📂 저장소 구조
권장 프로젝트 구조:```py
CVE-2026-73296/
│
├── README.md
│
├── poc/
│ └── cve-2026-73296.py
│
├── docs/
│ ├── technical-analysis.md
│ ├── remediation.md
│ └── detection.md
│
├── screenshots/
│ ├── safe.png
│ └── vulnerable.png
│
├── tests/
│ └── README.md
│
├── LICENSE
└── .gitignore
MCP 서버는 네트워크를 통해 강력한 작업을 노출할 때 무해한 로컬 유틸리티로 취급되어서는 안 됩니다.
ADB에 연결된 MCP 엔드포인트는 다음 사이의 다리가 될 수 있습니다:```text Network ↓ Agent protocol ↓ ADB ↓ Android
보안 요구 사항은 따라서 전체 체인을 포괄해야 합니다.
---
## 3. 로컬호스트 기본값이 중요하다
다음에 바인딩된 서비스:```text
127.0.0.1
has a fundamentally different exposure profile from:```text 0.0.0.0
네트워크 바인딩은 따라서 보안 구성으로 취급되어야 합니다.
---
## 4. 인증은 싱크(Sink) 이전에 이루어져야 합니다
핵심 불변 조건은 다음과 같습니다:```text
UNTRUSTED REQUEST
↓
AUTHENTICATION
↓
AUTHORIZATION
↓
MCP TOOL
↓
ADB
절대:```text UNTRUSTED REQUEST ↓ MCP TOOL ↓ ADB
---
# 📊 취약점 요약
| 속성 | 값 |
| ------------------------ | ---------------------- |
| CVE | CVE-2026-73296 |
| 제품 | Microsoft UFO |
| 구성 요소 | Mobile MCP |
| 심각도 | Critical |
| CVSS | 9.4 |
| 공격 경로 | Network |
| 복잡성 | Low |
| 권한 | None |
| 사용자 상호작용 | None |
| 기밀성 | High |
| 무결성 | High |
| 가용성 | Low |
| CWE-306 | 누락된 인증 |
| CWE-862 | 누락된 권한 부여 |
| Data MCP | TCP/8020 |
| Action MCP | TCP/8021 |
| 영향받는 버전 | ≤ v3.0.7 |
| 공식 패치 버전 | 명시된 버전 없음 |
---
# 🏁 결론
CVE-2026-73296은 강력한 에이전트 자동화 인터페이스가 적절한 인증 및 권한 부여 경계 없이 네트워크에 노출될 때 발생하는 보안 위험을 보여줍니다.
취약한 Mobile MCP 아키텍처는 다음 경로를 생성합니다:```text
Unauthenticated Network Client
↓
MCP Server
↓
MCP Tools
↓
ADB
↓
Android Device
결과적 영향에는 화면/UI/기기 정보를 통한 기밀성 손실과 원격 Android UI 상호작용을 통한 무결성 영향이 모두 포함될 수 있습니다.
가장 중요한 방어 통제 수단은 다음과 같습니다:```text Authentication Authorization TLS Network isolation Least privilege Secure defaults Continuous monitoring Regression testing
---
# 📚 참고 자료
* Microsoft UFO 보안 권고 — CVE-2026-73296 / GHSA-24fq-m9rr-g3mm
* Microsoft UFO 저장소
* Microsoft UFO 릴리스 기록
* CWE-306 — 중요 기능에 대한 인증 누락
* CWE-862 — 권한 부여 누락
* CVSS v3.1
공식 Microsoft UFO 저장소:
https://github.com/microsoft/UFO
공식 보안 권고:
https://github.com/microsoft/UFO/security/advisories/GHSA-24fq-m9rr-g3mm
---
# ⚖️ 책임 있는 사용
이 프로젝트는 다음 용도로 제공됩니다:
* 공인된 침투 테스트
* 보안 연구
* CTF 환경
* 취약점 검증
* 방어 엔지니어링
* 보안 교육
* 탐지 개발
명시적 승인 없이 시스템이나 기기를 테스트하지 마십시오.
안전 검사기는 의도적으로 취약한 Mobile MCP 기능을 실제 Android 기기에서 실행하지 않도록 회피합니다.
---
<p align="center">
**CVE-2026-73296 • Microsoft UFO • Mobile MCP 보안 연구**
</p>
| 메트릭 | 값 |
|---|
| 공격 벡터 | 네트워크 |
| 공격 복잡성 | 낮음 |
| 필요한 권한 | 없음 |
| 사용자 상호작용 | 없음 |
| 범위 | 변경되지 않음 |
| 기밀성 | 높음 |
| 무결성 | 높음 |
| 가용성 | 낮음 |
-s-v-q-h