Les attaques de la chaîne d’approvisionnement connaissent un essor. Les détections de malwares open-source ont bondi de 73 % en 2025. Au cours de la dernière année, les packages debug et chalk ont été piégés, l'action GitHub tj-actions a été compromise et a injecté du code malveillant dans des milliers de pipelines, et le compte du mainteneur d'axios a été piraté et utilisé pour distribuer un RAT. Des versions malveillantes ont également touché Zapier, ENS Domains, PostHog et Bitwarden CLI.
Chacune de ces attaques était évitable grâce à des contrôles disponibles à l'époque. Les techniques des attaquants ont fonctionné parce que la plupart des équipes n'appliquaient pas les bonnes défenses au niveau de l'installation, dans leurs pipelines ou sur leurs machines de développement.
Cette checklist détaille à quoi ressemblent ces défenses. Pour les équipes d'ingénierie qui souhaitent anticiper les attaques de la chaîne d’approvisionnement, ceci est pour vous.
TL;DR
La checklist de sécurité de la chaîne d’approvisionnement est un ensemble de tâches pratiques et priorisées pour durcir votre stack contre la génération actuelle d'attaques de la chaîne d’approvisionnement, classées critiques, élevées ou moyennes afin que vous sachiez où vous concentrer en premier. Elle couvre la gestion des dépendances, les contrôles d'accès et d'identité, le durcissement CI/CD, la sécurité des conteneurs, le verrouillage de l'environnement de développement, votre chaîne d'outils agentique, ainsi que la surveillance et la réponse.
Contenu
La checklist suit les mêmes surfaces d'attaque exploitées par les incidents mentionnés ci-dessus. Chaque élément nomme l'attaque contre laquelle il se défend, indique un changement de configuration ou un outil concret, et reste ancré dans ce qu'un ingénieur en activité a réellement l'autorité de modifier. Bien qu'elle soit destinée aux équipes d'ingénierie, les responsables de la sécurité, les ingénieurs plateforme et toute personne responsable d'une partie du SDLC y trouveront des sections directement pertinentes pour ce qu'ils livrent.
Nous avons extrait quelques éléments ci-dessous pour vous donner un aperçu de son contenu.
Appliquez une politique d'âge des paquets avant toute installation
Le schéma commun à de nombreuses attaques majeures récentes comme axios, chalk et debug, et Mastra est que des versions malveillantes de packages de confiance ont commencé à s'exécuter quelques heures après leur publication. Les contrôles au moment de l'installation sont ce qui offre à votre équipe la fenêtre de délai pour les détecter.

Épinglez les dépendances de pipeline aux SHAs de commit
Les actions tierces sont du code auquel votre pipeline fait confiance par défaut. Lorsque vous les référencez par tag, cette confiance s'étend à quiconque contrôle le tag, et les tags peuvent être déplacés.

Considérez les serveurs MCP comme des dépendances tierces
L'outillage agentique est à l'avant-garde de l'expérimentation des attaquants. Les serveurs MCP se situent à un point de confiance particulièrement élevé dans la stack, avec des permissions étendues et un accès direct aux données que les agents traitent en votre nom.

Se prémunir contre l'injection de prompt dans les pipelines alimentés par l'IA.
L'ajout d'un agent IA à un pipeline CI élargit ce qui est considéré comme une entrée risquée. Un contenu qui circulait auparavant sans danger dans un workflow, comme un titre de problème ou une description de PR, devient une instruction exécutable dès qu'un agent le lit dans un prompt. C'est une surface plus vaste que ce que la plupart des équipes ont modélisé.

Capturer les journaux d'audit pour les pushes de registre, les exécutions CI et l'utilisation des jetons.
Plusieurs compromissions cette année n'apparaissaient pas du tout dans les journaux d'authentification standard. Les attaquants opéraient à partir de sessions actives avec des identifiants valides, et le seul signal significatif provenait des journaux d'audit de ce que ces sessions avaient réellement fait.

Télécharger la checklist des attaques de la chaîne d’approvisionnement
Ce sont cinq éléments sur trente. La liste de contrôle complète aborde l'épinglage et l'application des fichiers de verrouillage, les jetons à portée limitée et la MFA résistante au phishing, le durcissement des images de conteneurs, les contrôles des extensions d'IDE et des plugins de navigateur, la définition de la portée des permissions d'agent, et les playbooks de réponse aux incidents pour les cas où une faille se produit.

Remplissez le court formulaire ci-dessous pour télécharger la liste de contrôle des attaques de la chaîne d’approvisionnement et commencez à l'appliquer avant que le prochain package n'apparaisse dans votre graphe de dépendances.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "TechArticle",
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist#article",
"headline": "The practical checklist for defending against supply chain attacks",
"description": "A practical checklist for engineering teams to defend against maintainer takeovers, poisoned actions, and malicious releases. Thirty prioritized practices graded by criticality.",
"url": "https://www.aikido.dev/blog/supply-chain-attacks-checklist",
"datePublished": "2026-07-14",
"dateModified": "2026-07-14",
"inLanguage": "en-US",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist"
},
"author": {
"@id": "https://www.aikido.dev/authors/nicholas-thomson#person"
},
"publisher": {
"@id": "https://www.aikido.dev#organization"
},
"image": {
"@type": "ImageObject",
"url": "https://www.aikido.dev/blog/supply-chain-attacks-checklist/og-image.png",
"width": 1200,
"height": 630
},
"keywords": [
"supply chain attacks",
"software supply chain security",
"npm supply chain attack",
"maintainer account takeover",
"package age policy",
"commit SHA pinning",
"GitHub Actions security",
"CI/CD security",
"MCP server security",
"prompt injection",
"phishing-resistant MFA",
"FIDO2",
"audit logging",
"malicious npm packages",
"postinstall hooks",
"dependency confusion",
"typosquatting",
"Aikido Intel",
"Aikido Safe Chain",
"developer machine security"
],
"about": [
{"@type": "Thing", "name": "Software Supply Chain Security"},
{"@type": "Thing", "name": "Open Source Security"},
{"@type": "Thing", "name": "CI/CD Pipeline Security"},
{"@type": "Thing", "name": "npm Security"},
{"@type": "Thing", "name": "Agentic AI Security"}
],
"mentions": [
{"@type": "SoftwareApplication", "name": "axios", "applicationCategory": "npm package"},
{"@type": "SoftwareApplication", "name": "chalk", "applicationCategory": "npm package"},
{"@type": "SoftwareApplication", "name": "debug", "applicationCategory": "npm package"},
{"@type": "SoftwareApplication", "name": "tj-actions/changed-files", "applicationCategory": "GitHub Action"},
{"@type": "SoftwareApplication", "name": "Mastra", "applicationCategory": "npm package"},
{"@type": "SoftwareApplication", "name": "postmark-mcp", "applicationCategory": "MCP server"},
{"@type": "SoftwareApplication", "name": "Bitwarden CLI", "applicationCategory": "CLI tool"},
{"@type": "SoftwareApplication", "name": "Aikido Intel", "url": "https://intel.aikido.dev/"},
{"@type": "SoftwareApplication", "name": "Aikido Safe Chain", "url": "https://www.aikido.dev/protect/safe-chain"},
{"@type": "SoftwareApplication", "name": "Aikido Device Protection", "url": "https://www.aikido.dev/protect/device-protection"},
{"@type": "SoftwareApplication", "name": "Aikido Libraries", "url": "https://help.aikido.dev/autofix-and-remediation/aikido-libraries-overview"},
{"@type": "SoftwareApplication", "name": "Aikido Images", "url": "https://www.aikido.dev/cloud/hardened-images"},
{"@type": "Thing", "name": "Shai-Hulud campaign"},
{"@type": "Thing", "name": "PromptPwnd"},
{"@type": "Thing", "name": "Model Context Protocol (MCP)"},
{"@type": "Thing", "name": "FIDO2"},
{"@type": "Thing", "name": "Passkeys"},
{"@type": "Thing", "name": "OIDC"},
{"@type": "Thing", "name": "SBOM"},
{"@type": "Thing", "name": "CVE-2025-30066"}
],
"articleSection": [
"Dependency management",
"Access and identity controls",
"CI/CD hardening",
"Container security",
"Developer environments",
"Agentic toolchain",
"Monitoring and response"
],
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": ["h1", "h2", ".tldr"]
},
"timeRequired": "PT8M",
"isAccessibleForFree": true,
"citation": [
{
"@type": "CreativeWork",
"name": "ReversingLabs Software Supply Chain Security Report 2026",
"url": "https://www.reversinglabs.com/blog/sscs-report-2026-guidance-timeline"
},
{
"@type": "CreativeWork",
"name": "npm debug and chalk packages compromised",
"url": "https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised"
},
{
"@type": "CreativeWork",
"name": "tj-actions/changed-files supply chain attack",
"url": "https://www.aikido.dev/blog/get-the-tl-dr-tj-actions-changed-files-supply-chain-attack"
},
{
"@type": "CreativeWork",
"name": "axios npm compromised: maintainer hijacked with RAT",
"url": "https://www.aikido.dev/blog/axios-npm-compromised-maintainer-hijacked-rat"
},
{
"@type": "CreativeWork",
"name": "Shai-Hulud strikes again: hitting Zapier, ENS Domains, PostHog",
"url": "https://www.aikido.dev/blog/shai-hulud-strikes-again-hitting-zapier-ensdomains"
},
{
"@type": "CreativeWork",
"name": "Shai-Hulud npm Bitwarden CLI compromise",
"url": "https://www.aikido.dev/blog/shai-hulud-npm-bitwarden-cli-compromise"
}
]
},
{
"@type": "WebPage",
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist",
"url": "https://www.aikido.dev/blog/supply-chain-attacks-checklist",
"name": "The practical checklist for defending against supply chain attacks",
"description": "A practical checklist for engineering teams to defend against maintainer takeovers, poisoned actions, and malicious releases.",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://www.aikido.dev#website"
},
"primaryImageOfPage": {
"@type": "ImageObject",
"url": "https://www.aikido.dev/blog/supply-chain-attacks-checklist/og-image.png"
},
"breadcrumb": {
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist#breadcrumb"
},
"about": {"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist#article"}
},
{
"@type": "BreadcrumbList",
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.aikido.dev"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://www.aikido.dev/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Guides & Best Practices",
"item": "https://www.aikido.dev/category/guides-best-practices"
},
{
"@type": "ListItem",
"position": 4,
"name": "The practical checklist for defending against supply chain attacks",
"item": "https://www.aikido.dev/blog/supply-chain-attacks-checklist"
}
]
},
{
"@type": "ItemList",
"@id": "https://www.aikido.dev/blog/supply-chain-attacks-checklist#itemlist",
"name": "Featured checklist items",
"itemListOrder": "https://schema.org/ItemListOrderAscending",
"numberOfItems": 5,
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Enforce a package age policy before anything installs",
"description": "A 48-hour minimum age policy blocks same-day typosquatting and fast-moving malware campaigns before they reach your developers."
},
{
"@type": "ListItem",
"position": 2,
"name": "Pin pipeline dependencies to commit SHAs",
"description": "Third-party actions are code your pipeline trusts by default. Pin every action to an immutable commit SHA rather than a mutable tag."
},
{
"@type": "ListItem",
"position": 3,
"name": "Treat MCP servers as third-party dependencies",
"description": "MCP servers carry the same supply chain risks as any other dependency. Pin them, verify the publisher, and scope their permissions."
},
{
"@type": "ListItem",
"position": 4,
"name": "Guard against prompt injection in AI-powered pipelines",
"description": "As AI agents gain elevated access to CI pipelines, prompt injection becomes a live attack surface for anyone who can open a PR."
},
{
"@type": "ListItem",
"position": 5,
"name": "Capture audit logs for registry pushes, CI runs, and token usage",
"description": "Audit logs give you the timeline to reconstruct what happened, confirm the blast radius, and decide what to rotate."
}
]
},
{
"@type": "Person",
"@id": "https://www.aikido.dev/authors/nicholas-thomson#person",
"name": "Nicholas Thomson",
"jobTitle": "Senior SEO & Growth Lead",
"url": "https://www.aikido.dev/authors/nicholas-thomson",
"worksFor": {
"@id": "https://www.aikido.dev#organization"
},
"sameAs": [
"https://www.linkedin.com/",
"https://x.com/"
]
},
{
"@type": "Organization",
"@id": "https://www.aikido.dev#organization",
"name": "Aikido Security",
"url": "https://www.aikido.dev",
"logo": {
"@type": "ImageObject",
"url": "https://www.aikido.dev/logo.png"
},
"sameAs": [
"https://www.linkedin.com/company/aikido-security/",
"https://x.com/AikidoSecurity",
"https://www.youtube.com/@aikidosecurity"
]
},
{
"@type": "WebSite",
"@id": "https://www.aikido.dev#website",
"url": "https://www.aikido.dev",
"name": "Aikido Security",
"publisher": {
"@id": "https://www.aikido.dev#organization"
},
"inLanguage": "en-US"
}
]
}
</script>

