Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2020-14343-lab — Контролируемая лаборатория исследования и воспроизведения уязвимости CVE-2020-14343 в PyYAML | Kitploit
Инструменты/GitHubGitHub/saina15/cve-2020-14343-lab
Сканеры уязвимостейБезопасность контейнеровДинамический анализ (песочница)Анализ уязвимостейЭксплуатацияВиртуализация для безопасностиТестирование на ПроникновениеСтатьи и ИсследованияОбучение и ОбразованиеЛаборатории и Практика
331 месяц назадЕщё не проверено
GitHub
saina15/cve-2020-14343-lab

cve-2020-14343-lab

Контролируемая лаборатория исследования и воспроизведения уязвимости CVE-2020-14343 в PyYAML

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2020-14343 – Лаборатория небезопасной загрузки YAML в PyYAML

1. Обзор проекта

Этот проект демонстрирует CVE-2020-14343 в контролируемой и изолированной среде Docker.

Лаборатория содержит две среды:

  • Уязвимая среда, использующая PyYAML 5.3.1
  • Исправленная среда, использующая PyYAML 5.4 и yaml.safe_load()

Лаборатория демонстрирует полный жизненный цикл уязвимости:

  1. Разверните уязвимое приложение.
  2. Определите уязвимую версию PyYAML.
  3. Воспроизведите уязвимость с помощью контролируемой полезной нагрузки YAML.
  4. Обнаружьте уязвимую версию с помощью автоматизированного скрипта.
  5. Обновитесь до исправленной версии.
  6. Проверьте ту же полезную нагрузку на исправленном приложении.
  7. Убедитесь, что вредоносный YAML отклоняется.

Полезная нагрузка для воспроизведения, используемая в этой лаборатории, намеренно безвредна и лишь выводит тестовый маркер.

2. Информация о CVE

СвойствоДетали
CVECVE-2020-14343
ПродуктPyYAML
Уязвимые версииВерсии до 5.4
Исправленная версия5.4
Тип уязвимостиНекорректная проверка входных данных (CWE-20)
КритичностьКритическая
Поверхность атакиВходные данные YAML, обрабатываемые с использованием уязвимой функциональности загрузки
CVSS9.3 (CVSS v4, GitHub Advisory)

Первопричина

Уязвимость возникает, когда недоверенные входные данные YAML обрабатываются с использованием уязвимой функциональности загрузки PyYAML.

Версии PyYAML до 5.4 допускали специально сформированные теги YAML, включая специфичные для Python теги, такие как:

!!python/object/new

для доступа к функциональности конструирования объектов при использовании FullLoader.

Таким образом, вредоносный YAML-документ может вызвать непреднамеренное выполнение Python-кода.

Проблема была связана с неполным исправлением более ранней уязвимости PyYAML.

PyYAML 5.4 исправил CVE-2020-14343, переместив произвольные Python-теги в UnsafeLoader.

Для приложений, обрабатывающих недоверенный YAML, в этой лабораторной работе также используется yaml.safe_load() как безопасный подход к загрузке.

3. Архитектура лабораторной работы

Лабораторная работа содержит два изолированных Docker-сервиса:

                         Host Machine
                              |
                 +------------+------------+
                 |                         |
                 v                         v
          Vulnerable App             Patched App
          localhost:5000             localhost:5001
                 |                         |
            PyYAML 5.3.1             PyYAML 5.4
            FullLoader               SafeLoader
                 |                         |
                 v                         v
          Payload executes          Payload rejected

Сервисы

СервисПорт хостаПорт контейнераPyYAMLНазначение
vulnerable500050005.3.1Уязвимая среда
patched500150005.4Исправленная среда

4. Структура репозитория

cve-2020-14343-lab/
├── vulnerable/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
├── patched/
│   ├── app.py
│   ├── Dockerfile
│   └── requirements.txt
├── exploit/
│   └── reproduce.py
├── detection/
│   └── detect.py
├── screenshots/
│   ├── 01-docker-compose-running.png
│   ├── 02-vulnerable-detection.png
│   ├── 03-patched-detection.png
│   ├── 04a-vulnerable-request.png
│   ├── 04b-vulnerable-execution-log.png
│   └── 05-patched-exploit-blocked.png
├── blog/
│   └── CVE-2020-14343-Technical-Blog.pdf
├── docker-compose.yml
├── README.md
└── .gitignore

Описание каталогов

Файл/КаталогНазначение
vulnerable/app.pyFlask-приложение, использующее уязвимую загрузку YAML
vulnerable/DockerfileСобирает уязвимый Docker-образ
vulnerable/requirements.txtФиксирует PyYAML на версии 5.3.1
patched/app.pyFlask-приложение, использующее безопасную загрузку YAML
patched/DockerfileСобирает исправленный Docker-образ
patched/requirements.txtФиксирует PyYAML на версии 5.4
exploit/reproduce.pyВоспроизводит уязвимость с использованием контролируемой полезной нагрузки
detection/detect.pyПроверяет версию PyYAML внутри Docker-контейнера
docker-compose.ymlСобирает и запускает оба окружения
screenshots/Содержит доказательства, собранные в ходе лабораторной работы
blog/Содержит PDF технического блога объёмом 800–1200 слов

5. Предварительные требования

Требуется следующее программное обеспечение:

  • Docker Desktop
  • Docker Compose
  • Python 3.x
  • Git

Перед началом лабораторной работы Docker Desktop должен быть запущен.

Уязвимое приложение намеренно доступно только на локальной машине через проброс портов Docker.

6. Настройка лабораторной среды

Шаг 1: Запуск лабораторной среды

Из корневого каталога проекта выполните:

docker compose up --build -d

Шаг 2: Проверка контейнеров

Выполните:

docker compose ps

Оба сервиса должны отображать Up.

Шаг 3: Проверка уязвимого приложения

Откройте:

http://127.0.0.1:5000

I'm ready to translate chunk 13, but no content was included in your message — the INPUT section is empty.

Please paste the actual Markdown text for chunk 13, and I'll return the Russian translation with all structure, code, and formatting preserved exactly.

{
  "message": "CVE-2020-14343 vulnerable YAML parser"
}

Шаг 4: Проверка исправленного приложения

Откройте:

http://127.0.0.1:5001

I'm ready to translate chunk 13, but no content was included in your message — the INPUT section is empty.

Please paste the actual Markdown text for chunk 13, and I'll return the Russian translation with all structure, code, and formatting preserved exactly.

{
  "message": "CVE-2020-14343 patched YAML parser"
}

7. Запуск, остановка и пересборка лаборатории

Запуск

docker compose up -d

Остановка

docker compose down

Сборка и запуск

docker compose up --build -d

Проверка запущенных служб

docker compose ps

Просмотр журналов уязвимых приложений

docker logs cve-vulnerable

Просмотр журналов исправленного приложения

docker logs cve-patched

8. Воспроизведение уязвимости

Уязвимое приложение предоставляет эндпоинт /parse, который принимает входные данные в формате YAML.

В уязвимой среде используются:

  • PyYAML 5.3.1
  • yaml.FullLoader

Скрипт воспроизведения находится по адресу:

exploit/reproduce.py

Запуск эксплойта

Уязвимое приложение доступно по адресу:

http://127.0.0.1:5000/parse

Запуск:

python exploit/reproduce.py

Скрипт отправляет контролируемую полезную нагрузку YAML, содержащую специфичный для Python тег YAML.

Ожидаемый результат

В уязвимой среде полезная нагрузка принимается, и приложение возвращает HTTP-ответ 200.

Контролируемый тестовый маркер:

CVE-2020-14343-TEST

выполняется внутри контейнера уязвимого приложения.

Выполнение можно проверить с помощью:

docker logs cve-vulnerable

Ожидаемый вывод журнала включает:

CVE-2020-14343-TEST

Это демонстрирует выполнение кода через уязвимое поведение загрузки YAML.

Безопасность

Воспроизводящая полезная нагрузка намеренно безвредна. Она только выводит тестовый маркер и не изменяет хост-систему, не получает доступ к учётным данным, не обращается к конфиденциальным данным, не взаимодействует с внешними системами и не выполняет деструктивных действий.

9. Обнаружение уязвимости

Скрипт обнаружения расположен по адресу:

detection/detect.py

Скрипт проверяет версию PyYAML, установленную внутри указанного Docker-контейнера.

Исправленная версия:

5.4

Обнаружение уязвимой среды

Выполните:

python detection/detect.py cve-vulnerable
Скачать инструмент