Skip to content

Commit e8553c7

Browse files
authored
Merge branch 'main' into fix/path-injection-read-subkind
2 parents 33035db + e6f587e commit e8553c7

65 files changed

Lines changed: 891 additions & 1034 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/mad_modelDiff.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ jobs:
7070
SHORTNAME=`basename $DATABASE`
7171
python misc/scripts/models-as-data/generate_mad.py --language java --with-summaries --with-sinks $DATABASE $SHORTNAME/$QL_VARIANT
7272
mkdir -p $MODELS/$SHORTNAME
73-
mv java/ql/lib/ext/generated/$SHORTNAME/$QL_VARIANT $MODELS/$SHORTNAME
73+
mv java/ql/lib/ext/generated/modelgenerator/$SHORTNAME/$QL_VARIANT $MODELS/$SHORTNAME
7474
cd ..
7575
}
7676

.github/workflows/python-tooling.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ on:
55
paths:
66
- "misc/bazel/**"
77
- "misc/codegen/**"
8-
- "misc/scripts/models-as-data/bulk_generate_mad.py"
8+
- "misc/scripts/models-as-data/*.py"
99
- "*.bazel*"
1010
- .github/workflows/codegen.yml
1111
- .pre-commit-config.yaml
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Altered 2 patterns in the `poisonable_steps` modelling. Extra sinks are detected in the following cases: scripts executed via python modules and `go run` in directories are detected as potential mechanisms of injection. For the go execution pattern, the pattern is updated to now ignore flags that occur between go and the specific command. This change may lead to more results being detected by the following queries: `actions/untrusted-checkout/high`, `actions/untrusted-checkout/critical`, `actions/untrusted-checkout-toctou/high`, `actions/untrusted-checkout-toctou/critical`, `actions/cache-poisoning/poisonable-step`, `actions/cache-poisoning/direct-cache` and `actions/artifact-poisoning/path-traversal`.

actions/ql/lib/ext/config/poisonable_steps.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extensions:
7070
- ["(source|sh|bash|zsh|fish)\\s+([^\\s]+)\\b", 2]
7171
- ["(node)\\s+([^\\s]+)(\\.js|\\.ts)\\b", 2]
7272
- ["(python[\\d\\.]*)\\s+([^\\s]+)\\.py\\b", 2]
73+
- ["(python[\\d\\.]*)\\s+-m\\s+([A-Za-z_][\\w\\.]*)\\b", 2] # eg: pythonX -m anything(dir or file)
7374
- ["(ruby)\\s+([^\\s]+)\\.rb\\b", 2]
74-
- ["(go)\\s+(generate|run)\\s+([^\\s]+)\\.go\\b", 3]
75+
- ["(go)\\s+(generate|run)(?:\\s+-[^\\s]+)*\\s+([^\\s]+)", 3]
7576
- ["(dotnet)\\s+([^\\s]+)\\.csproj\\b", 2]
76-

actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,35 @@
11
## Overview
22

3-
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
3+
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. Under certain conditions described below, attackers can take over a repository by opening malicious PRs from forks. The attacks can result in malicious code execution causing unauthorized changes to the repository or exfiltration of repository secrets and a compromise of connected systems.
4+
5+
## Workflow Security Model
6+
7+
In GitHub Actions, there is a distinction between unprivileged and privileged workflows. For example, a workflow with a `pull_request` trigger is unprivileged while a workflow with `pull_request_target` is privileged.
8+
9+
This is relevant especially for PRs from forks. Normal PRs can only be submitted by people who have write access to a repository, while PRs from forks can be submitted by anyone.
10+
11+
On a PR from a fork, an unprivileged `pull_request` workflow has only limited capabilities but a privileged `pull_request_target` workflow is much more dangerous. A privileged workflow:
12+
13+
* Runs in the context of the base repository
14+
* Has access to organization and repository secrets (e.g., API keys, deployment tokens)
15+
* Has a read/write `GITHUB_TOKEN` by default
16+
* Can access private resources
17+
18+
Certain triggers automatically grant a workflow elevated privileges:
19+
20+
* `pull_request_target` as described above
21+
* `workflow_run`: Triggered when another workflow completes.
22+
* `issue_comment`: Triggered when a comment is made on an issue or PR.
23+
24+
## Attack Details
25+
26+
* A repository has a privileged workflow
27+
* An attacker forks the repository and adds malicious code (e.g., in the build script)
28+
* The attacker opens a PR from the fork, and, if needed, comments on the PR
29+
* The workflow in the base repository checks out the forked code
30+
* The workflow runs, (e.g. the build script etc.), which contains the malicious code
31+
32+
Please note that not only build scripts can be malicious code vectors. There is a large number of other possibilities. Some of them are listed in the [LOTP](https://boostsecurityio.github.io/lotp/) catalog.
433

534
## Recommendation
635

@@ -133,3 +162,5 @@ jobs:
133162
## References
134163
135164
- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
165+
- Mitigating risks of untrusted checkout: [GitHub Docs](https://docs.github.com/en/enterprise-cloud@latest/actions/reference/security/secure-use#mitigating-the-risks-of-untrusted-code-checkout).
166+
- Living Off the Pipeline: [LOTP](https://boostsecurityio.github.io/lotp/).

actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,35 @@
11
## Overview
22

3-
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
3+
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. Under certain conditions described below, attackers can take over a repository by opening malicious PRs from forks. The attacks can result in malicious code execution causing unauthorized changes to the repository or exfiltration of repository secrets and a compromise of connected systems.
4+
5+
## Workflow Security Model
6+
7+
In GitHub Actions, there is a distinction between unprivileged and privileged workflows. For example, a workflow with a `pull_request` trigger is unprivileged while a workflow with `pull_request_target` is privileged.
8+
9+
This is relevant especially for PRs from forks. Normal PRs can only be submitted by people who have write access to a repository, while PRs from forks can be submitted by anyone.
10+
11+
On a PR from a fork, an unprivileged `pull_request` workflow has only limited capabilities but a privileged `pull_request_target` workflow is much more dangerous. A privileged workflow:
12+
13+
* Runs in the context of the base repository
14+
* Has access to organization and repository secrets (e.g., API keys, deployment tokens)
15+
* Has a read/write `GITHUB_TOKEN` by default
16+
* Can access private resources
17+
18+
Certain triggers automatically grant a workflow elevated privileges:
19+
20+
* `pull_request_target` as described above
21+
* `workflow_run`: Triggered when another workflow completes.
22+
* `issue_comment`: Triggered when a comment is made on an issue or PR.
23+
24+
## Attack Details
25+
26+
* A repository has a privileged workflow
27+
* An attacker forks the repository and adds malicious code (e.g., in the build script)
28+
* The attacker opens a PR from the fork, and, if needed, comments on the PR
29+
* The workflow in the base repository checks out the forked code
30+
* The workflow runs, (e.g. the build script etc.), which contains the malicious code
31+
32+
Please note that not only build scripts can be malicious code vectors. There is a large number of other possibilities. Some of them are listed in the [LOTP](https://boostsecurityio.github.io/lotp/) catalog.
433

534
## Recommendation
635

@@ -133,3 +162,5 @@ jobs:
133162
## References
134163
135164
- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
165+
- Mitigating risks of untrusted checkout: [GitHub Docs](https://docs.github.com/en/enterprise-cloud@latest/actions/reference/security/secure-use#mitigating-the-risks-of-untrusted-code-checkout).
166+
- Living Off the Pipeline: [LOTP](https://boostsecurityio.github.io/lotp/).

actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @name Checkout of untrusted code in trusted context
2+
* @name Checkout of untrusted code in privileged context without privileged context use
33
* @description Privileged workflows have read/write access to the base repository and access to secrets.
44
* By explicitly checking out and running the build script from a fork the untrusted code is running in an environment
55
* that is able to push to the base repository and to access secrets.

actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,35 @@
11
## Overview
22

3-
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
3+
GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. Under certain conditions described below, attackers can take over a repository by opening malicious PRs from forks. The attacks can result in malicious code execution causing unauthorized changes to the repository or exfiltration of repository secrets and a compromise of connected systems.
4+
5+
## Workflow Security Model
6+
7+
In GitHub Actions, there is a distinction between unprivileged and privileged workflows. For example, a workflow with a `pull_request` trigger is unprivileged while a workflow with `pull_request_target` is privileged.
8+
9+
This is relevant especially for PRs from forks. Normal PRs can only be submitted by people who have write access to a repository, while PRs from forks can be submitted by anyone.
10+
11+
On a PR from a fork, an unprivileged `pull_request` workflow has only limited capabilities but a privileged `pull_request_target` workflow is much more dangerous. A privileged workflow:
12+
13+
* Runs in the context of the base repository
14+
* Has access to organization and repository secrets (e.g., API keys, deployment tokens)
15+
* Has a read/write `GITHUB_TOKEN` by default
16+
* Can access private resources
17+
18+
Certain triggers automatically grant a workflow elevated privileges:
19+
20+
* `pull_request_target` as described above
21+
* `workflow_run`: Triggered when another workflow completes.
22+
* `issue_comment`: Triggered when a comment is made on an issue or PR.
23+
24+
## Attack Details
25+
26+
* A repository has a privileged workflow
27+
* An attacker forks the repository and adds malicious code (e.g., in the build script)
28+
* The attacker opens a PR from the fork, and, if needed, comments on the PR
29+
* The workflow in the base repository checks out the forked code
30+
* The workflow runs, (e.g. the build script etc.), which contains the malicious code
31+
32+
Please note that not only build scripts can be malicious code vectors. There is a large number of other possibilities. Some of them are listed in the [LOTP](https://boostsecurityio.github.io/lotp/) catalog.
433

534
## Recommendation
635

@@ -133,3 +162,5 @@ jobs:
133162
## References
134163
135164
- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
165+
- Mitigating risks of untrusted checkout: [GitHub Docs](https://docs.github.com/en/enterprise-cloud@latest/actions/reference/security/secure-use#mitigating-the-risks-of-untrusted-code-checkout).
166+
- Living Off the Pipeline: [LOTP](https://boostsecurityio.github.io/lotp/).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: fix
3+
---
4+
* Fixed help file descriptions for queries: `actions/untrusted-checkout/critical`, `actions/untrusted-checkout/high`, `actions/untrusted-checkout/medium`. Previously the messages were unclear as to why and how the vulnerabilities could occur.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: queryMetadata
3+
---
4+
* Adjusted the name of `actions/untrusted-checkout/high` to more clearly describe which parts of the scenario are in a privileged context.

0 commit comments

Comments
 (0)