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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-42897 — CVE-2026-42897 - Exchange Health Checker 블라인드 스팟: 아웃바운드 IIS URL 재작성 규칙이 자동으로 무시되어 진단 보고서에서 EOMT 완화 조치가 보이지 않게 됩니다. | Kitploit
도구/GitHubGitHub/atiilla/cve-2026-42897
Cloud Infrastructure SecurityVulnerability AnalysisConfiguration AuditingWeb SecurityMisconfigurationLearning & Education
GitHubatiilla/cve-2026-42897

CVE-2026-42897

CVE-2026-42897 - Exchange Health Checker 블라인드 스팟: 아웃바운드 IIS URL 재작성 규칙이 자동으로 무시되어 진단 보고서에서 EOMT 완화 조치가 보이지 않게 됩니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42897 - Exchange Health Checker 아웃바운드 재작성 규칙 사각 지대

심각도: 중간 (CVSS 5.3) 구성 요소: Microsoft CSS-Exchange - HealthChecker 진단 도구 영향을 받는 파일:

  • Diagnostics/HealthChecker/Analyzer/Get-URLRewriteRule.ps1 (L49, L72, L97)
  • Diagnostics/HealthChecker/Analyzer/Invoke-AnalyzerIISInformation.ps1 (L442–459) 보고됨: 2026-05-15 크레딧: CSS-Exchange 이슈 #2539를 보고한 연구자가 발견 참고자료:
  • CSS-Exchange GitHub: Get-URLRewriteRule.ps1, Invoke-AnalyzerIISInformation.ps1
  • EOMT 완화 스크립트: Security/src/EOMT/Mitigations/CVE-2026-42897.ps1 (L147–254)

요약

Exchange Health Checker(HealthChecker.ps1)는 서버 구성 감사의 일부로 IIS URL 재작성 규칙을 보고합니다. 그러나 규칙 열거 함수인 Get-URLRewriteRule.ps1은 인바운드 규칙(system.webServer/rewrite/rules)만 읽고 아웃바운드 규칙(system.webServer/rewrite/outboundRules)은 자동으로 무시합니다.

CVE-2026-42897에 대한 EOMT(Exchange On-premises Mitigation Tool) 완화 조치는 EOMT OWA CSP - outbound라는 콘텐츠 보안 정책 헤더 삽입 규칙을 IIS 아웃바운드 URL 재작성 규칙으로 배포합니다. Health Checker는 outboundRules를 절대 읽지 않기 때문에 이 완화 규칙은 Health Checker 보고서에서 완전히 보이지 않습니다.

EOMT 완화 조치가 적용되었는지 확인하기 위해 Health Checker에 의존하는 Exchange 관리자는 아웃바운드 CSP 규칙이 없는 보고서를 받게 됩니다. 이는 완화 상태에 대한 오탐지를 제공하여, 완화 조치가 없어 노출되었다는 잘못된 인식을 주거나 반대로 완화 조치가 적용되었음에도 적용되지 않은 것으로 잘못된 확신을 심어줍니다.


취약점 상세 정보

근본 원인

Get-URLRewriteRule.ps1의 세 가지 서로 다른 코드 경로 모두 .rewrite.rules만 읽습니다.

경로 1 - web.config 파싱 (L49):

root@kitploit:~
$rules = $content.configuration.'system.webServer'.rewrite.rules

경로 2 - applicationHost.config 위치별 (L72):

root@kitploit:~
$rules = $location.'system.webServer'.rewrite.rules

경로 3 - applicationHost.config 전역 (L97):

root@kitploit:~
$rules = $ApplicationHostConfig.configuration.'system.webServer'.rewrite.rules

이 경로 중 어느 것도 .rewrite.outboundRules에 접근하지 않습니다. 반환된 $rules 객체는 Invoke-AnalyzerIISInformation.ps1 (L442–459)에서 반복됩니다.

root@kitploit:~
$displayRewriteRules = ($currentRewriteRules.rule | Where-Object { $_.enabled -ne "false" }).name |
    Where-Object { $_ -notcontains $excludeRules }

.rule 멤버는 인바운드 <rules> 컬렉션에만 존재합니다. outboundRules가 읽히더라도 표시 로직이 두 컬렉션에서 .rule을 반복하도록 업데이트되어야 합니다.

영향을 받는 IIS XML 구조

IIS는 URL 재작성 구성을 <rewrite> 아래에 두 개의 개별 자식 요소로 저장합니다.

root@kitploit:~
<system.webServer>
  <rewrite>
    <!-- 인바운드 - Health Checker가 읽는 부분 -->
    <rules>
      <rule name="Redirect to HTTPS" enabled="true">
        <match url=".*" />
        <conditions><add input="{HTTPS}" pattern="^OFF$" /></conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" />
      </rule>
    </rules>

    <!-- 아웃바운드 - Health Checker에서 보이지 않음 -->
    <outboundRules>
      <rule name="EOMT OWA CSP - outbound" enabled="true">
        <match serverVariable="RESPONSE_Content-Security-Policy" pattern=".*" />
        <action type="Rewrite"
                value="default-src 'self'; script-src 'self' 'unsafe-inline';
                       style-src 'self' 'unsafe-inline';" />
      </rule>
    </outboundRules>
  </rewrite>
</system.webServer>

영향

시나리오결과
EOMT 적용 후 Health Checker 실행보고서에 아웃바운드 CSP 규칙이 없음 → 관리자가 완화 조치가 누락되었다고 판단
관리자가 유일한 감사 도구로 Health Checker 사용IIS 구성을 수동으로 검사하지 않고는 EOMT 아웃바운드 규칙을 확인할 수 없음
사고 대응 / 규정 준수 점검완화 조치 증거가 Health Checker 출력에 없음
Health Checker JSON을 구문 분석하는 자동화된 모니터링아웃바운드 규칙의 존재/부재가 절대 표시되지 않음

개념 증명

이 디렉터리의 poc_cve_2026_42897.ps1을 참조하십시오.

이 스크립트는:

  1. 인바운드 규칙과 EOMT EOMT OWA CSP - outbound 아웃바운드 규칙이 모두 포함된 인메모리 모의 web.config XML을 생성합니다.
  2. 취약한 Health Checker 파싱 로직(인바운드 전용)을 실행하고 그 출력을 보여줍니다.
  3. 패치된 파싱 로직(인바운드 + 아웃바운드)을 실행하고 차이점을 보여줍니다.
  4. 세 가지 구성 경로(web.config, applicationHost 위치별, applicationHost 전역)를 모두 재현합니다.
root@kitploit:~
.\poc_cve_2026_42897.ps1

취약한(패치되지 않은) Health Checker에서 예상되는 출력:

root@kitploit:~
[*] Vulnerable path (inbound only):
    Rules found: Redirect to HTTPS
    MISSING: EOMT OWA CSP - outbound

[*] Patched path (inbound + outbound):
    Rules found: Redirect to HTTPS, EOMT OWA CSP - outbound
    Outbound rule visible: TRUE

수정 방법

Get-URLRewriteRule.ps1 수정 - 각 경로에서 두 컬렉션을 모두 읽습니다.

root@kitploit:~
# web.config (L49)
$inbound  = $content.configuration.'system.webServer'.rewrite.rules
$outbound = $content.configuration.'system.webServer'.rewrite.outboundRules
$rules    = @{ inbound = $inbound; outbound = $outbound }

# applicationHost.config per-location (L72)
$inbound  = $location.'system.webServer'.rewrite.rules
$outbound = $location.'system.webServer'.rewrite.outboundRules
$rules    = @{ inbound = $inbound; outbound = $outbound }

# applicationHost.config global (L97)
$inbound  = $ApplicationHostConfig.configuration.'system.webServer'.rewrite.rules
$outbound = $ApplicationHostConfig.configuration.'system.webServer'.rewrite.outboundRules
$rules    = @{ inbound = $inbound; outbound = $outbound }

Invoke-AnalyzerIISInformation.ps1 수정 - 두 컬렉션을 모두 반복합니다.

root@kitploit:~
$displayRewriteRules = @()
$displayRewriteRules += ($currentRewriteRules.inbound.rule  |
    Where-Object { $_.enabled -ne "false" }).name |
    Where-Object { $_ -notcontains $excludeRules }
$displayRewriteRules += ($currentRewriteRules.outbound.rule |
    Where-Object { $_.enabled -ne "false" }).name |
    Where-Object { $_ -notcontains $excludeRules }

타임라인

날짜이벤트
2026-05-15EOMT 배포 확인 연구 중 문제 발견
2026-05-15PoC 작성 및 모의 IIS 구성에 대해 테스트 완료

승인된 보안 연구 전용입니다. 반드시 통제된 실험실 환경에서만 테스트하십시오.

도구 다운로드