ISO 27001
GitHub Actions
CI/CD Security
Software Supply Chain
How to Audit GitHub Actions, CI/CD Runners, and Build Permissions for Supply Chain Risk
Learn how ISO 27001 internal auditors can test GitHub Actions permissions, runners, secrets, tokens, third-party actions, build integrity, and production deployment controls.
Your CI/CD Pipeline May Have More Power Than Most Employees
Your CI/CD pipeline can read source code.
It can access secrets.
It can create software artifacts.
It can publish packages.
It may even deploy directly to production.
Therefore, GitHub Actions and other CI/CD platforms are part of the software supply chain.
Yet many audits focus only on the application.
That leaves the system that builds the application out of the audit.
OWASP highlights several CI/CD risks.
These include weak identities, poor credential handling, pipeline abuse, and limited logging.
For an ISO 27001 internal audit, the main question is:
Quick Answer
What Should a GitHub Actions Security Audit Test?
A strong GitHub Actions security audit should test:
- Who can change workflows.
- Which actions are allowed.
- Whether third-party actions are pinned.
GITHUB_TOKENpermissions.- Secrets and cloud credentials.
- OpenID Connect configuration.
- Self-hosted runner security.
- Pull request trust boundaries.
- Production deployment approvals.
- Build artifact integrity.
- CI/CD logging and monitoring.
- Emergency revocation and recovery.
Do not treat GitHub Actions as simple automation.
Treat it as privileged production infrastructure.
Why CI/CD Is Part of the Software Supply Chain
A modern pipeline may look like this:
Developer Commit
↓
GitHub Repository
↓
GitHub Actions Workflow
↓
Runner
↓
Dependencies
↓
Build Artifact
↓
Cloud Environment
↓
Production
Every stage can affect the final software.
An attacker may target the workflow, runner, token, or build process.
Therefore, CI/CD belongs inside software supply chain risk management.
1. Audit Who Can Change Workflow Files
Start with the workflow itself.
GitHub Actions workflows normally use YAML files stored with the source code.
Changing a workflow can change:
- Which code runs.
- Which tools execute.
- Which secrets are exposed.
- Which permissions are granted.
- Where software is deployed.
Internal audit should ask:
.github/workflows?Then test whether sensitive changes require independent review.
Evidence to Request
- Repository permissions.
- Branch protection.
- Rulesets.
- CODEOWNERS.
- Pull request approvals.
- Workflow change history.
- Administrative bypass rights.
2. Review GITHUB_TOKEN Permissions
GitHub Actions jobs can receive a GITHUB_TOKEN.
GitHub creates this token automatically.
The risk depends on what the token can do.
GitHub recommends granting only the permissions each job needs.
Internal Audit Should Review
contentspackagespull-requestsissuesactionsdeploymentsid-tokenThen ask:
For example, a unit-test job may only need read access.
It may not need contents: write.
Least privilege applies to CI/CD identities too.
3. Audit Third-Party GitHub Actions
A workflow can execute code from another repository.
For example:
uses: vendor/action@versionThat makes third-party actions part of the software supply chain.
A compromised action may access tokens, source code, or available secrets.
GitHub allows organizations to restrict approved actions.
It can also require full commit SHA references.
Internal Audit Should Ask
- Which third-party actions are allowed?
- Who approves them?
- Are they reviewed before use?
- Are they pinned?
- Are unused actions removed?
- Are updates reviewed?
Instead of a movable tag such as:
vendor/action@v3Use an approved immutable reference where appropriate.
4. Review Self-Hosted Runners Carefully
Self-hosted runners need extra attention.
A persistent runner may retain:
- Files.
- Credentials.
- Build artifacts.
- Tokens.
- Cached dependencies.
- Malicious persistence.
GitHub warns that self-hosted runners are not automatically clean after every job.
Untrusted workflow code may therefore create persistent risk.
Internal Audit Should Check
- Which repositories can use the runner?
- Is the runner persistent or ephemeral?
- Is it rebuilt between jobs?
- What network access does it have?
- Which secrets can it reach?
- Can it access production?
- Who administers it?
- Is the host patched and hardened?
Better Design
Use runner groups to restrict sensitive runners.
For higher-risk workloads, consider clean ephemeral runners.
5. Test Pull Request Trust Boundaries
Pull requests create an important CI/CD trust boundary.
Lower-trust code may enter through:
- Forks.
- Feature branches.
- External contributors.
- Automated bots.
GitHub applies protections to forked pull requests.
However, the workflow event still matters.
The pull_request_target event runs in a higher-trust context.
Unsafe use may expose sensitive tokens or secrets.
Internal Audit Should Ask
- Which events trigger workflows?
- Can untrusted pull requests use privileged runners?
- Can forked code access secrets?
- Are deployment jobs separated from PR validation?
- Is
pull_request_targetused? - If yes, why?
6. Audit Secrets in CI/CD
Build pipelines often need sensitive credentials.
These may include:
Therefore, secret management is a major audit area.
GitHub recommends storing sensitive data in secret-management features.
Secret masking alone does not replace least privilege.
Evidence to Request
- Repository secrets.
- Organization secrets.
- Environment secrets.
- Secret access policies.
- Rotation records.
- Vault integrations.
- Secret change logs.
Audit Questions
- Who can create secrets?
- Who can replace them?
- Which workflows receive them?
- Are secrets shared across unrelated repositories?
- Do old credentials remain active?
Can Your CI/CD Pipeline Prove Least Privilege?
Canadian Cyber can help test GitHub Actions, runners, tokens, secrets, workflow approvals, build integrity, and production deployment controls.
The goal is to make the pipeline secure, traceable, and audit-ready.
7. Replace Long-Lived Cloud Secrets Where Possible
One strong CI/CD improvement is reducing stored cloud credentials.
GitHub Actions supports OpenID Connect, or OIDC.
OIDC can provide short-lived cloud access.
As a result, teams may not need permanent cloud credentials in GitHub.
Internal Audit Should Check
If OIDC is used, verify:
- Which repositories are trusted.
- Which branches are trusted.
- Which environments can request tokens.
- Which cloud roles workflows can assume.
- Whether trust conditions are narrowly scoped.
The cloud provider should not trust every repository by default.
8. Separate Build Permissions From Deployment Permissions
Build jobs and deployment jobs do not need the same access.
Build Job
- Source code.
- Dependencies.
- Test environment.
Production Deployment Job
- Production cloud role.
- Deployment credentials.
- Release approval.
These permissions should be separated.
Internal Audit Should Test
- Are production secrets available during normal builds?
- Can every branch trigger deployment?
- Are production environments protected?
- Is approval required?
- Can one developer change and approve the workflow?
The goal is to stop one compromised job from gaining unnecessary authority.
9. Review Environment Protection
GitHub environments can protect deployment targets.
For example, a production environment may require:
- An approved branch.
- Human review.
- A restricted deployment workflow.
- Environment-specific secrets.
Internal audit should verify these controls technically.
Do not rely only on a procedure that says:
The workflow should enforce the rule.
10. Test Build Artifact Integrity
The output of CI/CD matters more than the logs alone.
Internal audit should ask:
Useful evidence may include:
- Artifact hashes.
- Digital signatures.
- Build provenance.
- Controlled artifact repositories.
- Immutable version identifiers.
- Release records.
Red flag: the pipeline tests one artifact, but someone manually deploys another file.
11. Review Build Dependencies
GitHub Actions workflows can download many dependencies.
These may include:
- Packages.
- Container images.
- Actions.
- Build tools.
- Scripts.
Therefore, CI/CD audit work should connect with software supply chain controls.
Review whether the pipeline uses:
- Version pinning.
- Lockfiles.
- Approved registries.
- Dependency scanning.
- Integrity checks.
A secure repository can still build compromised software if the pipeline downloads malicious dependencies.
12. Audit Who Can Administer GitHub Actions
Do not review developers only.
Review administrators too.
Ask who can:
- Change Actions policies.
- Create self-hosted runners.
- Modify runner groups.
- Change repository settings.
- Add organization secrets.
- Disable branch protection.
- Approve production environments.
- Allow new third-party actions.
These permissions can change the security model for many workflows.
Internal Audit Test
Create a privileged-access matrix.
Then confirm that privileged access is reviewed regularly.
13. Test Workflow Logging and Monitoring
If a malicious workflow runs, the organization should be able to investigate it.
Auditors should verify access to:
- Workflow run history.
- Repository audit logs.
- Secret changes.
- Runner registrations.
- Permission changes.
- Deployment history.
- Failed workflow attempts.
- Administrative changes.
Practical Audit Test
Choose one production deployment.
Then ask the team to reconstruct:
If the team cannot reconstruct the event, auditability is weak.
14. Test the Compromised Runner Scenario
Strong audits include practical scenarios.
Ask:
Then map the possible path.
Runner
↓
Secrets
↓
Repositories
↓
Cloud
↓
Production
↓
Internal Network
The goal is to reduce the blast radius.
A runner should not become a bridge to the entire organization.
15. Test Emergency Revocation
What happens if a CI/CD credential or runner is compromised?
The organization should know how to:
- Disable the runner.
- Revoke credentials.
- Remove cloud trust.
- Rotate secrets.
- Stop deployments.
- Disable compromised workflows.
- Review affected releases.
- Investigate activity.
ISO 27001 Controls to Consider
CI/CD security can support several ISO/IEC 27001:2022 control areas.
| ISO 27001 Control | Internal Audit Focus |
|---|---|
| A.5.15 Access Control | Are repository and pipeline permissions restricted? |
| A.5.16 Identity Management | Are CI/CD identities governed? |
| A.5.17 Authentication Information | Are secrets and tokens protected? |
| A.5.18 Access Rights | Are GitHub permissions reviewed? |
| A.8.2 Privileged Access Rights | Are deployment and admin permissions restricted? |
| A.8.4 Access to Source Code | Is source-code access controlled? |
| A.8.8 Technical Vulnerabilities | Are dependencies and build tools scanned? |
| A.8.15 Logging | Are workflow and admin events retained? |
| A.8.16 Monitoring Activities | Can suspicious CI/CD activity be detected? |
| A.8.25 Secure Development Life Cycle | Is CI/CD security built into development? |
| A.8.29 Security Testing | Are security checks enforced before release? |
| A.8.31 Separation of Environments | Are development and production separated? |
| A.8.32 Change Management | Are workflow and deployment changes controlled? |
The exact mapping should match your ISMS scope, architecture, risks, and Statement of Applicability.
Evidence Internal Audit Should Request
A practical evidence pack may include:
- GitHub organization Actions policy.
- Repository permissions.
- Branch protections or rulesets.
- Workflow files.
- CODEOWNERS.
- Pull request approvals.
GITHUB_TOKENsettings.- Allowed action policy.
- Third-party action inventory.
- Runner inventory.
- Runner-group configuration.
- Repository and organization secrets.
- OIDC trust configuration.
- Deployment environment settings.
- CI/CD logs.
- Deployment records.
- Artifact hashes or provenance.
- Access reviews.
- Incident records.
Use risk-based sampling.
A repository that deploys production software deserves more attention than a documentation repository.
Common GitHub Actions Internal Audit Findings
Watch for these patterns.
Simple jobs receive unnecessary write access.
Production workflows rely on movable tags.
Low-trust repositories reach sensitive infrastructure.
Short-lived access could reduce credential risk.
Sensitive credentials appear before they are needed.
Untrusted code runs in privileged contexts.
Too many users can change security settings.
Deployment logic can change without approval.
The tested artifact cannot be tied to production.
Teams cannot quickly stop a compromised pipeline.
Quick GitHub Actions Security Audit Checklist
Before closing the audit, confirm:
- Workflow changes require review.
- Sensitive branches are protected.
GITHUB_TOKENfollows least privilege.- Third-party actions are governed.
- Critical actions are pinned where appropriate.
- Self-hosted runner access is restricted.
- Untrusted pull requests cannot reach sensitive runners.
- Secrets are centrally governed.
- Long-lived cloud credentials are minimized.
- OIDC trust is narrowly scoped.
- Build and deployment permissions are separated.
- Production deployments are protected.
- CI/CD administrative rights are reviewed.
- Dependencies are scanned.
- Build artifacts can be verified.
- Workflow and deployment activity is logged.
- Runner activity is monitored.
- Compromised credentials can be revoked quickly.
- Deployment can be stopped during an incident.
- Evidence is retained for internal audit.
Connect CI/CD Risk to Your SharePoint ISMS
CI/CD evidence often sits inside GitHub and cloud platforms.
Meanwhile, ISO 27001 findings and risk records may sit somewhere else.
That separation can make audit traceability difficult.
Canadian Cyber’s ISMS SharePoint Solution can help centralize:
Frequently Asked Questions
Are GitHub Actions part of software supply chain risk?
Yes.
GitHub Actions can build, test, package, sign, and deploy software.
Should GitHub Actions have write access?
Only where required.
Use the minimum GITHUB_TOKEN permissions needed by each workflow or job.
Are self-hosted GitHub runners secure?
They can be secured.
However, they need stronger isolation, access restrictions, patching, and monitoring.
Should third-party GitHub Actions be pinned?
For higher assurance, use immutable references where practical.
GitHub supports full-length commit SHA references for this purpose.
What is OIDC in GitHub Actions?
OIDC allows workflows to request short-lived identity tokens.
This can reduce the need for stored cloud credentials.
Is pull_request_target dangerous?
It is not automatically unsafe.
However, running untrusted pull-request code in that context can create serious risk.
What should internal audit test first?
Start with one production deployment workflow.
Trace the full path:
Code → Approval → Workflow → Runner → Token → Artifact → Production
The Takeaway
Your CI/CD pipeline is not just automation.
It is a privileged software factory.
It decides:
Therefore, CI/CD security belongs inside the ISMS.
A strong audit should trace:
If any stage can be silently changed, risk increases.
The same is true if a stage can be bypassed or overprivileged.
Audit the pipeline that builds the software, not only the software itself.
Need Help Auditing CI/CD and Software Supply Chain Controls?
Canadian Cyber helps organizations review GitHub Actions, CI/CD controls, secure development, software supply chain risks, access management, and vulnerability management.
We also help organizations test evidence and corrective actions as part of ISO 27001 internal audits.
Our ISMS SharePoint Solution can centralize CI/CD risks, controls, audit evidence, access reviews, findings, owners, review dates, and corrective actions.
Stay Connected With Canadian Cyber
Follow Canadian Cyber for practical guidance on ISO 27001 internal audits, GitHub Actions, CI/CD security, secure development, software supply chains, and SharePoint ISMS.
