Перейти к основному содержимому

Меню команд

Перейти на страницу или искать в каталоге

ИИ-инструменты и скрипты

Проверка безопасности Azure Pipelines

Проверяет azure-pipelines.yml и его шаблоны: секреты в YAML, сообщения коммитов и имена веток PR, вставленные в скрипты, curl | bash, выведенные из эксплуатации образы и задачи, persistCredentials и репозитории шаблонов, привязанные к ветке.

$5.00

Что вы получите: 1 файл · 44.25 KB · ZIP

Варианты покупки

Описание товара

Шаг, выполняющий echo "Building $(Build.SourceVersionMessage)", выглядит безобидно, но Azure Pipelines подставляет сообщение коммита в скрипт ещё до запуска bash, поэтому сообщение коммита с кавычкой или $( ) выполнится как команда на вашем агенте, рядом с вашими секретами. Пайплайн, который всё ещё использует vmImage: windows-2019, перестал работать, когда этот образ удалили 31 декабря 2025 года, а CmdLine@1, PowerShell@1, Maven@2 и ещё 70 версий задач выводятся из эксплуатации 24 ноября 2026 года и удаляются 15 марта 2027 года. Этот навык находит такие проблемы и другие ошибки Azure Pipelines, перечисленные ниже, и подсказывает, как исправить каждую из них.

Ваш агент запускает сканер для azure-pipelines.yml, файлов в .azure-pipelines/ и .azuredevops/, а также для каждого YAML-файла, ключи верхнего уровня и шаги которого относятся к Azure Pipelines, поэтому проверяются и шаблоны шагов, заданий, стадий, переменных и extends, включая хранящиеся в build/ и подключаемые пайплайном. Файлы GitHub Actions, GitLab CI, Compose и Kubernetes пропускаются. Сканер понимает макросинтаксис $(var), шаблонные выражения ${{ }} и выражения времени выполнения $[ ], считает безопасными значения, переданные через env:, и отслеживает внутри файла переменные, построенные из недоверенных значений. Он никогда не запускает пайплайн или скрипт и никогда не обращается к сети. Результат: BLOCK, REVIEW или NOT FLAGGED с указанием файла, строки, причины и более безопасного подхода. Секреты никогда не выводятся.

Что проверяется

BLOCK (исправить до выпуска)

  • A01: пароли, токены и ключи, записанные литералами: переменные или записи env с секретными именами, входные параметры задач, например keystorePass, значения параметров по умолчанию, пароли в URL или строках подключения, заголовки Bearer, флаги --token, curl -u user:pass, docker/az login -p, sqlcmd -P, PowerShell $password = '...', -Password и ConvertTo-SecureString -AsPlainText, команды логирования issecret, а также известные форматы токенов (ghp_, npm_, glpat-, xox, идентификаторы ключей доступа AWS, блоки закрытых ключей)
  • A02: $(Build.SourceVersionMessage) или $(System.PullRequest.SourceBranch) либо построенная из них переменная в тексте скрипта (script, bash, pwsh, powershell, встроенные скрипты задач и аргументы задач оболочки)
  • A03: скрипты, загружаемые по обычному HTTP или с отключённой проверкой сертификатов (curl -k, wget --no-check-certificate, -SkipCertificateCheck) и передаваемые в оболочку или Invoke-Expression
  • A04: удалённые образы и задачи: выведенные из эксплуатации образы, размещённые Microsoft (windows-2019, vs2017-win2016, с ubuntu-16.04 по ubuntu-20.04, с macOS-10.13 по macOS-13, а также macOS-14 и ubuntu-22.04 начиная с дат их удаления), в том числе через переменную матрицы или параметр, используемые в vmImage, а с 15 марта 2027 года и выведенные из эксплуатации версии задач

REVIEW (проверить перед релизом)

  • A11: checkout с persistCredentials: true
  • A12: контейнерные задания или сервисные контейнеры с --privileged, мощными capabilities, пространствами имён хоста, отключёнными seccomp или AppArmor, томом docker.sock или mapDockerSocket: true
  • A13: шаблоны из ресурса репозитория GitHub, Bitbucket или другой организации без ref или с ref на ветку (тег или 40-символьный SHA коммита считается закреплённой версией)
  • A14: $(System.AccessToken) или переменные с секретными именами, вставленные в текст скрипта или аргументы командной строки задачи вместо env:
  • A15: скрипты, загружаемые по HTTPS и сразу же выполняемые (curl | sh, irm | iex, bash <(curl ...), iex "& { $(irm ...) }", [scriptblock]::Create((iwr ...)))
  • A16: строковые параметры времени выполнения со свободным текстом без списка values, а также $(Build.RequestedFor) и другие имена инициаторов запуска в тексте скрипта
  • A17: устаревшие размещённые образы до даты их удаления: macOS-14 (23 ноября 2026 года) и ubuntu-22.04 (17 апреля 2027 года)
  • A18: 73 версии задач из списка Microsoft на вывод из эксплуатации в ноябре 2026 года, каждая с указанием замены, до их удаления 15 марта 2027 года
  • A19: AzureCLI с addSpnToEnvironment: true
  • A20: явный триггер pr в пайплайне, который запускает задания в пуле локальных (self-hosted) агентов

Что входит в комплект

  • Сканер (Python 3.9+, только стандартная библиотека)
  • Руководство по правилам с причиной, более безопасным подходом и источником Microsoft для каждого правила
  • Рискованный и безопасный примеры (пайплайн сборки и релиза с шаблоном шагов), а также реальный отчёт сканера по рискованному примеру

Ограничения

Сканер читает каждый YAML-файл в том виде, в каком он написан. Значения, передаваемые между файлами (параметры шаблонов, переменные из других файлов, группы переменных, переменные из UI и задаваемые при постановке в очередь), не отслеживаются, а настройки, сделанные вне YAML, не видны: настройки сборки форков и секретов для форков, обязательные проверки шаблонов, ограничения переменных при постановке в очередь, проверка аргументов оболочки, область авторизации заданий, политики веток и то, является ли репозиторий публичным. Имена веток, такие как $(Build.SourceBranchName), не помечаются. При сканировании всего репозитория в папке build/ ищутся только файлы с именами пайплайнов и локальные шаблоны, а такие папки, как dist, vendor и node_modules, пропускаются. Списки образов и задач соответствуют страницам Microsoft по состоянию на 12 ноября 2026 года для Azure DevOps Services. Классические пайплайны и пайплайны релизов, заданные в веб-интерфейсе, не читаются. NOT FLAGGED не является гарантией.

Состав

Один ZIP-файл с 12 файлами: SKILL.md, сканер в scripts/ (5 файлов Python), references/rules.md (каждое правило с причиной и более безопасным подходом) и examples/ (4 файла с примерами, а также report.md, реальный вывод сканера по рискованному примеру).

Как использовать: это навык для агента: папка с файлом SKILL.md и скриптами Python, которые может запускать ИИ-агент для программирования, например Claude Code, Cursor или Codex CLI. Распакуйте архив в папку навыков вашего агента (для Claude Code: ~/.claude/skills/), затем попросите агента проверить ваш проект. Скрипты также работают самостоятельно с Python 3.9 или новее, ничего устанавливать не нужно. Они только читают ваши файлы: без доступа к сети, и ничего никуда не отправляется.

Что вы получите

1 файл · 44.25 KB

  • azure-pipelines-safety-check-1.0.0.zipZIP · 44.25 KB
ЛицензияКоммерческое использование разрешено
Проверка пакетаПройдена

Getly открыл загруженные файлы и не нашёл ничего, что помешало бы их открыть. Это не проверка на вирусы и не оценка качества.

Опубликовано12 нояб. 2026 г.
Размер файла44.25 KB
Формат файлаZIP
Версияv1.0

Теги

azure-devopsazure-pipelinesci-cdsecuritydevopsai agent skill
R
RR HH

Частые вопросы

Доступ открывается сразу?

Да. Это цифровой товар - скачать его можно сразу после оплаты, прямо из своей библиотеки.

Можно ли использовать в коммерческих проектах?

Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.

Какие условия возврата?

Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.

Какие форматы и размеры файлов я получу?

Вы скачаете 1 файл - ZIP - всего 44.25 KB.

Обновления бесплатны?

Да - когда продавец выпускает новую версию, вы можете бесплатно скачать актуальные файлы из своей библиотеки. Последние изменения смотрите в истории версий.

Цена

$5.00