Skip to content

fix(ci): pip-audit 예외 — mcp 1.29.0 새 권고 3건(CVE-2026-116684·116685·116686), semgrep 정확 핀이라 버전 업 불가 · 도달 불가 - #1778

Merged
xzawed merged 1 commit into
mainfrom
fix/pip-audit-mcp-1-29-advisories
Oct 28, 2026
Merged

xzawed merged 1 commit into
mainfrom
fix/pip-audit-mcp-1-29-advisories

Conversation

@xzawed

@xzawed xzawed commented Oct 28, 2026

Copy link
Copy Markdown
Owner

pytest tests/unit → 8615 passed / 4 skipped

왜 지금 (required check 가 모든 PR 을 막는다)

2026-10-28 mcp 1.29.0 에 새 권고 3건이 올라와 required pip-audit 가 의존성을 건드리지 않은 PR 까지 전부 red 다(#1776 에서 처음 관측). mcp==1.29.0 은 semgrep 이 정확 핀으로 강제하는 전이 의존이고, 최신 semgrep 1.182.1 도 같은 핀이라 버전 업으로는 풀리지 않는다(#1733 에서 10-28 재확인). CVE-2026-59951(#1752)과 같은 처리다.

ID 권고 전제(«Am I affected») 우리 쪽
CVE-2026-116685 MCP 클라이언트를 HTTP 로(streamable_http_client·streamablehttp_client·sse_client·ClientSessionGroup·create_mcp_http_client) semgrep 1.181.0 소스에 그 API 0건 · 앱은 mcp 를 import 하지 않는다
CVE-2026-116686 MCP 클라이언트(ClientSession·ClientSessionGroup)로 남의 서버 도구 호출 위와 같음 — 0건
CVE-2026-116684 SDK 의 HTTP 서버 bearer 인증(AuthSettings+token_verifier) semgrep 안에서 semgrep mcp 하위 명령에만 있다. 우리는 semgrep scan 만 하위 프로세스로 부른다(src/analyzer/io/tools/semgrep.py)

확인 방법: semgrep 1.181.0 sdist 를 받아 grep(실행하지 않음) — mcp import 는 semgrep/commands/mcp.py·semgrep/mcp/** 뿐. semgrep/cli.py 가 시작 시 semgrep.commands.mcp 를 import 해 명령을 등록하지만, 그 코드는 mcp 하위 명령일 때만 돈다.

바꾼 것

.github/workflows/ci.yml pip-audit 스텝에 --ignore-vuln 3개 + 근거·재검토 조건 주석(기존 두 예외와 같은 형식). 재검토 조건: semgrep 이 mcp>=1.30.0 을 허용하면 CVE-2026-59951 과 함께 삭제 · 우리가 MCP 클라이언트를 쓰거나 semgrep mcp(또는 SDK HTTP 서버 인증)를 띄우면 즉시 삭제. 추적은 #1733 표에 함께 올린다.

증거

  • 로컬 pip_audit -r requirements.txt -r requirements-dev.txt(pip-audit 2.10.1, CI 와 같은 판): 새 세 ID 를 넣으면 No known vulnerabilities found, 5 ignored · exit 0, 빼면 정확히 mcp 3건 · exit 1. (Windows 는 PYTHONUTF8=1 이 있어야 requirements 의 UTF-8 주석을 읽는다 — 로컬 실행 함정.)
  • ci.yml 을 읽는 단위 시험 32파일: 629 passed / 4 skipped.

Grok claim-review

  • session: f14680c5-bf1e-45bb-853f-ccb6f8135f5f
  • claim: 권고 3건의 «영향받는 조건» 원문과 우리 배치 사실(앱 mcp import 0 · semgrep scan 하위 프로세스만 · semgrep 소스의 클라이언트 API 0 · 서버 인증은 semgrep mcp 하위 명령뿐 · cli.py 의 시작 시 import)만으로는 셋 다 도달 불가
  • verdict: SURVIVES

사람이 볼 것

  1. 머지 순서 — 이 PR 이 먼저다. 그 뒤 열린 PR(fix(a11y): 머리글 메뉴·분석 이력 표를 키보드로 조작한다 — role="menu" 키 계약 · 언어 변경 포커스 복귀 · 행 링크·정렬 버튼 (#1746 K15) #1776 · fix(hooks): Bash 보호경로 탐지 훅의 억제가 «이 세션 · 이 내용» 까지만 — 한 번 알린 경로가 클론 수명 내내 침묵하던 것 (#1746 K16) #1777 · Dependabot 4건)의 pip-audit 를 다시 돌리면(gh run rerun --failed) 초록이 된다.
  2. 예외가 이제 5개다. 세 ID 는 같은 semgrep 핀 하나에서 나왔으므로 semgrep 이 핀을 풀면 CVE-2026-59951 과 함께 한 번에 지운다.

스스로 판단한 것

  • 예외 대신 semgrep 을 빼거나 --no-deps 감사로 바꾸는 길은 택하지 않았다 — 앞쪽은 분석기 하나를 잃고, 뒤쪽은 전이 의존 전체를 감사에서 뺀다.

🤖 Generated with Claude Code

https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX

…686), semgrep 정확 핀이라 버전 업 불가 · 도달 불가

required pip-audit 가 의존성을 건드리지 않은 PR 까지 전부 막고 있었다. 116685·116686 은 MCP 클라이언트가
전제인데 semgrep 1.181.0 소스와 앱에 클라이언트 사용이 없고, 116684 는 SDK HTTP 서버 bearer 인증이 전제인데
그 코드는 `semgrep mcp` 하위 명령뿐이다(우리는 `semgrep scan` 만 부른다). semgrep 이 mcp>=1.30 을 허용하면
CVE-2026-59951 과 함께 지운다.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R4jYRzichV75XnYLSEFguX
@xzawed

xzawed commented Oct 28, 2026

Copy link
Copy Markdown
Owner Author

⚠️ AI 리뷰가 완전 검증되지 않음 — 기본값이 적용됐습니다(비활성/API 키 없음/빈 diff). AI 배점은 측정값이 아니므로 총점을 부분 점수로 보세요.

🔴 SCAManager 분석 결과

총점: 44/100 (등급 F)

점수 상세

항목 점수 만점
커밋 메시지 13 15
코드 품질 0 25
보안 0 20
구현 방향성 (AI) 21 25
테스트 10 15

정적 분석 이슈 (상위 10건)

  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:35)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:102)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:107)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:166)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:171)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:272)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:275)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:322)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:325)
  • [semgrep] GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135`. (.github/workflows/ci.yml:330)

@codecov

codecov Bot commented Oct 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant