Новости · Безопасность файлов

.NET: три уязвимости CVSS 8.8 при разборе PDB-файлов — CVE-2026-69439, CVE-2026-71328, CVE-2026-69522

8 сентября 2026 года Microsoft выпустила плановое сентябрьское обновление безопасности .NET, закрыв три высокоопасные уязвимости в компоненте Microsoft.DiaSymReader.Native. Все три получили оценку CVSS 8.8 (High) и связаны с некорректным разбором PDB-файлов — файлов отладочных символов, которые загружают отладчики, IDE и CI/CD-системы при сборке и диагностике приложений.

Коротко: CVE-2026-69439 (Portable PDB, heap overflow), CVE-2026-71328 (MSFZ PDB, out-of-bounds write) и CVE-2026-69522 (PDB, out-of-bounds write) — все с CVSS 8.8 — позволяют выполнить код или повысить привилегии через вредоносный PDB-файл. Затронуты .NET 8, 9, 10, 11 RC1 на Windows. Фикс: .NET 8.0.31, 9.0.20, 10.0.12, пакет DiaSymReader.Native ≥ 18.9.0-beta1.26405.2.

12 сентября 2026 Редакция LoadFile Чтение 6 мин
Абстрактные потоки бинарного кода и иконка файла отладочных символов — уязвимости в .NET при разборе PDB
Содержание
  1. Что такое PDB-файлы и зачем они нужны
  2. Три CVE в Microsoft.DiaSymReader.Native
  3. Технические детали уязвимостей
  4. Кого затрагивают уязвимости
  5. Другие CVE в сентябрьском обновлении .NET
  6. Как обновиться: пошаговая инструкция
  7. Источники

Что такое PDB-файлы и зачем они нужны

PDB (Program Database) — это формат файлов отладочных символов, созданный Microsoft. PDB-файл содержит информацию, которая связывает скомпилированный машинный код с исходным кодом: имена переменных, адреса функций, нумерацию строк. Без PDB отладчик не может показать, в какой именно строке кода произошла ошибка — он видит только адреса в памяти.

Существуют два варианта формата. Windows PDB (MSFZ PDB) — традиционный формат для Visual C++ и классического .NET Framework, хранит символы в файлах .pdb рядом с .dll и .exe. Portable PDB — открытый кросс-платформенный формат, появившийся вместе с .NET Core: он более компактный и читается отладчиками на Linux и macOS. Оба формата обрабатывает один и тот же компонент — Microsoft.DiaSymReader.Native.

PDB-файлы регулярно загружаются автоматически: Visual Studio подтягивает их с Symbol Server Microsoft при отладке, JetBrains Rider делает то же самое, а CI/CD-системы (GitHub Actions, Azure Pipelines, TeamCity) используют их при анализе покрытия кода и краш-репортах. Именно этот сценарий делает уязвимости в парсере PDB особенно опасными: файл может прийти из внешнего источника и обработаться без явного действия разработчика.

Три CVE в Microsoft.DiaSymReader.Native

В сентябрьском патче от 8 сентября 2026 года Microsoft закрыла три уязвимости одним обновлением пакета Microsoft.DiaSymReader.Native до версии 18.9.0-beta1.26405.2:

CVECVSSТипЗатронутый формат
CVE-2026-694398.8 HighHeap-based Buffer Overflow (CWE-122)Portable PDB
CVE-2026-713288.8 HighOut-of-Bounds WriteMSFZ PDB (Windows)
CVE-2026-695228.8 HighOut-of-Bounds WritePDB (общий)

Все три уязвимости затрагивают исключительно Windows (платформонезависимый .NET на Linux и macOS не подвержен). Компонент DiaSymReader — нативная Windows-библиотека, унаследованная из экосистемы COM/ActiveX; именно она разбирает бинарные структуры PDB, когда отладчик или инструмент анализа запрашивает символы.

Технические детали уязвимостей

CVE-2026-69439 — наиболее изученная из трёх. Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H. Это означает — сетевая атака (AV:N), низкая сложность (AC:L), без предварительной аутентификации (PR:N), но требует взаимодействия пользователя (UI:R), например открытия решения в IDE или запуска отладчика.

Механизм: Portable PDB содержит переменно-длинные потоки данных. При парсинге поля длины DiaSymReader выполнял сужающее преобразование типа (например, из 32-бит в 16-бит), которое при определённых значениях «заворачивается» (integer wraparound) и приводит к записи за границей выделенного буфера в куче. Поскольку и длина, и содержимое записи контролируются атакующим через содержимое PDB-файла, это классическая heap corruption, а не просто падение программы.

CVE-2026-71328 действует аналогично, но на другой ветке кода — при разборе MSFZ PDB (Windows-native формат). Обе уязвимости сообщены независимо и закрыты одним и тем же исправлением в DiaSymReader.

Важно для оценки риска

Уязвимости классифицированы как Elevation of Privilege / Remote Code Execution, но для эксплуатации нужно заставить жертву открыть или загрузить вредоносный PDB-файл. На практике самый реалистичный вектор — подмена PDB на скомпрометированном Symbol Server или в артефактах сборки в CI/CD.

Кого затрагивают уязвимости

Уязвимы все, кто использует Microsoft.DiaSymReader.Native версий от 17.12.0-beta1.24603.5 до 18.9.0-beta1.26405.1 включительно на платформе Windows. Это включает:

  • Разработчиков на .NET 8, 9, 10 и 11 RC1, использующих Visual Studio, JetBrains Rider или VS Code с C#-расширениями — при открытии проектов с внешними символами.
  • CI/CD-пайплайны (GitHub Actions, Azure DevOps, TeamCity, Jenkins), в которых настроены инструменты анализа покрытия кода, профилирования или краш-репортинга.
  • Серверы сборки, которые подтягивают PDB-файлы из внешних Symbol Server-ов.
  • Приложения, явно ссылающиеся на пакет Microsoft.DiaSymReader.Native в своих зависимостях.

.NET на Linux и macOS данными CVE не затронут: компонент DiaSymReader.Native является Windows-only бинарным файлом и не входит в кросс-платформенные сборки.

Другие CVE в сентябрьском обновлении .NET

Помимо трёх PDB-уязвимостей, сентябрьский патч закрыл ещё несколько проблем:

  • CVE-2026-69304 — Denial of Service в ASP.NET Core через некорректную обработку сжатых данных. Атакующий без аутентификации может вызвать отказ в обслуживании по сети.
  • CVE-2026-58649 (CVSS 6.5 Medium) — раскрытие информации через некорректную проверку источника запроса. Требует взаимодействия пользователя.
  • CVE-2026-69806 (CVSS 7.0 High) — повышение привилегий в .NET через локальный вектор атаки с низкими исходными привилегиями.

Как обновиться: пошаговая инструкция

Способ обновления зависит от того, как развёртывается .NET в вашем окружении:

  1. Framework-dependent приложения. Обновите хост-рантайм до последней исправленной версии: .NET 8.0.31, .NET 9.0.20 или .NET 10.0.12. На Windows это делается через Windows Update или прямой загрузкой с официального сайта Microsoft.
  2. Self-contained приложения включают рантайм в свой дистрибутив. Их необходимо пересобрать против исправленного SDK и задеплоить заново — само по себе обновление рантайма на хосте не поможет.
  3. Docker-контейнеры. Пересоберите образы из обновлённых базовых образов Microsoft .NET (mcr.microsoft.com/dotnet/runtime:8.0 и аналогичных) — они уже содержат исправленный рантайм.
  4. Прямая ссылка на пакет. Если ваш проект явно зависит от Microsoft.DiaSymReader.Native, обновите версию до 18.9.0-beta1.26405.2 или выше в .csproj или Directory.Packages.props.
  5. Долгоработающие приложения (службы Windows, фоновые агенты) необходимо перезапустить после обновления, иначе они продолжат использовать ранее загруженные в память версии библиотек.

Проверить текущую установленную версию рантайма можно командой:

dotnet --list-runtimes

Для Visual Studio отдельное обновление выходит через канал VS Updates — ищите «September 2026 Security Release» в разделе Help → Check for Updates.

О других уязвимостях в файловой экосистеме сентября 2026 читайте в нашем разборе Patch Tuesday сентябрь 2026: уязвимости Word, Excel и RAW-файлов. Если вас интересует общая карта форматов, опасных при неаккуратном открытии, — смотрите карту опасных расширений на Loadfile.

Источники

Читайте также