원래 게시 날짜: 2025년 12월 9일
KB ID: 5074596
이 문서에서는 PowerShell 스크립트가 자동화 및 웹 콘텐츠 검색에 사용되는 엔터프라이즈 또는 IT 관리 환경에 주로 영향을 주는 변경 내용을 설명합니다. 개인 또는 홈 설정에서 디바이스를 사용하는 사람 일반적으로 IT 관리 환경 외부에서는 이러한 시나리오가 드물기 때문에 어떤 조치도 취할 필요가 없습니다.
|
날짜 변경 |
설명 변경 |
|
2025년 12월 20일 |
|
요약
이제 Windows PowerShell 5.1은 Invoke-WebRequest 명령을 사용하여 특수 매개 변수 없이 웹 페이지를 가져올 때 보안 확인 프롬프트를 표시합니다.
보안 경고: 스크립트 실행 위험 Invoke-WebRequest 웹 페이지의 콘텐츠를 구문 분석합니다. 웹 페이지의 스크립트 코드는 페이지를 구문 분석할 때 실행될 수 있습니다.
권장 작업: -UseBasicParsing 스위치를 사용하여 스크립트 코드 실행을 방지합니다.
계속하시겠습니까?
이 프롬프트는 페이지의 스크립트가 구문 분석 중에 실행 될 수 있음을 경고하고 스크립트 실행을 방지하기 위해 -UseBasicParsing 매개 변수를 사용하는 것이 좋습니다. 사용자는 작업을 계속하거나 취소하도록 선택해야 합니다. 이 변경은 잠재적으로 위험한 작업 전에 사용자 동의를 요구하여 악의적인 웹 콘텐츠로부터 보호하는 데 도움이 됩니다.
PowerShell의 Invoke-WebRequest 명령은 웹 서버에 대한 HTTP 또는 HTTPS 요청을 만들고 결과를 반환합니다. 이 문서에서는 Invoke-WebRequest 명령을 사용하여 특수 매개 변수 없이 웹 페이지를 가져올 때 Windows PowerShell 5.1에서 의도적으로 보안 확인 프롬프트를 표시하는 강화 변경 내용을 설명합니다. 이 동작은 지원되는 Windows 클라이언트 및 서버가 2025년 12월 9일 이후에 릴리스된 Windows 업데이트 설치한 후에 발생합니다. 자세한 내용은 CVE-2025-54100을 참조하세요.
변경된 내용
-
이전 동작
-
다운로드한 콘텐츠에서 스크립트를 실행할 수 있는 인터넷 Explorer 구성 요소(HTMLDocument 인터페이스(mshtml))를 사용하여 DOM(전체 문서 개체 모델) 구문 분석
-
-
새 동작
-
보안 확인 프롬프트: 2025년 12월 9일 또는 그 이후에 릴리스된 Windows 업데이트를 설치한 후 PowerShell 5.1에서 Invoke-WebRequest 명령(curl이라고도 함)을 실행하면 특별한 매개 변수가 사용되지 않는 경우 보안 프롬프트가 트리거됩니다. 스크립트 실행 위험에 대한 경고와 함께 PowerShell 콘솔에 프롬프트가 표시됩니다. 즉, PowerShell이 일시 중지되어 예방 조치 없이 웹 페이지 스크립트 콘텐츠가 처리될 때 시스템에서 실행될 수 있음을 경고합니다. 기본적으로 Enter 키를 누르거나 아니요를 선택하면 안전을 위해 작업이 취소됩니다. PowerShell은 보안 문제로 인해 취소되었다는 메시지를 표시하고 안전한 처리를 위해 -UseBasicParsing 매개 변수를 사용하여 명령을 다시 실행하도록 제안합니다. 예를 선택하면 PowerShell에서 이전 메서드(전체 HTML 구문 분석)를 사용하여 페이지를 구문 분석합니다. 즉, 콘텐츠와 포함된 스크립트가 예전처럼 로드됩니다. 기본적으로 예를 선택하면 위험을 받아들이고 이전과 같이 명령을 실행할 수 있으며 아니요(기본값)를 선택하면 사용자를 보호하기 위한 작업이 중지됩니다.
-
대화형 및 스크립팅된 사용: 이 프롬프트의 도입은 주로 대화형 사용에 영향을 줍니다. 대화형 세션에서 경고가 표시되고 응답해야 합니다. 자동화된 스크립트(예약된 작업 또는 CI 파이프라인과 같은 비대화형 시나리오)의 경우 이 프롬프트로 인해 입력을 기다리는 동안 스크립트가 중단될 수 있습니다. 이를 방지하려면 안전한 매개 변수(아래 참조)를 명시적으로 사용하도록 이러한 스크립트를 업데이트하여 수동 확인이 필요하지 않도록 하는 것이 좋습니다.
-
조치 취하기
Invoke-WebRequest 명령을 사용하는 대부분의 PowerShell 스크립트 및 명령은 거의 또는 전혀 수정하지 않고 계속 작동합니다. 예를 들어 콘텐츠만 다운로드하거나 응답 본문에서 텍스트 또는 데이터로 작동하는 스크립트는 영향을 받지 않으며 변경이 필요하지 않습니다.
이 변경의 영향을 받는 스크립트가 있는 경우 다음 방법 중 하나를 사용합니다.
콘텐츠를 가져오는 경우 Invoke-WebRequest 명령을 일반적으로 사용하는 경우(예: 파일 다운로드 또는 정적 텍스트 읽기) 고급 사이트 상호 작용 또는 HTML DOM 구문 분석에 의존하지 않는 경우 아무 작업도 필요하지 않습니다. 새 기본 동작은 더 안전합니다. 웹 콘텐츠에 포함된 스크립트는 사용자의 권한 없이 실행되지 않으며 대부분의 시나리오에 권장되는 구성입니다.
대화형 사용의 경우 새 보안 프롬프트에 아니요로 응답하거나 Enter 키를 눌러 기본값을 적용하고 -UseBasicParsing 매개 변수를 사용하여 명령을 다시 실행하여 콘텐츠를 안전하게 검색합니다. 이렇게 하면 페치된 페이지에서 스크립트 코드가 실행되지 않습니다. 웹 콘텐츠를 대화형으로 자주 가져오는 경우 명령에서 기본적으로 -UseBasicParsing 매개 변수를 사용하여 프롬프트를 완전히 건너뛰고 최대한의 안전을 보장하는 것이 좋습니다.
자동화된 스크립트 또는 예약된 작업의 경우 Invoke-WebRequest 호출에 -UseBasicParsing 매개 변수를 포함하도록 업데이트합니다. 그러면 프롬프트가 표시되지 않고 스크립트가 중단 없이 계속 실행되도록 안전한 동작을 미리 선택합니다. 이렇게 하면 향상된 보안을 유지하면서 업데이트 후 자동화가 원활하게 실행되도록 합니다.
-
-NoProfile 옵션으로 실행되는 스크립트의 경우: 스크립트에 Invoke-WebRequest 호출이 많이 발생하는 경우 스크립트 맨 위에 $PSDefaultParameterValues['Invoke-WebRequest:UseBasicParsing'] = $true 선언합니다.
-
-UseBasicParsing 매개 변수와 함께 Invoke-WebRequest를 사용하는 경우 인터넷 Explorer 구성 요소(HTMLDocument 인터페이스(mshtml))를 사용하여 DOM(전체 문서 개체 모델)을 구문 분석할 수 없습니다.
신뢰할 수 없거나 퍼블릭 웹 콘텐츠를 처리하고 HTML 구조 또는 양식을 처리해야 하는 스크립트 또는 자동화의 경우 장기적인 안전을 위해 리팩터링 하거나 업데이트하는 것이 좋습니다. PowerShell을 사용하여 잠재적으로 위험한 웹 페이지 스크립트를 구문 분석하고 실행하는 대신 다음을 수행할 수 있습니다.
-
대체 구문 분석 메서드 또는 라이브러리를 사용합니다(예: 스크립트를 실행하지 않는 정규식 또는 XML/HTML 구문 분석 라이브러리를 사용하여 웹 페이지 콘텐츠를 일반 텍스트 또는 XML로 처리).
-
인터넷 Explorer 엔진에 의존하지 않고 스크립트를 실행하지 않는 최신 PowerShell Core(버전 7.x 이상)를 사용하거나 콘텐츠를 보다 안전하게 처리하는 특수 웹 스크래핑 도구를 사용하여 웹 상호 작용에 대한 접근 방식을 현대화합니다. 인터넷 Explorer 더 이상 사용되지 않으므로 인터넷 Explorer 특정 기능에 대한 의존도를 제한합니다. 웹 콘텐츠가 안전하게 처리되는 환경에서 작동할 수 있도록 이러한 기능에 의존하는 스크립트의 일부를 다시 작성하도록 계획합니다.
-
PowerShell Core의 Invoke-WebRequest(버전 7.x 이상)는 인터넷 Explorer 구성 요소를 사용한 DOM 구문 분석을 지원하지 않습니다. 기본 구문 분석에서는 스크립트 실행 없이 콘텐츠를 안전하게 검색합니다.
-
-
리팩터링의 목표는 보안 위험에 노출되지 않고 필요한 기능을 달성하여 이 변경으로 인해 도입된 더 안전한 기본값을 수용하는 것입니다.
Invoke-WebRequest 명령의 전체 HTML 구문 분석 기능(예: 양식 필드와 상호 작용 또는 구조화된 데이터 스크래핑)을 사용해야 하고 웹 콘텐츠의 원본을 신뢰하는 경우 대/소문자별로 레거시 구문 분석 동작을 계속 진행할 수 있습니다. 대화형 세션에서 이는 단순히 확인 프롬프트에서 예를 선택하여 작업을 계속할 수 있도록 하는 것을 의미합니다. 이렇게 할 때마다 보안 위험에 대한 알림을 받게 됩니다. -UseBasicParsing 매개 변수 없이 계속하는 것은 웹 콘텐츠를 완전히 신뢰하는 시나리오(예: 사용자의 제어 하에 있는 내부 웹 애플리케이션 또는 알려진 안전한 웹 사이트)로 제한되어야 합니다.
중요: 이 방법은 이 업데이트가 완화하려는 자동 스크립트 실행의 위험을 다시 도입하기 때문에 신뢰할 수 없거나 퍼블릭 웹 콘텐츠에 대해 실행되는 스크립트에는 권장되지 않습니다. 또한 비대화형 자동화의 경우 프롬프트에 자동으로 동의할 수 있는 기본 제공 메커니즘이 없으므로 스크립트의 전체 구문 분석에 의존하는 것은 위험할 뿐만 아니라 권장되지 않습니다. 이 옵션은 임시 측정값으로만 사용합니다.
질문과 대답
대부분의 경우 파일을 다운로드하거나 웹 콘텐츠를 텍스트로 가져오는 스크립트는 계속 작동합니다. 프롬프트를 방지하려면 -UseBasicParsing 매개 변수를 추가합니다.
고급 HTML 구문 분석(예: 양식 또는 DOM)을 사용하는 스크립트는 구조화된 개체 대신 원시 데이터를 중단하거나 출력할 수 있습니다. 콘텐츠를 다르게 처리하려면 기본 구문 분석으로 전환하거나 스크립트를 수정해야 합니다.
항상 PowerShell 스크립트에서 Invoke-WebRequest 명령과 함께 -UseBasicParsing 매개 변수를 사용하여 안전하고 비대화형 실행을 보장합니다.
예. 레거시 구문 분석에 따라 스크립트를 업데이트하여 옵트인하거나 리팩터링해야 합니다.
PowerShell의 변경 내용은 표준 업데이트와 핫패치 업데이트 모두에 적용되므로 동일한 동작이 변경됩니다.
예. PowerShell 7은 기본적으로 보안 구문 분석을 이미 사용하고 있습니다.
지원 플랜은 모듈 소유자에게 문의하세요. 마이그레이션하는 동안 신뢰할 수 있는 콘텐츠에 대해 일시적으로 옵트인을 사용합니다.
이 변경 사항을 준비하고 유효성을 검사하려면 다음을 수행하는 것이 좋습니다.
-
DOM 기능을 사용하여 스크립트를 식별합니다.
-
새 기본값으로 자동화를 테스트합니다.
-
레거시 옵트인을 신뢰할 수 있는 원본으로 제한합니다.
-
신뢰할 수 없는 콘텐츠에 대한 리팩터링을 계획합니다.