Aller au contenu principal

Menu de commandes

Accédez à une page ou recherchez dans le catalogue

Outils et scripts IA

Contrôle de sécurité pour Azure Pipelines

Analyse azure-pipelines.yml et ses modèles à la recherche de secrets dans le YAML, de messages de commit ou de noms de branches de PR insérés dans des scripts, de curl | bash, d'images et de tâches hébergées retirées, de persistCredentials et de dépôts de modèles qui suivent une branche.

$5.00

Ce que vous recevez : 1 fichier · 44.25 KB · ZIP

Voir les options d'achat

Description du produit

Une étape qui exécute echo "Building $(Build.SourceVersionMessage)" semble inoffensive, mais Azure Pipelines insère le message de commit dans le script avant le démarrage de bash : un message de commit contenant un guillemet ou $( ) s'exécute donc comme une commande sur votre agent, à côté de vos secrets. Un pipeline qui utilise encore vmImage: windows-2019 a cessé de fonctionner lorsque cette image a été supprimée le 31 décembre 2025, et CmdLine@1, PowerShell@1, Maven@2 ainsi que 70 autres versions de tâches sont retirées le 24 novembre 2026 et supprimées le 15 mars 2027. Ce skill détecte ces problèmes et les autres erreurs Azure Pipelines listées ci-dessous, et vous indique comment corriger chacune d'elles.

Votre agent exécute un scanner sur azure-pipelines.yml, les fichiers de .azure-pipelines/ et .azuredevops/, ainsi que sur chaque fichier YAML dont les clés de premier niveau et les étapes relèvent d'Azure Pipelines : les modèles d'étapes, de jobs, de stages, de variables et extends sont donc aussi contrôlés, y compris ceux rangés sous build/ qu'un pipeline inclut. Les fichiers GitHub Actions, GitLab CI, Compose et Kubernetes sont ignorés. Il connaît la syntaxe de macro $(var), les expressions de modèle ${{ }} et les expressions d'exécution $[ ], considère comme sûres les valeurs transmises via env: et suit, au sein d'un fichier, les variables construites à partir de valeurs non fiables. Il n'exécute jamais le pipeline ni aucun script et n'utilise jamais le réseau. Il renvoie BLOCK, REVIEW ou NOT FLAGGED, avec le fichier, la ligne, la raison et une approche plus sûre. Les secrets ne sont jamais affichés.

Ce qui est vérifié

BLOCK (à corriger avant la livraison)

  • A01 : mots de passe, jetons et clés écrits en clair : variables ou entrées env portant des noms de secrets, entrées de tâches comme keystorePass, valeurs par défaut de paramètres, mots de passe dans des URL ou des chaînes de connexion, en-têtes Bearer, options --token, curl -u user:pass, docker/az login -p, sqlcmd -P, PowerShell $password = '...', -Password et ConvertTo-SecureString -AsPlainText, commandes de journalisation issecret et formats de jetons connus (ghp_, npm_, glpat-, xox, identifiants de clés d'accès AWS, blocs de clés privées)
  • A02 : $(Build.SourceVersionMessage) ou $(System.PullRequest.SourceBranch), ou une variable construite à partir d'eux, dans le texte d'un script (script, bash, pwsh, powershell, scripts inline des tâches et arguments des tâches shell)
  • A03 : scripts récupérés en HTTP simple ou avec la vérification des certificats désactivée (curl -k, wget --no-check-certificate, -SkipCertificateCheck) et redirigés vers un shell ou Invoke-Expression
  • A04 : images et tâches supprimées : images hébergées par Microsoft retirées (windows-2019, vs2017-win2016, ubuntu-16.04 à ubuntu-20.04, macOS-10.13 à macOS-13, ainsi que macOS-14 et ubuntu-22.04 à partir de leur date de suppression), y compris via une variable de matrice ou un paramètre utilisé par vmImage, et à partir du 15 mars 2027 les versions de tâches retirées

REVIEW (à vérifier avant la publication)

  • A11 : checkout avec persistCredentials: true
  • A12 : jobs de conteneur ou conteneurs de service avec --privileged, des capabilities puissantes, les espaces de noms de l'hôte, seccomp ou AppArmor désactivé, un volume docker.sock ou mapDockerSocket: true
  • A13 : modèles provenant d'une ressource de dépôt GitHub, Bitbucket ou d'une autre organisation sans ref ou avec un ref de branche (un tag ou un SHA de commit de 40 caractères est considéré comme épinglé)
  • A14 : $(System.AccessToken) ou variables portant des noms de secrets insérés dans le texte d'un script ou dans les arguments de ligne de commande d'une tâche au lieu de env:
  • A15 : scripts récupérés en HTTPS et exécutés immédiatement (curl | sh, irm | iex, bash <(curl ...), iex "& { $(irm ...) }", [scriptblock]::Create((iwr ...)))
  • A16 : paramètres de type chaîne en texte libre à l'exécution sans liste values, ou $(Build.RequestedFor) et les autres noms du demandeur, dans le texte d'un script
  • A17 : images hébergées obsolètes avant leur date de suppression : macOS-14 (23 novembre 2026) et ubuntu-22.04 (17 avril 2027)
  • A18 : les 73 versions de tâches de la liste de retrait de Microsoft de novembre 2026, chacune affichée avec son remplacement, jusqu'à leur suppression le 15 mars 2027
  • A19 : AzureCLI avec addSpnToEnvironment: true
  • A20 : un déclencheur pr explicite dans un pipeline qui exécute des jobs sur un pool auto-hébergé

Ce qui est inclus

  • Le scanner (Python 3.9+, bibliothèque standard uniquement)
  • Un guide des règles indiquant, pour chaque règle, la raison, l'approche plus sûre et la source Microsoft
  • Un exemple risqué et un exemple sûr (un pipeline de build et de release avec un modèle d'étapes), ainsi que le rapport réel produit par le scanner sur l'exemple risqué

Limites

Il lit chaque fichier YAML tel qu'il est écrit. Les valeurs transmises entre fichiers (paramètres de modèles, variables d'autres fichiers, groupes de variables, variables de l'interface et de mise en file d'attente) ne sont pas suivies, et les paramètres définis hors du YAML ne sont pas visibles : paramètres de build des forks et de secrets pour les forks, vérifications de modèle obligatoires, limites des variables de mise en file d'attente, validation des arguments shell, portée d'autorisation des jobs, stratégies de branche et caractère public ou non du dépôt. Les noms de branches comme $(Build.SourceBranchName) ne sont pas signalés. Lors de l'analyse d'un dépôt entier, un dossier build/ n'est parcouru que pour les fichiers portant un nom de pipeline et les modèles locaux, et les dossiers comme dist, vendor et node_modules sont ignorés. Les listes d'images et de tâches suivent les pages de Microsoft à la date du 12 novembre 2026 pour Azure DevOps Services. Les pipelines classiques et de release définis dans l'interface web ne sont pas lus. NOT FLAGGED n'est pas une garantie.

Contenu

Un fichier ZIP de 12 fichiers : SKILL.md, le scanner dans scripts/ (5 fichiers Python), references/rules.md (chaque règle avec sa raison et une approche plus sûre) et examples/ (4 fichiers d'exemple plus report.md, la sortie réelle du scanner sur l'exemple risqué).

Utilisation : il s'agit d'un skill d'agent : un dossier contenant un fichier SKILL.md et des scripts Python qu'un agent de codage IA comme Claude Code, Cursor ou Codex CLI peut exécuter. Décompressez-le dans le dossier des skills de votre agent (pour Claude Code : ~/.claude/skills/), puis demandez à votre agent de vérifier votre projet. Les scripts fonctionnent aussi seuls avec Python 3.9 ou plus récent, sans rien à installer. Ils se contentent de lire vos fichiers : aucun accès réseau, et rien n'est envoyé nulle part.

Ce que vous recevez

1 fichier · 44.25 KB

  • azure-pipelines-safety-check-1.0.0.zipZIP · 44.25 KB
LicenceUsage commercial autorisé
Vérification du paquetRéussie

Getly a ouvert les fichiers envoyés et n'a rien trouvé qui empêche leur ouverture. Ce n'est ni une analyse antivirus ni une note de qualité.

Publié12 nov. 2026
Taille du fichier44.25 KB
Format du fichierZIP
Versionv1.0

Tags

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

Questions fréquentes

Ai-je accès au produit immédiatement ?

Oui. C'est un produit numérique : vous pouvez le télécharger juste après le paiement, directement depuis votre bibliothèque.

Puis-je l'utiliser pour des projets commerciaux ?

Oui. L'usage commercial est autorisé : utilisez-le dans votre propre activité et dans ce que vous vendez. Vous ne pouvez pas revendre ni redistribuer le fichier lui-même.

Quelle est votre politique de remboursement ?

Vous pouvez demander un remboursement dans un délai de 30 jours. Si quelque chose ne va pas, demandez-le depuis votre commande et l'équipe Getly l'examine.

Quels formats et quelles tailles de fichier vais-je recevoir ?

Vous téléchargerez 1 fichier - ZIP - 44.25 KB au total.

Ai-je droit aux mises à jour gratuites ?

Oui : quand le vendeur publie une nouvelle version, vous pouvez retélécharger les derniers fichiers depuis votre bibliothèque sans frais. Consultez le journal des modifications pour les dernières mises à jour.

Prix

$5.00