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

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

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

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

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

Категории

Все категории
Loading categories
Python-Example — Пример Seal Security — уязвимое pip-приложение (PyYAML CVE-2020-14343), исправленное до sealed-версий; интеграция GitHub Actions + Jenkins | Kitploit
Инструменты/GitHubGitHub/seal-sec-demo-2/python-example
Анализ уязвимостейАнализ КодаDevSecOpsБезопасность Цепочки ПоставокОбучение и Образование
GitHubseal-sec-demo-2/python-example

Python-Example

Пример Seal Security — уязвимое pip-приложение (PyYAML CVE-2020-14343), исправленное до sealed-версий; интеграция GitHub Actions + Jenkins

Репозиторий
1 месяц назадЕщё не проверено

Популярное

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

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

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

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

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

Seal Security — пример для Python (pip)

Минимальное намеренно уязвимое Flask-приложение, которое используется для сквозной демонстрации того, как Seal Security устраняет известную CVE, заменяя уязвимую зависимость на запечатанную (с бэкпортом исправления, готовую к замене) версию — без изменения ваших объявленных зависимостей или вашего кода.

Оно задумано как сквозной смоук-тест для Seal CLI в CI/CD: запустите приложение, воспроизведите реальную эксплуатацию уязвимости, запустите Seal и наблюдайте, как та же атака блокируется.


Что демонстрирует этот пример

ЭкосистемаPython / pip
Уязвимый пакетPyYAML==5.1
CVECVE‑2020‑14343 — yaml.load / FullLoader десериализация → произвольное выполнение кода
Запечатанная (исправленная) версияpyyaml 5.1+sp1 из PyPI-реестра Seal
ИнтеграцияSeal CLI как один шаг сборки — показано для GitHub Actions и Jenkins

Как работает эксплуатация уязвимости

Страница приветствия принимает параметр name и разбирает его с помощью загрузчика PyYAML по умолчанию:

root@kitploit:~
parsed = yaml.load(name)   # PyYAML 5.1 → unsafe FullLoader (CVE-2020-14343)

В PyYAML 5.1 yaml.load() без явного SafeLoader использует FullLoader, который может создавать произвольные объекты Python из недоверенного ввода. Атакующий отправляет YAML-полезную нагрузку, которая выполняет произвольный код Python на сервере.

Обычный запрос

root@kitploit:~
/?name=alice          →  Welcome, alice!

Эксплуатирующий запрос — передайте этот YAML как name (в логах workflow он уже URL‑закодирован):

root@kitploit:~
!!python/object/apply:tuple [!!python/object/apply:map [!!python/name:eval , ["__import__('subprocess').check_output(['id']).decode()"]]]

Уязвимый PyYAML десериализует и выполняет полезную нагрузку, приложение показывает страницу “You've been pwned”, а затем сервер убивается (через несколько секунд, чтобы страница успела отобразиться). При перезагрузке приложение исчезает — через ngrok вы увидите страницу “endpoint offline”.


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

root@kitploit:~
.
├── app.py                         # the vulnerable Flask app
├── requirements.txt               # declares PyYAML==5.1
├── Jenkinsfile                    # example Jenkins (Groovy) pipeline with the Seal stage
└── .github/workflows/
    ├── build-and-run.yml          # run + expose the app for browser testing
    └── seal-security.yml          # run Seal remediation, then start the app

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

Seal — это SaaS, размещаемый компанией Seal — в вашем окружении ничего не устанавливается, а весь трафик — только исходящий HTTPS по TCP 443. Для запуска устранения уязвимости вам понадобятся:

Секрет / учётные данные

Настройте их в Settings → Secrets and variables → Actions (GitHub) или Manage Jenkins → Credentials (Jenkins). Никогда не коммитьте токены в репозиторий.

Добавьте следующие хосты Seal в белый список для исходящих соединений на порт 443: app.sealsecurity.io, authorization.sealsecurity.io, cli.sealsecurity.io и — для запечатанных pip-пакетов — pypi.sealsecurity.io. Бинарный файл CLI загружается с github.com / objects.githubusercontent.com.


Локальный запуск

root@kitploit:~
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python app.py               # → http://localhost:5000

Откройте http://localhost:5000/?name=alice (работает), затем передайте указанную выше эксплуатирующую полезную нагрузку в качестве name — приложение покажет "You've been pwned", и через несколько секунд сервер будет убит.


Устранение уязвимости с помощью Seal

Seal CLI выполняется как один дополнительный шаг — после pip install и до упаковки. Он сканирует разрешённые зависимости и заменяет уязвимые на их запечатанные версии, используя удалённый режим исправления (политика управляется централизованно в интерфейсе Seal).

Вариант A — GitHub Actions

Использует seal-community/cli-action:

root@kitploit:~
- uses: seal-community/cli-action@latest
  with:
    mode: fix
    fix_mode: remote
    token: ${{ secrets.SEAL_TOKEN }}
    target: requirements.txt      # the manifest for this ecosystem

Запустите его через Actions → “Seal Security Remediation” → Run workflow. См. .github/workflows/seal-security.yml.

Вариант B — Jenkins (Groovy pipeline)

Одна добавленная стадия — после установки и до упаковки. См. Jenkinsfile:

root@kitploit:~
stage('Seal') {
  steps {
    sh '''
      curl -fsSL https://github.com/seal-community/cli/releases/download/latest/seal-linux-amd64-latest -o seal
      chmod +x seal
      ./seal fix --mode remote "$SEAL_MANIFEST"   # SEAL_MANIFEST=requirements.txt
    '''
  }
}

SEAL_TOKEN берётся из учётных данных Jenkins seal-token; задайте SEAL_PROJECT равным вашему Project ID в Seal.


Что меняет Seal

После seal fix уязвимая зависимость разрешается в запечатанную сборку из PyPI-реестра Seal — тот же пакет с бэкпортированным исправлением безопасности:

ЗависимостьДоПосле (запечатанная версия)
PyYAML5.15.1+sp1

Запечатанная версия — это тот же пакет с бэкпортированным исправлением безопасности: готовая к замене (drop‑in) версия, без изменений кода и без обновления до новой мажорной версии.

Проверка исправления

Повторно запустите эксплойт против исправленного приложения. Запечатанный PyYAML отказывается создавать вредоносные объекты, поэтому yaml.load выбрасывает исключение вместо выполнения полезной нагрузки, и приложение отвечает “Invalid input — payload rejected.” Обычные имена по-прежнему работают.


Как добавить Seal в свой проект

  1. Добавьте один шаг в свой конвейер — после установки зависимостей и до упаковки.
  2. Укажите seal fix на конкретный манифест — requirements.txt для pip. Для репозитория с несколькими манифестами/lock-файлами запускайте по одному seal fix на каждый манифест.
  3. Используйте удалённый режим исправления, чтобы ваша команда безопасности управляла политикой устранения уязвимостей централизованно в интерфейсе Seal — в репозиторий ничего не коммитится.
  4. Передайте токен Seal через хранилище секретов CI (секрет GitHub / учётные данные Jenkins).

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

Скачать инструмент
Назначение
Где указывается
Seal tokenАутентификация Seal CLIсекрет GitHub Actions SEAL_TOKEN / учётные данные Jenkins "Secret text" seal-token
ngrok token (необязательно)Открытие запущенного приложения в браузере для тестированиясекрет GitHub Actions NGROK_TOKEN