ИИ-инструменты и скрипты
Проверка безопасности Azure Pipelines
Проверяет azure-pipelines.yml и его шаблоны: секреты в YAML, сообщения коммитов и имена веток PR, вставленные в скрипты, curl | bash, выведенные из эксплуатации образы и задачи, persistCredentials и репозитории шаблонов, привязанные к ветке.
Что вы получите: 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
ИИ-инструменты и скрипты
Проверка безопасности Azure Pipelines
Проверяет azure-pipelines.yml и его шаблоны: секреты в YAML, сообщения коммитов и имена веток PR, вставленные в скрипты, curl | bash, выведенные из эксплуатации образы и задачи, persistCredentials и репозитории шаблонов, привязанные к ветке.
Getly открыл загруженные файлы и не нашёл ничего, что помешало бы их открыть. Это не проверка на вирусы и не оценка качества.
Теги
Частые вопросы
Доступ открывается сразу?
Да. Это цифровой товар - скачать его можно сразу после оплаты, прямо из своей библиотеки.
Можно ли использовать в коммерческих проектах?
Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.
Какие условия возврата?
Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.
Какие форматы и размеры файлов я получу?
Вы скачаете 1 файл - ZIP - всего 44.25 KB.
Обновления бесплатны?
Да - когда продавец выпускает новую версию, вы можете бесплатно скачать актуальные файлы из своей библиотеки. Последние изменения смотрите в истории версий.
Цена
$5.00



