{"id":3874,"date":"2026-10-29T18:37:53","date_gmt":"2026-10-29T18:37:53","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=3874"},"modified":"2026-10-29T18:37:53","modified_gmt":"2026-10-29T18:37:53","slug":"github-launches-npm-firewall-to-block-malicious-packages-before-installation","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=3874","title":{"rendered":"GitHub Launches npm Firewall to Block Malicious Packages Before Installation"},"content":{"rendered":"<div>\n<p><span class=\"p-author\"><i class=\"icon-font icon-user\">\ue804<\/i><span class=\"author\">Ravie Lakshmanan<\/span><i class=\"icon-font icon-calendar\">\ue802<\/i><span class=\"author\">Oct 29, 2026<\/span><\/span><span class=\"p-tags\">DevSecOps \/ Vulnerability<\/span><\/p>\n<\/div>\n<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiJ7hXo0MoiQiXCSLnOj0h2YUqDhIHl13Le4XxOU3UxV7X2mm4_YGJKOT6akyW58uRaMhslGN6NY9B_1u7V-y_fy0kYJHKoVA-yBWVt53xqBk06_syRpASgWezvnVIZs9goRlwNrp_HMVj_Pu8rzXmIsfJBV1YzhJ8IAd-1g7FFVhFWqc9HegTk4Jok5kR9\/s1700-nu-rw-lo-l85-e365\/github.gif\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>GitHub has announced that it&#8217;s introducing a new package firewall as a preview to block installation of suspicious npm packages during installation time.<\/p>\n<p>\u00abThe firewall inspects both metadata requests and package downloads for signs of malicious activity, acting as an install-time policy gate,\u00bb GitHub <a href=\"https:\/\/github.blog\/changelog\/2026-10-20-github-package-firewall-in-public-preview\/\" target=\"_blank\">said<\/a>.<\/p>\n<p>The feature, which currently supports only npm packages, is available in public preview for all GitHub Enterprise Cloud customers, including data-resident GitHub Enterprise Cloud.<\/p>\n<p>According to the Microsoft subsidiary, the firewall is placed between endpoints or internal registries and the upstream package repositories so as to deter malware attacks that compromise systems when packages are installed.<\/p>\n<p>This behavior can expose users to severe security risks, especially when artificial intelligence (AI) agents and CI runners automatically install dependencies to complete a task or build without their explicit permission.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-security-guide-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgasUea1PyqjHgZ4PrtmNHQRiRuIWuKqadF1Y1kDkBQlmLoAduaR0D2D5_AgqPzyreZSALvgtryBe5zD3YTk_Q65XX762OpyZGzSzGT8nzn5QlFoiKE6Dqq8rZUJm2Sn_3-epxU4vcpXR-a9JZKHBO4Bq9_nIlpaEEgDZ0oMEEDi4q9NmkHkHuZofDor0TO\/s728-nu-rw-lo-l85-e365\/nudge-2-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>The idea is that endpoints like coding agents and CI\/CD hosts use the firewall for their requests instead of directly pointing to the public package registries.  The firewall then checks package downloads against policy controls such as minimum package age and malware advisories, and blocks downloads that do not meet those policies.<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>To use the firewall, administrators are <a href=\"https:\/\/docs.github.com\/en\/enterprise-cloud@latest\/code-security\/how-tos\/secure-your-supply-chain\/secure-your-dependencies\/protecting-endpoints-with-package-firewall\" target=\"_blank\">required<\/a> to configure policy controls, such as the ones listed below &#8211;<\/p>\n<ul>\n<li>Block known malware by checking against the <a href=\"https:\/\/github.com\/advisories\" target=\"_blank\">GitHub Advisory Database<\/a> for active malware advisories<\/li>\n<li>Block packages based on the severity of vulnerabilities by checking the GitHub Advisory Database for flaws that affect the requested package version. The control defaults to \u00abCritical only\u00bb as the severity level that blocks an installation, although users can choose \u00abHigh or higher,\u00bb \u00abMedium or higher,\u00bb or \u00abAny severity.\u00bb<\/li>\n<li>Block attestation downgrades by comparing attestations for the requested package version with those of earlier versions and stop the download if the requested version does not have an SLSA attestation.<\/li>\n<li>Block newly-introduced install scripts by checking whether the package recently added scripts that run using preinstall or postinstall hooks, which can be abused to steal sensitive data.<\/li>\n<\/ul>\n<p>Block packages based on a cooldown period that prevents versions that are newer than the configured minimum age from being installed. The value can range from 1 to 365 days. The default value is 1 day. Users can disable it by setting it to 0.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEibKYDqs7uj7FfPNFhcDva0WE1FBavHs_x6guDnl12vmfcd-d-A3a0sovkR4h4GixSXVsy-RzdzfZCSvqO1KVJwdhpGhG9PFXjF2-OYZSo_DCU6fZQb5IXxyfuYzWtU6c0blrdwiCjJQ_OUhn7mTZeO79DEIItwp3x9t3YNEyt-8BZ1mup0uMWGA0xfBapf\/s1700-nu-rw-lo-l85-e365\/protect_endpoint_header.jpeg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEibKYDqs7uj7FfPNFhcDva0WE1FBavHs_x6guDnl12vmfcd-d-A3a0sovkR4h4GixSXVsy-RzdzfZCSvqO1KVJwdhpGhG9PFXjF2-OYZSo_DCU6fZQb5IXxyfuYzWtU6c0blrdwiCjJQ_OUhn7mTZeO79DEIItwp3x9t3YNEyt-8BZ1mup0uMWGA0xfBapf\/s1700-nu-rw-lo-l85-e365\/protect_endpoint_header.jpeg\" alt=\"\" border=\"0\" data-original-height=\"1260\" data-original-width=\"2400\"\/><\/a><\/div>\n<p>Users who need access to a package that gets blocked erroneously by the firewall can submit an exception request, which can then be approved by enterprise administrators and security managers.<\/p>\n<p>The development comes as Rust 1.100, which is scheduled for release on November 12, 2026, readies to add support for a configurable minimum publish age, allowing security scanners and maintainers time to flag and block malicious crate releases before they can be installed or used by users.<\/p>\n<p>The value, defined via the \u00ab<a href=\"https:\/\/doc.rust-lang.org\/beta\/cargo\/reference\/config.html#registryglobal-min-publish-age\" target=\"_blank\">global-min-publish-age<\/a>\u00bb option in \u00abcargo\/config.toml,\u00bb allows users to specify a minimum publication age in days or weeks. If left unspecified, a seven-day waiting period is applied by default to skip releases published within that window.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/network-defense-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjVV2rRkX8tRMF6gCzemvQNpwFwGxRWxY1cJEYfoLLSj1EZYJOlj5WTR77t0i6kELXujYcaHTpRDqTjCbVHH5Pnh7wzxUiKP5j4dsDkWIMlp2bmpZsL0jeAsA_19pHH5UPtyBvNkZdyGEULOAsXPcraMP5CYjQRFefhXRSdEjYkrdcpUnc4ILcvcdEfAauE\/s728-nu-rw-lo-l85-e365\/tl-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Over the past year, similar waiting periods have been implemented across <a href=\"https:\/\/cloudsmith.com\/blog\/how-to-configure-time-for-cooldown-policies\" target=\"_blank\">open-source ecosystems<\/a>, including npm, Python, Microsoft Visual Studio Code, Ruby, Bun, pnpm, and Yarn, as a way to bolster software supply chain security by reducing the chance that a newly published, unreviewed version is immediately pulled into a build.<\/p>\n<p>Cooldown periods help add friction and slow down attacks in which a bad actor publishes a poisoned version of a popular package after seizing control of a maintainer account, thereby preventing rapid spread through manual or automated installations.<\/p>\n<p>\u00abThe tradeoff is that legitimate fixes have to wait, too, unless developers make an exception,\u00bb Socket <a href=\"https:\/\/socket.dev\/blog\/rust-cargo-cooldowns\" target=\"_blank\">said<\/a>. \u00abMalicious code also doesn&#8217;t magically become harmless with age. A release that escapes detection can simply outlast the cooldown. The value is in buying researchers, maintainers, and registries time to act before the next dependency update carries an attack further.\u00bb<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ue804Ravie Lakshmanan\ue802Oct 29, 2026DevSecOps \/ Vulnerability GitHub has announced that it&#8217;s introducing a new package firewall as a preview to block installation of suspicious npm packages during installation time. \u00abThe&hellip;<\/p>\n","protected":false},"author":1,"featured_media":3875,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1009,3987,71,3988,188,33,39,35],"class_list":["post-3874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-block","tag-firewall","tag-github","tag-installation","tag-launches","tag-malicious","tag-npm","tag-packages"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3874"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/3875"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}