{"id":"EUVD-2026-78586","revision":null,"records":[{"revision":"238eab1ee1054f718c125e7c4c711b63","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-54168","aliases":[],"title":"Pipelines-as-Code: Unscoped GitHub App installation token allows unauthorized access to private repositories via remote task resolution","description":"Pipelines-as-Code is a CI/CD system that lets users define Tekton pipelines in source code repositories. Prior to 0.37.8, 0.39.6, 0.42.1, and 0.48.0, a GitHub App installation token created during webhook processing is not scoped to the repository that triggered the event when the App is installed across multiple repositories. A user with push access to one repository can submit a PipelineRun containing a pipelinesascode.tekton.dev/task remote task annotation that targets a private repository in the same installation. When ScopeTokenToListOfRepos returns no explicit scope, the missing triggering repository ID leaves the token able to access the entire installation. Pipelines-as-Code resolves and inlines the remote private task with that token, disclosing the repository's Tekton definitions. The demonstrated impact is read-only and does not provide write access. This issue is fixed in versions 0.37.8, 0.39.6, 0.42.1, and 0.48.0.","state":0,"publishedAt":"2026-09-15T14:27:44.344+00:00","modifiedAt":"2026-09-17T14:30:57.237+00:00","affected":[{"ecosystem":"Vendor product","name":"pipelines-as-code","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"tektoncd\",\n                    \"product\": \"pipelines-as-code\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 0.37.8\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 0.38.0, < 0.39.6\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 0.40.0, < 0.42.1\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 0.43.0, < 0.48.0\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":6.5,"severity":"MEDIUM"}],"references":["https://github.com/tektoncd/pipelines-as-code/security/advisories/GHSA-6f2p-296r-cc28","https://github.com/tektoncd/pipelines-as-code/commit/001782829e82b83ecb3da903f5a024ca0826b64c","https://github.com/tektoncd/pipelines-as-code/commit/40813976a77920feaf52671320d6d3c5ff08eb7e","https://github.com/tektoncd/pipelines-as-code/commit/ac6fded6dfb69ade7197d4eeed6e90ddbe1b79bc","https://github.com/tektoncd/pipelines-as-code/commit/e0c4a11ea3800ab9d26cf3a8ae92b74cf18527c3","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.37.8","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.39.6","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.42.1","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.48.0"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-54168","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-54168","identifiers":["CVE-2026-54168"]},"retained":false,"historicalAffected":[]},{"revision":"d730286e883a48ba9ba365218a0c00a6","observedAt":"2026-11-11T13:59:06.844+00:00","statement":{"source":"euvd","id":"EUVD-2026-78586","aliases":["CVE-2026-54168","GHSA-6f2p-296r-cc28"],"title":"Pipelines-as-Code is a CI/CD system that lets users define Tekton pipelines in source code repositories. Prior to 0.37.8, 0.39.6, 0.42.1, and 0.48.0, a GitHub App installation token created during webhook processing is not scoped to the rep…","description":"Pipelines-as-Code is a CI/CD system that lets users define Tekton pipelines in source code repositories. Prior to 0.37.8, 0.39.6, 0.42.1, and 0.48.0, a GitHub App installation token created during webhook processing is not scoped to the repository that triggered the event when the App is installed across multiple repositories. A user with push access to one repository can submit a PipelineRun containing a pipelinesascode.tekton.dev/task remote task annotation that targets a private repository in the same installation. When ScopeTokenToListOfRepos returns no explicit scope, the missing triggering repository ID leaves the token able to access the entire installation. Pipelines-as-Code resolves and inlines the remote private task with that token, disclosing the repository's Tekton definitions. The demonstrated impact is read-only and does not provide write access. This issue is fixed in versions 0.37.8, 0.39.6, 0.42.1, and 0.48.0.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":6.5,"severity":null}],"references":["https://github.com/tektoncd/pipelines-as-code/security/advisories/GHSA-6f2p-296r-cc28","https://github.com/tektoncd/pipelines-as-code/commit/001782829e82b83ecb3da903f5a024ca0826b64c","https://github.com/tektoncd/pipelines-as-code/commit/40813976a77920feaf52671320d6d3c5ff08eb7e","https://github.com/tektoncd/pipelines-as-code/commit/ac6fded6dfb69ade7197d4eeed6e90ddbe1b79bc","https://github.com/tektoncd/pipelines-as-code/commit/e0c4a11ea3800ab9d26cf3a8ae92b74cf18527c3","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.37.8","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.39.6","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.42.1","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.48.0"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-78586","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Sep 15, 2026, 2:27:44 PM","dateUpdated":"Sep 17, 2026, 2:30:57 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-78586","identifiers":["EUVD-2026-78586","CVE-2026-54168","GHSA-6f2p-296r-cc28"]},"retained":false,"historicalAffected":[]},{"revision":"7f52253811e84af690644d120d5f7185","observedAt":"2026-10-25T13:17:22.268+00:00","statement":{"source":"nvd","id":"CVE-2026-54168","aliases":[],"title":"Pipelines-as-Code is a CI/CD system that lets users define Tekton pipelines in source code repositories. Prior to 0.37.8, 0.39.6, 0.42.1, and 0.48.0, a GitHub App installation token created during webhook processing is not scoped to the rep…","description":"Pipelines-as-Code is a CI/CD system that lets users define Tekton pipelines in source code repositories. Prior to 0.37.8, 0.39.6, 0.42.1, and 0.48.0, a GitHub App installation token created during webhook processing is not scoped to the repository that triggered the event when the App is installed across multiple repositories. A user with push access to one repository can submit a PipelineRun containing a pipelinesascode.tekton.dev/task remote task annotation that targets a private repository in the same installation. When ScopeTokenToListOfRepos returns no explicit scope, the missing triggering repository ID leaves the token able to access the entire installation. Pipelines-as-Code resolves and inlines the remote private task with that token, disclosing the repository's Tekton definitions. The demonstrated impact is read-only and does not provide write access. This issue is fixed in versions 0.37.8, 0.39.6, 0.42.1, and 0.48.0.","state":0,"publishedAt":"2026-09-15T15:17:17.887+00:00","modifiedAt":"2026-09-30T17:43:24.057+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":6.5,"severity":"MEDIUM"}],"references":["https://github.com/tektoncd/pipelines-as-code/commit/001782829e82b83ecb3da903f5a024ca0826b64c","https://github.com/tektoncd/pipelines-as-code/commit/40813976a77920feaf52671320d6d3c5ff08eb7e","https://github.com/tektoncd/pipelines-as-code/commit/ac6fded6dfb69ade7197d4eeed6e90ddbe1b79bc","https://github.com/tektoncd/pipelines-as-code/commit/e0c4a11ea3800ab9d26cf3a8ae92b74cf18527c3","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.37.8","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.39.6","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.42.1","https://github.com/tektoncd/pipelines-as-code/releases/tag/v0.48.0","https://github.com/tektoncd/pipelines-as-code/security/advisories/GHSA-6f2p-296r-cc28"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-54168","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-269","CWE-862"],"productCriteria":[],"sourceDates":{"published":"2026-09-15T15:17:17.887","lastModified":"2026-09-30T17:43:24.057"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-54168","identifiers":["CVE-2026-54168"]},"retained":false,"historicalAffected":[]},{"revision":"144d24460cab40d59f9af13925dd4e2c","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-6f2p-296r-cc28","aliases":["CVE-2026-54168","GO-2026-6263"],"title":"Tekton Pipelines-as-Code: Unscoped GitHub App installation token allows unauthorized access to private repositories via remote task resolution","description":"### Impact\nWhen Pipelines-as-Code is configured with a GitHub App installed across multiple repositories, the installation token issued during webhook processing is not scoped to the triggering repository by default. The token retains access to all repositories in the GitHub App installation.\n\nThis allows a user with push access to any repository in the installation to craft a PipelineRun with a remote task annotation pointing at a private repository in the same installation:\n```\npipelinesascode.tekton.dev/task: \"https://github.com/org/private-repo/blob/main/.tekton/secret-task.yaml\"\n```\nPipelines-as-Code resolves and inlines the remote task using the unscoped token, exposing the contents of the private repository's Tekton definitions. This is a read-only confidentiality breach, no write access is exposed.\n\n### Patches\nThe fix extracts the repository ID from the webhook payload during initial parsing so that it is available for later use. It then adds a fallback in the client setup path so that when no explicit scoping configuration is present and `ScopeTokenToListOfRepos` returns empty, the token is re-issued scoped to the triggering repository's ID rather than retaining access to the entire installation. The initial token remains unscoped so that the extra-repos lookup can still discover and resolve additional repositories when configured.\n\nThe fix is available in v0.48.0. Supported backport releases will be added here after release tags are published.\n\n### Workarounds\nLimit the GitHub App installation to only the repositories that require Pipelines-as-Code. Avoid org-wide installations or mixed-trust installations where repositories with different access requirements share the same GitHub App. This restricts the blast radius of the unscoped token to only the repositories that are explicitly selected during App installation.\n\n### Credits\nReported and fixed by the Pipelines-as-Code maintainers.","state":0,"publishedAt":"2026-08-20T18:36:40+00:00","modifiedAt":"2026-09-10T03:51:13.1125514+00:00","affected":[{"ecosystem":"Go","name":"github.com/openshift-pipelines/pipelines-as-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.37.8"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/openshift-pipelines/pipelines-as-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.38.0"},{"kind":"fixed","version":"0.39.6"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/openshift-pipelines/pipelines-as-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.40.0"},{"kind":"fixed","version":"0.42.1"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/openshift-pipelines/pipelines-as-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.43.0"},{"kind":"fixed","version":"0.48.0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/tektoncd/pipelines-as-code/security/advisories/GHSA-6f2p-296r-cc28","https://github.com/tektoncd/pipelines-as-code"],"sourceUrl":"https://github.com/advisories/GHSA-6f2p-296r-cc28","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-6f2p-296r-cc28","identifiers":["GHSA-6f2p-296r-cc28","CVE-2026-54168","GO-2026-6263"]},"retained":false,"historicalAffected":[]},{"revision":"3e7135fa4d0f43ddaea806ee86d9a780","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-6263","aliases":["CVE-2026-54168","GHSA-6f2p-296r-cc28"],"title":"Tekton Pipelines-as-Code: Unscoped GitHub App installation token allows unauthorized access to private repositories via remote task resolution in github.com/openshift-pipelines/pipelines-as-code","description":"Tekton Pipelines-as-Code: Unscoped GitHub App installation token allows unauthorized access to private repositories via remote task resolution in github.com/openshift-pipelines/pipelines-as-code","state":0,"publishedAt":"2026-08-25T19:43:10+00:00","modifiedAt":"2026-08-26T01:21:30.2485284+00:00","affected":[{"ecosystem":"Go","name":"github.com/openshift-pipelines/pipelines-as-code","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.37.8"},{"kind":"introduced","version":"0.38.0"},{"kind":"fixed","version":"0.39.6"},{"kind":"introduced","version":"0.40.0"},{"kind":"fixed","version":"0.42.1"},{"kind":"introduced","version":"0.43.0"},{"kind":"fixed","version":"0.48.0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/tektoncd/pipelines-as-code/security/advisories/GHSA-6f2p-296r-cc28"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-6263","license":"OSV · upstream source license applies","key":"osv:GO-2026-6263","identifiers":["GO-2026-6263","CVE-2026-54168","GHSA-6f2p-296r-cc28"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-12T02:56:45.8822264+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-12T02:56:45.8822264+00:00","lastSuccessAt":"2026-11-12T02:56:46.0427292+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:46.0427301+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-64752486c567b55b31fb0d7225f5222bcd0019564ac0ac5f0649e242c7b19299-c8f0a5eb97b437649f83f6fe632ec849fcb249052407d33e475e82c88b318dfb","complete":true,"records":424535,"lastAttemptAt":"2026-11-12T02:56:45.3610802+00:00","lastSuccessAt":"2026-11-12T02:56:45.341976+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.3610802+00:00","snapshotPublishedAt":"2026-11-12T02:25:26+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-3bce114846604d92838a2dc302341627","complete":false,"records":13760,"lastAttemptAt":"2026-11-12T03:06:53.8778262+00:00","lastSuccessAt":"2026-11-12T03:06:52.8+00:00","error":"754 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-12T03:06:52.8+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13040,"expectedIdentifiers":13813,"failedIdentifiers":754},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-12T02:56:45.8822264+00:00","complete":true,"records":1097,"lastAttemptAt":"2026-11-12T02:56:45.8822264+00:00","lastSuccessAt":"2026-11-12T02:56:46.0434469+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:46.0434471+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-729a419ccc5f41d8a3330c7c6e8b6a5e","complete":true,"records":13760,"lastAttemptAt":"2026-11-12T02:57:11.7691852+00:00","lastSuccessAt":"2026-11-12T02:57:11.766+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:57:11.766+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13813,"expectedIdentifiers":13813,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-3562b6c78fd1bd0f0b55daf66a0926ae24f65e462df7f6d928caad458fc696bf","complete":true,"records":9947,"lastAttemptAt":"2026-11-12T02:56:45.7363501+00:00","lastSuccessAt":"2026-11-11T04:27:43.6877707+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.7363501+00:00","snapshotPublishedAt":"2026-11-11T03:32:46+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-456002455e0ab94bb92c95476d4e6d175c104cd594749982afd96c893728ecbc","complete":true,"records":2010,"lastAttemptAt":"2026-11-12T02:56:45.5271491+00:00","lastSuccessAt":"2026-11-11T02:36:58.1276999+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.5271491+00:00","snapshotPublishedAt":"2026-11-11T01:17:51+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-baa8362b4daf9e5f39d5563775a55935e7b442c0735d33274a921579ce4a0d66","complete":true,"records":3093,"lastAttemptAt":"2026-11-12T02:56:45.8443473+00:00","lastSuccessAt":"2026-11-11T13:00:02.5446881+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.8443473+00:00","snapshotPublishedAt":"2026-11-11T12:47:47+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-685fe7fb2b690656c910a1ea42a9d294e8353311ac8ecfa691a9b0ff1b328804","complete":true,"records":231695,"lastAttemptAt":"2026-11-12T02:56:45.6384803+00:00","lastSuccessAt":"2026-11-11T21:58:47.7265713+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.6384803+00:00","snapshotPublishedAt":"2026-11-11T21:48:35+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}