{"id":5107,"date":"2026-09-21T15:25:15","date_gmt":"2026-09-21T15:25:15","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/09\/21\/github-separates-who-writes-code-from-who-runs-your-ci\/"},"modified":"2026-09-21T15:25:15","modified_gmt":"2026-09-21T15:25:15","slug":"github-separates-who-writes-code-from-who-runs-your-ci","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/09\/21\/github-separates-who-writes-code-from-who-runs-your-ci\/","title":{"rendered":"GitHub Separates Who Writes Code From Who Runs Your CI"},"content":{"rendered":"<div><img data-opt-id=672870499  fetchpriority=\"high\" decoding=\"async\" width=\"770\" height=\"330\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2026\/09\/github-actions-security-770x330-1.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"\" \/><\/div>\n<p><img data-opt-id=345025113  fetchpriority=\"high\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2026\/09\/github-actions-security-770x330-1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/p>\n<p><span>Anyone with write access to a repository can trigger a GitHub Actions workflow. That has been the default since Actions launched. It\u2019s convenient. It\u2019s also a problem when a compromised account or a malicious pull request can turn your CI into an attack path.<\/span><\/p>\n<p><span>Attackers have noticed. GitHub\u2019s own 2026 Actions security roadmap points to incidents involving tj-actions\/changed-files, Nx, and trivy-action as examples of the same pattern. Go after the automation, not the application. Steal a token, and you own the pipeline.<\/span><\/p>\n<p><span>Mitch Ashley, vice president and practice lead for CIO &amp; technology buyers and software lifecycle engineering at <a href=\"https:\/\/futurumgroup.com\/\" target=\"_blank\" rel=\"noopener\">The Futurum Group<\/a>, puts the stakes plainly. \u201cA single compromised developer account can mean the difference between a well-running pipeline and compromised software.\u201d<\/span><\/p>\n<p><span>GitHub\u2019s latest answer is now generally available. On September 17, the company made workflow execution protections GA for GitHub Enterprise, organizations, and repositories. The feature first appeared in public preview on June 18.<\/span><\/p>\n<p><span>The idea is simple. Administrators build an allowlist. GitHub checks the rules before a workflow run begins. If the actor or the event isn\u2019t on the list, the run doesn\u2019t start.<\/span><\/p>\n<p><span>There are two kinds of rules. Actor rules control who can trigger workflows. These can be individual users, repository roles such as Read, Maintain, and Admin, GitHub Apps, Copilot, and Dependabot. Event rules control which events are allowed, including push, pull_request, pull_request_target, and workflow_dispatch.<\/span><\/p>\n<p><span>GitHub\u2019s documentation explains the point of actor rules this way: \u201cActor rules let you separate who contributes code from who runs your CI, so you can grant a contributor write access without granting them the ability to execute workflows.\u201d<\/span><\/p>\n<p><span>Write access and execution rights used to arrive as a bundle. Three features in the GA release weren\u2019t in the preview.<\/span><\/p>\n<p><span>First, rules can now target specific workflow files instead of a whole repository. A team can limit deploy.yml to a named group while leaving CI workflows open to every contributor.<\/span><\/p>\n<p><span>Second, there are new insights. They show how rules are evaluated and enforced at the enterprise, organization, and repository level. Admins can use them to tune a policy before and after it goes live.<\/span><\/p>\n<p><span>Third, there\u2019s a REST API. It supports create, read, update, and delete at all three levels, including workflow path conditions. Teams that manage governance as code can keep these policies in the same review process.<\/span><\/p>\n<p><span>Evaluate mode carries over from the preview. It lets admins \u201crun your rules in shadow, so you can see exactly what a rule would block before you enforce it,\u201d according to the June announcement. GitHub\u2019s docs list evaluate mode as an Enterprise Cloud capability. Rules live under Settings, then Actions, then Policies. They build on GitHub\u2019s rulesets, so enterprise-wide policies and custom-property scoping work as they do elsewhere. The protections cover all public repositories, plus private repositories on GitHub Team or GitHub Enterprise.<\/span><\/p>\n<p><span>One caution from the docs: bots such as dependabot[bot] must be added as allowed actors if your workflows depend on them.<\/span><\/p>\n<p><span>Ashley sees the value in the simplicity. \u201cOften the simplest solutions can be the most effective. Tighter controls over how CI or deployment to test or production is executed greatly reduce the attack surface. With these improvements, dev teams will no longer have to rely upon bespoke built solutions to secure this aspect of their development pipelines.\u201d<\/span><\/p>\n<p><span>The part with a deadline is the new default rule for pull_request_target.<\/span><\/p>\n<p><span>This trigger runs with the base repository\u2019s token and secrets. If a workflow checks out code from an untrusted fork, the attacker\u2019s code can run with those privileges. GitHub already tightened actions\/checkout in June so that version 7 refuses to fetch fork pull request code in these workflows unless a developer sets allow-unsafe-pr-checkout.<\/span><\/p>\n<p><span>A default rule disables pull_request_target in public repositories that don\u2019t already have an event policy. It\u2019s running in evaluate mode today. Enforcement starts November 2, 2026. It doesn\u2019t apply to private or internal repositories.<\/span><\/p>\n<p><span>That\u2019s about six weeks. Here\u2019s how to use them.<\/span><\/p>\n<p><span>Search your .github\/workflows directories for pull_request_target. Then check the policy insights page to see which runs the default would have blocked. Some workflows only post a comment using trusted code from the base branch. Those are low risk. Others check out pull request code while holding secrets. Fix those first.<\/span><\/p>\n<p><span>For workflows that truly need the trigger, you have two options. Add an event policy that allows pull_request_target only for named workflow files. Or restructure. Run the untrusted analysis in a read-only pull_request job, save the results as an artifact, and post comments from a separate workflow_run job that has write access. The second path takes more work, but it removes the risk.<\/span><\/p>\n<p><span>One analysis from Digital Applied flags AI code-review bots and labelers as the likeliest to be caught. They read pull request text from strangers while holding write tokens.<\/span><\/p>\n<p><span>Policy-driven execution is one item on GitHub\u2019s Actions security roadmap. Workflow dependency locking, scoped secrets, and a native egress firewall are still coming. This is the first piece most teams can use today.<\/span><\/p>\n<p><span>The larger point is about how teams think of CI. Pipelines hold deployment credentials, signing keys, and cloud access. They deserve the same scrutiny as production.<\/span><\/p>\n<p><span>Start in evaluate mode. Read the insights. Then turn rules on for the workflows that matter most.<\/span><\/p>\n<p><a href=\"https:\/\/devops.com\/github-separates-who-writes-code-from-who-runs-your-ci\/\" target=\"_blank\" class=\"feedzy-rss-link-icon\">Read More<\/a><\/p>\n<p>\u200b<\/p>","protected":false},"excerpt":{"rendered":"<p>Anyone with write access to a repository can trigger a GitHub Actions workflow. That has been the default since Actions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5108,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[5],"tags":[],"class_list":["post-5107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/5107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=5107"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/5107\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/5108"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=5107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=5107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=5107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}