Skip to content

Commit 17ab249

Browse files
committed
GH Actions: "pin" all action runners
Recently there has been more and more focus on securing GH Actions workflows - in part due to some incidents. The problem with "unpinned" action runners is as follows: * Tags are mutable, which means that a tag could point to a safe commit today, but to a malicious commit tomorrow. Note that GitHub is currently beta-testing a new "immutable releases" feature (= tags and release artifacts can not be changed anymore once the release is published), but whether that has much effect depends on the ecosystem of the packages using the feature. Aside from that, it will likely take years before all projects adopt _immutable releases_. * Action runners often don't even point to a tag, but to a branch, making the used action runner a moving target. _Note: this type of "floating major" for action runners used to be promoted as good practice when the ecosystem was "young". Insights have since changed._ While it is convenient to use "floating majors" of action runners, as this means you only need to update the workflows on a new major release of the action runner, the price is higher risk of malicious code being executed in workflows. Dependabot, by now, can automatically submit PRs to update pinned action runners too, as long as the commit-hash pinned runner is followed by a comment listing the released version the commit is pointing to. So, what with Dependabot being capable of updating workflows with pinned action runners, I believe it is time to update the workflows to the _current_ best practice of using commit-hash pinned action runners. The downside of this change is that there will be more frequent Dependabot PRs. If this would become a burden/irritating, the following mitigations can be implemented: 1. Updating the Dependabot config to group updates instead of sending individual PRs per action runner. 2. A workflow to automatically merge Dependabot PRs as long as CI passes. Ref: https://docs.github.com/en/actions/reference/security/secure-use#using-third-party-actions
1 parent 8d54287 commit 17ab249

File tree

3 files changed

+12
-12
lines changed

3 files changed

+12
-12
lines changed

.github/workflows/label-merge-conflicts.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121

2222
steps:
2323
- name: Check PRs for merge conflicts
24-
uses: eps1lon/actions-label-merge-conflict@v3
24+
uses: eps1lon/actions-label-merge-conflict@1df065ebe6e3310545d4f4c4e862e43bdca146f0 # v3.0.3
2525
with:
2626
dirtyLabel: "Status: has merge conflict"
2727
repoToken: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/qa.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ jobs:
2020

2121
steps:
2222
- name: Checkout code
23-
uses: actions/checkout@v5
23+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
2424

2525
- name: Install PHP
26-
uses: shivammathur/setup-php@v2
26+
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # 2.35.4
2727
with:
2828
php-version: 'latest'
2929
coverage: none
@@ -37,13 +37,13 @@ jobs:
3737
# Install dependencies and handle caching in one go.
3838
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
3939
- name: Install Composer dependencies
40-
uses: "ramsey/composer-install@v3"
40+
uses: "ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520" # 3.1.1
4141
with:
4242
# Bust the cache at least once a month - output format: YYYY-MM.
4343
custom-cache-suffix: $(date -u "+%Y-%m")
4444

4545
- name: Validate Project PHPCS ruleset against schema
46-
uses: phpcsstandards/xmllint-validate@v1
46+
uses: phpcsstandards/xmllint-validate@0fd9c4a9046055f621fca4bbdccb8eab1fd59fdc # v1.0.1
4747
with:
4848
pattern: "phpcs.xml.dist"
4949
xsd-file: "vendor/squizlabs/php_codesniffer/phpcs.xsd"

.github/workflows/update-website.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ jobs:
5050
fi
5151
5252
- name: Checkout code
53-
uses: actions/checkout@v5
53+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
5454
with:
5555
ref: ${{ steps.base_branch.outputs.BRANCH }}
5656

5757
- name: Install PHP
58-
uses: shivammathur/setup-php@v2
58+
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # 2.35.4
5959
with:
6060
php-version: '8.4'
6161
ini-values: error_reporting=-1, display_errors=On, display_startup_errors=On, log_errors_max_len=0
@@ -79,21 +79,21 @@ jobs:
7979

8080
# Commit all changed files back to the repository
8181
- name: Commit updated files
82-
uses: stefanzweifel/git-auto-commit-action@v6
82+
uses: stefanzweifel/git-auto-commit-action@778341af668090896ca464160c2def5d1d1a3eb0 # v6.0.1
8383
with:
8484
commit_message: "Update XSD files"
8585
add_options: '-A'
8686

8787
- name: Check GitHub Pages status
88-
uses: crazy-max/ghaction-github-status@v4
88+
uses: crazy-max/ghaction-github-status@fa6ac37620bc5d44b93e15caed498629665e9ff5 # v4.2.0
8989
with:
9090
pages_threshold: major_outage
9191

9292
- name: Setup Pages
93-
uses: actions/configure-pages@v5
93+
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5.0.0
9494

9595
- name: Upload static files as artifact
96-
uses: actions/upload-pages-artifact@v4
96+
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
9797
with:
9898
# Upload _site directory only.
9999
path: _site/
@@ -113,4 +113,4 @@ jobs:
113113
steps:
114114
- name: Deploy to GitHub Pages
115115
id: deployment
116-
uses: actions/deploy-pages@v4
116+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5

0 commit comments

Comments
 (0)