From 547d3928c29c2133d4f65e98af3e73cab014a0bf Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Wed, 6 Dec 2023 16:31:39 -0500 Subject: [PATCH 01/18] Create CloudEvents Security assessment Signed-off-by: Igor8mr Co-authored-by: MatthewZGong Co-authored-by: devyani-14 Co-authored-by: Kushal-kothari --- .../CE-maintainers-communications.md | 213 ++++ .../cloudevents/files/CloudEvents SBOM.spdx | 174 +++ .../projects/cloudevents/images/apex-logo.png | Bin 0 -> 89074 bytes .../cloudevents/images/async-api-logo.png | Bin 0 -> 75451 bytes .../images/cloudevents-actions.png | Bin 0 -> 27490 bytes .../cloudevents/images/cloudevents-logo.png | Bin 0 -> 26672 bytes .../cloudevents/images/opentelemetry-logo.svg | 1 + .../cloudevents/images/soap-evenlope.png | Bin 0 -> 35630 bytes .../cloudevents/images/soap-webservice.png | Bin 0 -> 14290 bytes .../projects/cloudevents/self-assessment.md | 1052 +++++++++++++++++ 10 files changed, 1440 insertions(+) create mode 100644 assessments/projects/cloudevents/CE-maintainers-communications.md create mode 100644 assessments/projects/cloudevents/files/CloudEvents SBOM.spdx create mode 100644 assessments/projects/cloudevents/images/apex-logo.png create mode 100644 assessments/projects/cloudevents/images/async-api-logo.png create mode 100644 assessments/projects/cloudevents/images/cloudevents-actions.png create mode 100644 assessments/projects/cloudevents/images/cloudevents-logo.png create mode 100644 assessments/projects/cloudevents/images/opentelemetry-logo.svg create mode 100644 assessments/projects/cloudevents/images/soap-evenlope.png create mode 100644 assessments/projects/cloudevents/images/soap-webservice.png create mode 100644 assessments/projects/cloudevents/self-assessment.md diff --git a/assessments/projects/cloudevents/CE-maintainers-communications.md b/assessments/projects/cloudevents/CE-maintainers-communications.md new file mode 100644 index 000000000..585b08c9b --- /dev/null +++ b/assessments/projects/cloudevents/CE-maintainers-communications.md @@ -0,0 +1,213 @@ +# Communications with CloudEvents Maintainers + +## Slack Communications + +* **Security Pals Involved:** + * Igor Rodrigues (Igor Rodrigues) +* **CloudEvents Team Members Involved:** + * Doug Davis (dug) + +### Slack Report + +#### Igor Rodrigues (Nov 29th at 4:29:13 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701293353624819) + +Hello all, I'm a student at NYU involved in the SecurityPal effort from TAG +Security. Our group is conducting a security assessment on CloudEvents, which we +will later submit to the [TAG Security Assessments +Repository](https://github.com/cncf/tag-security/tree/main). We have completed +an [initial +evaluation](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md) +of the project and would appreciate your feedback to validate the information we +included. We also want to know if there are additional aspects we should include +in the assessment to correctly represent your project, along with more details +for sections like [security issue +resolution](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#security-issue-resolution) +and [secure development +practices](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#secure-development-practices). +Please, feel free to share your thoughts here on Slack, on GitHub, or on a call. +Thank you! + +#### Dug (Nov 29th at 8:02:04 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701306124114029?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Hi @Igor Rodrigues - will take a look. Just curious though, what made you decide +to analyze CloudEvents? + +#### Igor Rodrigues (Nov 29th at 8:36:26 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701308186825319?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Hi @dug, thank you. The assessment is one of our assignments for a class we are +taking with Professor Justin Cappos. Each group was assigned to a CNCF project, +and ours was CloudEvents. The project is interesting, so we are trying to do a +bit more than expected. I hope the assessment helps in the future. + +#### Dug (Nov 30th at 10:24:13 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701357853677559?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +@Igor Rodrigues thanks. Just a few comments from my quick scan: + +* Where do you see ANTRL being used? I'm surprised you didn't include markdown + in the list despite it not being a "programming language", being a "spec" + markdown is kind of our "language" :slightly_smiling_face: +* `CloudEvents was developed to address the lack of uniformity in event data + format...` be a bit careful here. While CE does provide a "structured" format, + that's just there are times when people want the event data and context + attributes in one doc. In general though CE is NOT trying to define "yet + another common event format (one format to rule them all)". In particular, + many people use/prefer "binary" format because it just augments their existing + events. And even with "structured", the stuff that does into the `data` + attribute is wide open - and should be defined by the business. I just don't + want people to think we're making the same mistake as other folks who tried to + force one format for all events. Rather CE is about standardizing "where to + find common metadata about the event w/o having to parse/understand the event + specific format". +* Nit: in "Protocol Binding" section it mentions `structured-mode` but hasn't + defined that term yet. You may want to define binary vs structured CEs in the + doc before this section. +* Not sure what the "trust boundary" is meant to represent in the diagram since + "trust" is kind of orthogonal to the roles. +* Goals: may want to tweak some of those based on my comments above. Plus, some + of those aren't really goals for CE since CE doesn't control them. For + example, "generate events before consumers are listening" - a good idea, but + CE doesn't really talk about those in the spec itself. CE is just about the + format and how they might appear on the transports. With a few exceptions, it + doesn't get into the protocols themselves or event + management/subscriptions..... +* CE is under review for Graduation status right now... hopefully will be + approved very soon +* CE doesn't really describe any encryption mechanism or deal with integrity - + the text you wrote kind of implies CE addresses it. Perhaps say something like + it's an implementation detail/choice?? +* Ecosystem - might be good to link to the [cloudevents.io](cloudevents.io) site + which includes a list of adopters. +* The "Security issue resolution" section reads like an SDK specific section - + perhaps "SDK" should appear in the title to make it clear that the following + sections apply to the SDK repos and not the spec repo? +* There's also a new security mailing list people should use to report security + concerns: https://lists.cncf.io/g/cncf-cloudevents-security/topics +* There is no "CloudEvents Steering Committee" that's mentioned in the Threat + Modelling section (typo in Modelling) +* It might be good to mention that (I think) all of the security issues found by + Trail of Bits have been addressed + +#### Igor Rodrigues (Nov 30th at 11:58:51 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701363531073659?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Hi @dug, Thank you for all the comments! For ANTLR, GitHub marked it as 14.1% of +the [CloudEvents spec](https://github.com/cloudevents/spec), so that's why I +added it to the assessment, but I may remove it if it's not very relevant. I'll +also definitely add Markdown, thanks for noticing that. We'll review the doc, +update it with your comments and tell you about the changes. Thank you again! + +#### Igor Rodrigues (Dec 4th at 11:15:26 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701706526314599?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Hi @dug, we fixed the comments you provided on the [security +assessment](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md), +along with the comments from the meeting. Here are the [new +changes](https://github.com/cncf/tag-security/commit/e75e0e0a908ffa462c7923fad6e6e201b5feaef0#diff-086780f8339d58b8abcf32f9cf930f8b11ebf1889ee3e36c4eeaede7dc21a7b7) +since then. Please, let me know if there are more parts we could improve. Also, +I wanted to CloudEvents have a public SBOM that we could link, and if you think +there are more aspects we could add to the specification side of the [Security +Issue +resolution](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#cloudevents-specification). +Thank you for all the help! + +#### Dug (Dec 4th at 11:36:23 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701707783421699?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +The closest thing we have to a SBOM is: +https://github.com/cloudevents/spec#cloudevents-documents Thanks for the update. +Will look it over in a bit. + +#### Igor Rodrigues (Dec 4th at 11:44:52 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701708292972649?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Great, thanks! + +#### Dug (Dec 4th at 12:08:22 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701709702994029?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +I put just a few minor tweaks as comments on the commit. + +#### Igor Rodrigues (Dec 4th at 12:28:53 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701710933601919?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Thanks, I'll fix those soon + +#### Igor Rodrigues (Dec 5th at 8:05:09 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701781509377939?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Hi @dug, I forgot to ask this before, but are there any action items you are +currently working on or plan to work on that would solve the concerns mentioned +in the doc or other security concerns? I think it would be good to include those +in the assessment. I remember you mentioned implementing bots to check the SDKs, +do you have a pull request, issue, or any other link to the implementation of +the bots idea? Also, we are willing to help implement one of those solutions to +the concerns if you have some specific things in mind. + +#### Dug (Dec 5th at 11:57:30 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701795450643219?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +@Igor Rodrigues just this one: https://github.com/cloudevents/spec/issues/1235 + +#### Dug (Dec 5th at 11:58:19 AM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701795499076589?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +If someone knows how to setup the bots and wants to submit a PR to add them... +that would be great! Or even just a list of instructions for an admin to follow +(if it's more than just a PR) that would be great too. + +#### Igor Rodrigues (Dec 5th at 12:12:57 PM) + +* [Message + Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701796377013619?thread_ts=1701293353.624819&cid=C9DB5ABAA) + +Great, thanks! We are taking a look here + +## CloudEvents Team Meeting + +* **Security Pals Involved:** + * Igor Rodrigues +* **CloudEvents Team Members Involved:** + * Doug Davis + * Tommy + * Erik + * David B + * Jon + * Calum + * Jem + * Clemens + +### Team Meeting Report + +The team joined the CloudEvents public team meeting on November 30th, 2023, +which was [recorded on +YouTube](https://www.youtube.com/watch?v=2OZPTQOqFEw&t=191s). diff --git a/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx b/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx new file mode 100644 index 000000000..2e9ded54e --- /dev/null +++ b/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx @@ -0,0 +1,174 @@ +SPDXVersion: SPDX-2.3 +DataLicense: CC0-1.0 +SPDXID: SPDXRef-DOCUMENT +DocumentName: github.com/Igor8mr/spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +DocumentNamespace: https://s3.us-east-1.amazonaws.com/blob.fossa.io/FOSSA_BOMS/git%2Bgithub.com%2FIgor8mr%2Fspec%24130ba0d183f5e45c1d141f5c1f272cf71d898623 +Creator: Organization: NYU Igor +Creator: Tool: FOSSA v0.12.0 +Created: 2023-11-28T08:10:45Z +LicenseListVersion: 3.18 +DocumentDescribes: SPDXRef-pip-aiohttp-3.9.1 +DocumentDescribes: SPDXRef-pip-bs4-0.0.1 +DocumentDescribes: SPDXRef-pip-Markdown-3.5.1 +DocumentDescribes: SPDXRef-pip-pymdown-extensions-10.5 +DocumentDescribes: SPDXRef-pip-pytest-asyncio-0.21.1 +DocumentDescribes: SPDXRef-pip-tenacity-8.2.3 +DocumentDescribes: SPDXRef-pip-tqdm-4.66.1 + +#### Packages + +PackageName: spec +SPDXID: SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +PackageVersion: 130ba0d183f5e45c1d141f5c1f272cf71d898623 +FilesAnalyzed: true +PackageOriginator: Organization: Git +PackageLicenseDeclared: Apache-2.0 +PackageCopyrightText: 2021 The CloudEvents Authors. +PackageDownloadLocation: NOASSERTION +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:github/Igor8mr/spec@130ba0d183f5e45c1d141f5c1f272cf71d898623 +PackageChecksum: MD5: edde7edecb511530e340a6758e68469f +PackageChecksum: SHA1: 68b11edf18e3ee4aefb010d0039b46678279cc35 +PackageChecksum: SHA256: ede64337447df771e0cca0261121bf4fb2f3fe9c1b48f2c74b75907bf9c6ef8f + + +PackageName: aiohttp +SPDXID: SPDXRef-pip-aiohttp-3.9.1 +PackageVersion: 3.9.1 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: Apache-2.0 +PackageCopyrightText: aio-libs contributors. + aio-libs contributors. +PackageLicenseInfoFromFiles: MIT +PackageDownloadLocation: https://files.pythonhosted.org/packages/54/07/9467d3f8dae29b14f423b414d9e67512a76743c5bb7686fb05fe10c9cc3e/aiohttp-3.9.1.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/aiohttp@3.9.1 +PackageChecksum: MD5: a678b74da295fad8bc65e76ef882028d +PackageChecksum: SHA1: 077a26885ada5fa78bd540d61ad96d7b25ff2f14 +PackageChecksum: SHA256: 60b3a90c477906cef6846cc60499bf25a5fb725b3966958bdcfc30681fefbe46 + + +PackageName: bs4 +SPDXID: SPDXRef-pip-bs4-0.0.1 +PackageVersion: 0.0.1 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: MIT +PackageCopyrightText: NONE +PackageDownloadLocation: https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/bs4@0.0.1 +PackageChecksum: MD5: 0cf3b06d60f6de4e489ac9eaaf606e15 +PackageChecksum: SHA1: cb7eeca557338c2e6f83ded115730edb0358b5c5 +PackageChecksum: SHA256: f5238cfb5026c9846b4bbca72e3d1af0c98e750fe9c9fe610c7e1827dbd4cd8f + + +PackageName: Markdown +SPDXID: SPDXRef-pip-Markdown-3.5.1 +PackageVersion: 3.5.1 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: BSD-3-Clause +PackageCopyrightText: 2007, 2008 The Python Markdown Project (v. 1.7 and later) + 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) + 2004 Manfred Stienstra (the original version) +PackageLicenseInfoFromFiles: ietf-trust BSD-2-Clause PIL +PackageDownloadLocation: https://files.pythonhosted.org/packages/35/14/1ec9742e151f3b06a723a20d9af7201a389ebd3aae8b7d93b521819489dc/Markdown-3.5.1.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/markdown@3.5.1 +PackageChecksum: MD5: 17521d1c48bec050461c9749648eb02e +PackageChecksum: SHA1: 93ef9f0f2d38bb6a2e67b2e6b6928d8c6f3fd739 +PackageChecksum: SHA256: b33293b09516ec07f4f82388c82dc4101e2af4b0308d104a00a40c212dfda492 + + +PackageName: pymdown-extensions +SPDXID: SPDXRef-pip-pymdown-extensions-10.5 +PackageVersion: 10.5 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: MIT +PackageCopyrightText: 2014 - 2023 Isaac Muse + 2007-2008 Waylan Limberg](http://achinghead.com/). + 2008-2014 The Python Markdown Project + 2006-2008 Waylan Limberg](http://achinghead.com/). + 2013 GitHub, Inc. +PackageDownloadLocation: https://files.pythonhosted.org/packages/fd/fe/a3f51f84844e7a493884dbd5d70775fc83e26e414234c212fb342d65a079/pymdown_extensions-10.5.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/pymdown-extensions@10.5 +PackageChecksum: MD5: 5307ac49eccdfedc0500e861454c1807 +PackageChecksum: SHA1: 999e7fc85d2be0e34e2f29306aae79aeaa77fd1d +PackageChecksum: SHA256: f9bf4664db12301525699019a1325132b48e7f606d2cf85c9a10867addff5780 + + +PackageName: pytest-asyncio +SPDXID: SPDXRef-pip-pytest-asyncio-0.21.1 +PackageVersion: 0.21.1 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: Apache-2.0 +PackageCopyrightText: NONE +PackageDownloadLocation: https://files.pythonhosted.org/packages/5a/85/d39ef5f69d5597a206f213ce387bcdfa47922423875829f7a98a87d33281/pytest-asyncio-0.21.1.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/pytest-asyncio@0.21.1 +PackageChecksum: MD5: b7a6b994b519756e167eb060f7b9c215 +PackageChecksum: SHA1: 4bd2b79d5335f9edc9d651223b371b8676e5027d +PackageChecksum: SHA256: 9ed0689af4d77ce1a842e557a08346827c6f8e91432322568ef8e4d6454b2293 + + +PackageName: tenacity +SPDXID: SPDXRef-pip-tenacity-8.2.3 +PackageVersion: 8.2.3 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: Apache-2.0 +PackageCopyrightText: 2016 Étienne Bersac +PackageDownloadLocation: https://files.pythonhosted.org/packages/89/3c/253e1627262373784bf9355db9d6f20d2d8831d79f91e9cca48050cddcc2/tenacity-8.2.3.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/tenacity@8.2.3 +PackageChecksum: MD5: 997f8584a7fc7a2fac8129e5b7b38660 +PackageChecksum: SHA1: 04832f7674ec9b765f5b5fa6eedd7dcc0e66fe33 +PackageChecksum: SHA256: fa1582aa8ae5ba5e44f54ccc7de63a8be0593a8d3f77aa8966785f4bfb75b7f7 + + +PackageName: tqdm +SPDXID: SPDXRef-pip-tqdm-4.66.1 +PackageVersion: 4.66.1 +FilesAnalyzed: true +PackageOriginator: Organization: Pip +PackageLicenseDeclared: MPL-2.0 OR MIT +PackageCopyrightText: 2013 noamraph +PackageDownloadLocation: https://files.pythonhosted.org/packages/62/06/d5604a70d160f6a6ca5fd2ba25597c24abd5c5ca5f437263d177ac242308/tqdm-4.66.1.tar.gz +PackageLicenseConcluded: NOASSERTION +ExternalRef: PACKAGE-MANAGER purl pkg:pypi/tqdm@4.66.1 +PackageChecksum: MD5: 7948f65ba4a5924756d4b0f96ffbd2ac +PackageChecksum: SHA1: 8927f903a643ea9c15d2d1df91147d05f8f8f4b6 +PackageChecksum: SHA256: cc06ac41d0dca3fdd457918b98daabfb98ca4d37a5e875dbea3701c31ffc892e + + + +#### Relationships + +SPDXRef-DOCUMENT DESCRIBES SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-aiohttp-3.9.1 +SPDXRef-pip-aiohttp-3.9.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-bs4-0.0.1 +SPDXRef-pip-bs4-0.0.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-Markdown-3.5.1 +SPDXRef-pip-Markdown-3.5.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-pymdown-extensions-10.5 +SPDXRef-pip-pymdown-extensions-10.5 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-pytest-asyncio-0.21.1 +SPDXRef-pip-pytest-asyncio-0.21.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-tenacity-8.2.3 +SPDXRef-pip-tenacity-8.2.3 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 +SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-tqdm-4.66.1 +SPDXRef-pip-tqdm-4.66.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 + + + + + + + + diff --git a/assessments/projects/cloudevents/images/apex-logo.png b/assessments/projects/cloudevents/images/apex-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..26fc9118d207198b62b667f2c23a08e14e0d3780 GIT binary patch literal 89074 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 literal 0 HcmV?d00001 diff --git a/assessments/projects/cloudevents/images/async-api-logo.png b/assessments/projects/cloudevents/images/async-api-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9bff44a410d0a41a23d9edc041e46bece2e0c623 GIT binary patch literal 75451 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
    kU*clhskd7@Ywj~9IV2&uEVNV-5B`I;E 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 literal 0 HcmV?d00001 diff --git a/assessments/projects/cloudevents/images/cloudevents-actions.png b/assessments/projects/cloudevents/images/cloudevents-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..d64a2428788aeace5cf6fbc61911c52a79f559ab GIT binary patch literal 27490 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 CmaOss literal 0 HcmV?d00001 diff --git a/assessments/projects/cloudevents/images/cloudevents-logo.png b/assessments/projects/cloudevents/images/cloudevents-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa3de416a9a86f1f0bc5df150ed434f5f43911 GIT binary patch literal 26672 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 \ No newline at end of file diff --git a/assessments/projects/cloudevents/images/soap-evenlope.png b/assessments/projects/cloudevents/images/soap-evenlope.png new file mode 100644 index 0000000000000000000000000000000000000000..8a84cef82ca7a955aa0ce43abff15502fcde2717 GIT binary patch literal 35630 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 literal 0 HcmV?d00001 diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md new file mode 100644 index 000000000..0bd6e411b --- /dev/null +++ b/assessments/projects/cloudevents/self-assessment.md @@ -0,0 +1,1052 @@ +# CloudEvents self-assessment + +September 26, 2023 + +Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari +(@Kushal-kothari) and Devyani Bairagya (@devyani-14). + +Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV) and Doug Davis +(@duglin). + +This document elaborates and explores the design goals for +[CloudEvents](https://cloudevents.io/) as well as a security assessment of the +software. It was written in collaboration with the CloudEvents team. All +communications with CloudEvents were recorded on a [separate +document](CE-maintainers-communications.md). + +## Table of contents + +* [Table of contents](#table-of-contents) +* [Metadata](#metadata) + * [Security links](#security-links) +* [Overview](#overview) + * [Background](#background) + * [Actors](#actors) + * [Actions](#actions) + * [Goals](#goals) + * [Non-goals](#non-goals) +* [Self-assessment use](#self-assessment-use) +* [Security functions and features](#security-functions-and-features) + * [Critical Security Components](#critical-security-components) + * [Security Relevant Components](#security-relevant-components) +* [Project compliance](#project-compliance) +* [Secure development practices](#secure-development-practices) + * [Development Pipeline](#development-pipeline) + * [Communications Channels](#communications-channels) + * [Ecosystem](#ecosystem) +* [Security Issue Resolution](#security-issue-resolution) + * [CloudEvents Specification](#cloudevents-specification) + * [CloudEvents SDKs](#cloudevents-sdks) +* [Lightweight Threat Modelling](#lightweight-threat-modelling) + * [Threat Modelling Notes](#threat-modelling-notes) + * [Threat Scenarios](#threat-scenarios) + * [Theoretical Threats](#theoretical-threats) + * [Potential threats](#potential-threats) + * [Conclusion](#conclusion) + * [Recommendations](#recommendations) +* [Action Items](#action-items) + * [[Action Item 1] Setup Snyk for SDKs](#action-item-1-setup-snyk-for-sdks) + * [[Action Item 2] Regular SDK Security + Audits](#action-item-2-regular-sdk-security-audits) + * [[Action Item 3] Enforce governance rules throughout SDK + development](#action-item-3-enforce-governance-rules-throughout-sdk-development) + * [[Action Item 4] Enhanced Encryption and Data Validation + Mechanisms](#action-item-4-enhanced-encryption-and-data-validation-mechanisms) + * [[Action Item 5] Documentation and Knowledge + Sharing](#action-item-5-documentation-and-knowledge-sharing) + * [[Action Item 6] Community Engagement and + Feedback](#action-item-6-community-engagement-and-feedback) +* [Appendix](#appendix) + * [Known Issues Over Time](#known-issues-over-time) + * [CII Best Practices](#cii-best-practices) + * [Case Studies](#case-studies) + * [Related Projects and Vendors](#related-projects-and-vendors) +* [References](#references) + +## Metadata + +| | | +| -- | -- | +| Software | [CloudEvents Repository](https://github.com/cloudevents/spec) | +| Security Provider | CloudEvents is not a security provider | +| CloudEvents Specification Language | Markdown | +| CloudEvents SDK Languages | Python, C#/.NET, Go, Java, Javascript, PHP, PowerShell, Ruby and Rust | +| SBOM | [CloudEvents SBOM generated by FOSSA](files/CloudEvents%20SBOM.spdx) | +| Technical Documents | [CloudEvents Documents](https://github.com/cloudevents/spec#cloudevents-documents) | +| | | + +### Security links + +| Doc | url | +| -- | -- | +| CloudEvents Security Assessment | | +| CloudEvents Privacy and Security Specification | | +| CloudEvents SDK Security Standards | | + +## Overview + +[CloudEvents](https://cloudevents.io/) is an open-source +[specification](https://github.com/cloudevents/spec) designed to articulate data +events. While these events are widely employed in various industries, the +absence of standardized guidelines for their composition has led to significant +divergence among developers. This lack of uniformity makes programmers create +distinct event-handling logic for each event source, impeding seamless +communication between different systems. CloudEvents aims to streamline the +process of declaring and delivering events, improving simplicity and +interoperability across diverse services and platforms. + +![CloudEvents Logo](images/cloudevents-logo.png) + +The project also provides [software development kits +(SDKs)](https://github.com/cloudevents/spec#sdks) for Go, JavaScript, Java, C#, +Ruby, PHP, PowerShell, Rust, and Python. These can be used to build event +routers, tracing systems, and other tools. + +### Background + +#### Event + +An +[event](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#event) +is a data entry that conveys an occurrence along with its surrounding context. +Events are transmitted from an event producer (the origin) to interested event +consumers. The transmission process may consider the information within the +event, but the event itself does not specify a particular destination for +routing. Events comprise two categories of information: Event Data, which +represents the incident, and Context metadata, which furnishes additional +contextual details about the incident. A single incident can generate more than +one event. + +There is no common language on events themselves. So when a new software is +created developers have to write new event handling processes for different +types of sources. This can become very chaotic and unorganized. + +CloudEvents was developed to address the need for non-uniformity in event data +formats in cloud and microservices environments. CloudEvents adopts a pragmatic +approach instead of enforcing a universal event format. While it provides a +structured layout, it acknowledges the diverse preferences in the industry. +Users can include event data and context attributes in a single document, and +the support for a binary format seamlessly integrates with existing event +structures. Therefore, CloudEvents standardizes the location for retrieving +shared metadata about an event without the need to parse the specific business +logic of the event. + +### Actors + +#### Event Consumer + +The [Event +Consumer](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#consumer) +is the entity or system interested in subscribing to different events. Receiving +Events from the producer will trigger further action that is up to the consumer. +A "consumer" receives the event and acts upon it, which might lead to the +occurrence of new events. + +#### Event Producer + +The [Event +Producer](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#producer) +is the entity or system that produces the "events". They are responsible for +wrapping event data in the CloudEvents specification. + +#### Event Mediator or Intermediary + +Depending on the architecture of the system, the [Event +Mediator](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#intermediary) +is the entity or system that is responsible for the distribution, processing and +routing of events to consumers. The event broker ensures reliable delivery and +may enforce security policies. + +### Actions + +#### Event Formatting + +Called by the producer and the consumer. An [Event +Format](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#event-format) +specifies how to serialize a CloudEvent as a sequence of bytes. Stand-alone +event formats, such as the JSON format, specify serialization independent of any +protocol or storage medium. The producer encodes the event, while the consumer +decodes the event. + +#### Protocol Binding + +A [protocol +binding](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#protocol-binding) +describes how events are sent and received over a given protocol. CloudEvents +defines encoding modes such as +[binary](https://github.com/cloudevents/spec/blob/main/cloudevents/bindings/kafka-protocol-binding.md#32-binary-content-mode) +and +[structured](https://github.com/cloudevents/spec/blob/main/cloudevents/bindings/kafka-protocol-binding.md#33-structured-content-mode) +for serializing a CloudEvent during transmission. + +* **Binary Content Mode:** The event data is placed in the message body, while + the event attributes (metadata) are included in the message's metadata. This + mode is commonly employed when a CloudEvent producer wants to incorporate + metadata into an existing event without affecting the message body. Binary + encoding will maintain a receiver's event processing since the message's + metadata often accommodates extension attributes. + +* **Structured Content Mode:** The event data and attributes are encoded within + the message body following a specific event format. This mode maintains event + metadata and data in the payload, facilitating the straightforward forwarding + of the same event across various routing hops and protocols. + +Protocol bindings MAY choose to use an Event Format to map an event directly to +the transport envelope body, or MAY provide additional formatting and structure +to the envelope. For example, a wrapper around a structured-mode message might +be used, or several messages could be batched together into a transport envelope +body. + +![CloudEvents Actions](images/cloudevents-actions.png) + +### Goals + +Listed below are the main [goals of +CloudEvents](https://github.com/cloudevents/spec/blob/main/cloudevents/primer.md#design-goals). + +* Simplify event declaration and delivery across services, platforms and + systems. +* Define interoperability of event systems that allow services to produce or + consume events, where the producer and consumer can be developed and deployed + independently. +* Establish a structured framework for the exchange of event data among services + by standardizing the location for storing and retrieving common metadata + related to events. +* Provide specifications for serializing events in different formats and + protocols. + +### Non-goals + +The following are considered as [non-goals of +CloudEvents](https://github.com/cloudevents/spec/blob/main/cloudevents/primer.md#non-goals): + +* Function build and invocation process. +* Language-specific runtime APIs. +* Selecting a single identity/access control system. +* Inclusion of protocol-level routing information. +* Event persistence processes. +* Mechanism for Authorization, Data Integrity and Confidentiality. +* Change the implementation details of underlying communication protocols. +* Define the processing logic for events within different applications and + systems. + +## Self-assessment use + +This self-assessment is created by the CloudEvents team to perform an internal +analysis of the project's security. It is not intended to provide a security +audit of CloudEvents, or function as an independent assessment or attestation of +CloudEvents's security health. + +This document serves to provide CloudEvents users with an initial understanding +of CloudEvents's security, where to find existing security documentation, +CloudEvents plans for security, and a general overview of CloudEvents security +practices, both for the development of CloudEvents as well as security of +CloudEvents. + +This document provides the CNCF TAG-Security with an initial understanding of +CloudEvents to assist in a joint assessment, necessary for projects under +incubation. Taken together, this document and the joint assessment serve as a +cornerstone as CloudEvents is under review for a Graduation status. + +## Security functions and features + +### Critical Security Components + +Unlike similar projects in the past such as [Simple Object Access Protocol +(SOAP)](https://en.wikipedia.org/wiki/SOAP), CloudEvents does not attempt to +create new security protocols but relies on established, robust protocols. As +emphasized earlier, the Specification exclusively concentrates on standardizing +event creation and their representation across various protocols, avoiding +defining how exactly they should be transported. + +#### Event Identification + +Every event within CloudEvents is uniquely identified by a specific combination +of +[source](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#source-1) +and +[id](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#id). +Producers must guarantee that each unique event's concatenation of `source` and +`id` remains distinctive. This practice aids in distinguishing events and +preventing the processing of duplicate events. + +#### Event Type + +The +[type](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#type) +attribute holds a value that characterizes the nature of the event associated +with the initial incident. This attribute is frequently utilized for routing, +observability, policy enforcement, and similar purposes. The producer determines +the format, which may contain details such as the version of the `type`. + +#### Event Subject + +The +[subject](https://github.com/cloudevents/spec/blob/130ba0d183f5e45c1d141f5c1f272cf71d898623/cloudevents/spec.md#subject) +attribute explains the event's subject within the context of the event producer. +Clarifying the subject in contextual metadata proves particularly beneficial in +scenarios involving generic subscription filtering, where middleware may lack +the ability to interpret the content within the `data` attribute. + +#### Event Data Integrity + +CloudEvents does not focus on defining the methods for safeguarding data +integrity. Therefore, it is the choice of the user/developer to address this +aspect. One approach to enhance security is to apply encryption to event data +specific to the domain, restricting visibility to trusted entities. The choice +of the encryption mechanism is collaboratively determined by event producers and +consumers, which is an implementation detail defined by the user. + +#### Privacy and Sensitive Information Handling + +Context attributes should not carry or represent sensitive information. +CloudEvent producers, consumers, and intermediaries can inspect and log context +attributes. + +### Security Relevant Components + +#### Transport Security + +Although CloudEvents does not prescribe specific transport security mechanisms, +it is typically conveyed over secure protocols such as HTTPS, ensuring integrity +and confidentiality. + +#### Event Source Authentication + +The `source` attribute within a CloudEvent provides context for the event +occurrence, establishing reliable and secure source identification. + +#### Data Schema Verification + +The `data` attribute in a CloudEvent contains the actual event data, and its +schema can be defined and validated for consistency and accuracy. This +verification process helps to prevent issues arising from malformed or +unexpected data. + +## Project compliance + +As of the latest security assessment, CloudEvents does not explicitly document +compliance with specific security standards such as PCI-DSS, COBIT, ISO, GDPR, +etc. Current efforts are focused on evaluating compliance with these standards +and ensuring that CloudEvents adheres to industry best practices in security and +privacy. + +## Secure development practices + +### Development Pipeline + +#### CloudEvents Membership + +There are three project [membership +categories](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md#membership), +which make it harder for a single individual to make bad changes to the +repository. + +* **Member**: Anyone participating in group activities across communication + channels. No formal registration is required. +* **Voting Member**: Criteria for Voting Members are outlined in the [Voting + section of the governance + page](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md#voting). + They have equal influence as Members, with specific voting rights during + formal processes. +* **Admin**: Members with extra privileges for administrative tasks like + managing the website and GitHub repos. Admin actions require group knowledge + and consent, including the ability to merge/close PRs, subject to group + approval. Since the role of an 'Admin' is mainly administrative, the list of + Members within this group should not need to change regularly but can be done + with votes. + +#### CloudEvents SDK Community + +The CloudEvents SDK community is organized as follows: + +* Every SDK has its own [Github Team](https://github.com/cloudevents). +* The union of all the SDK maintainers assembles the SDK maintainers group. +* To propose a new SDK for the community, a PR should be opened in the spec + repository with the documentation changes necessary to point to the new + repository. + +CloudEvents defines an [SDK project as +healthy](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#ensuring-projects-health) +if it meets the criteria below. + +* It works with the latest version of the programming language; +* It supports the latest versions of the integrated libraries/frameworks; +* It receives security patches regularly; +* It supports the last N-1 major versions of CloudEvents spec, as defined in; + Contribution Acceptance; +* Issues and PRs are triaged (labeled, commented, reviewed, etc) regularly. + +Moreover, CloudEvents defines an SDK as `not actively maintained` if: + +* Issues and/or PRs have not been triaged from the SDK maintainers for 2 months +* Security patches have not been released from the SDK maintainers for 1 month + from CVE disclosures + +If a project does not meet the criteria above, the community can decide to [hand +over the +project](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#handover-to-a-new-maintainergroup-of-maintainers) +to a new group of maintainers through a voting process. In such cases, the +community may also decide to [archive the +project](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#archive-a-project) +instead. + +#### Contributing to CloudEvents + +##### General Instructions + +* Developers can either report a change or create a Github Issue, checking for + existing issues first. +* All Proposed changes will be done through Github Pull Requests (PRs). +* All patches must be signed by the author, with the sign-off being a simple + line at the end of the explanation for the patch. +* All commits should use the [Conventional Commits + Specification](https://www.conventionalcommits.org/en/v1.0.0/). +* Pull Requests will be reviewed during [official + meetings](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md#meetings). + * Off-line reviews are recommended before meetings. + * Meetings happen every Thursday at 9 AM PT. +* Pull Requests will be resolved and merged during official meetings as a result + of a motion. + * Pull Requests should not be merged if substantial changes have been made in + the past 2 days. + +##### Pull Request process + +Usually, CloudEvents Pull Requests are expected to meet the following +[criteria](https://github.com/cloudevents/spec/blob/main/docs/SDK-PR-guidelines.md) +before being merged: + +* The author of the PR asks for it to be discussed and reviewed in an upcoming + meeting. +* All comments have been addressed. +* PRs that have objections/concerns will be discussed off-line by interested + parties. A resolution and updated PR will be expected from those talks. + +#### Versioning + +The release process follows [Semantic Versioning (semver)](https://semver.org/), +grouping specifications for simultaneous release. Non-breaking changes use +"patch" updates while breaking changes follow `semver`. Tags are applied to the +main branch, and additional branches, like core-v2.0, may be created, and then +deleted post-merger. Creating a release involves updating versions via Pull +requests, merging, and announcing changes. + +### Communications Channels + +CloudEvents use different types of [communication +channels](https://github.com/cloudevents/spec#communications) for different +purposes. + +* Internal communications channels: + * [Meetings](https://docs.google.com/document/d/1OVF68rpuPK5shIHILK9JOqlZBbfe91RNzQ7u_P7YCDE/edit?usp=sharing) + * Email + * GitHub Issues +* Inbound communications channels: + * [CloudEvents CNCF Email Address](cncf-cloudevents@lists.cncf.io) + * [CNCF Slack workspace](http://slack.cncf.io/) + * [CNCF Meeting Calendar](https://www.cncf.io/community/calendar/) +* Outgoing communications channels: + * [CloudEvents CNCF + Subscription](https://lists.cncf.io/g/cncf-cloudevents-sdk) + +### Ecosystem + +CloudEvents is integrated with different cloud-native technologies and services. +Its goal is to create interoperability in event-driven architecture. + +CloudEvents has many +[adopters](https://cloudevents.io/#:~:text=CloudEvents%20Adopters), including: + +* Adobe I/O Events +* Azure Event Grid +* European Commission +* Google Cloud Eventarc +* IBM Cloud Code Engine +* Oracle Cloud +* VMware Event Broker Appliance + +## Security Issue Resolution + +### CloudEvents Specification + +To report an issue, or to a new idea, contributors can open a new issue on the +GitHub repository. However, they should check if a similar issue already exists. + +CloudEvents also provides a dedicated [email +address](cncf-cloudevents-security@lists.cncf.io) and a [Security Mailing +List](https://lists.cncf.io/g/cncf-cloudevents-security/topics) for reporting +security concerns related to the specification or the SDKs. + +### CloudEvents SDKs + +#### Responsible Disclosures Process + +Similarly to the CloudEvents specification, to report an issue about one of the +CloudEvents SDKs, contributors can open a new issue on the GitHub repository, as +well as using the dedicated [email +address](cncf-cloudevents-security@lists.cncf.io) and the [Security Mailing +List](https://lists.cncf.io/g/cncf-cloudevents-security/topics). + +#### Vulnerability Response Process + +It is the responsibility of the CloudEvents SDK maintainers to triage issues and +PRs from their respective repositories, as well as frequently release security +patches to issues found. As mentioned in [CloudEvents SDK +Community](#cloudevents-sdk-community), the maintainers cannot abstain from +triaging issues and PRs for more than 2 months, or releasing security patches +for more than 1 month. Otherwise, their project will be marked as `not actively +maintained`, which can lead to them losing the management of the SDK repository. + +#### Incident Response + +##### Discussing the Issue + +After an issue is reported, the maintainers of the SDK will contact the author +of the issue, talking through it to understand whether it should be resolved, +its priority, how a solution could be implemented, and who will implement it, +which can be done through the GitHub issues page of the SDK, Slack, a meeting or +any other CloudEvents communication channel. + +##### Solving the Issue + +Once a security patch is written, the contributor should make a Pull Request and +mark it as reviewed. The PR will be reviewed, improved, and approved by the +other maintainers of the SDK. With that, a security patch is released by +following the process described in [Contributing to +CloudEvents](#contributing-to-cloudevents). + +## Lightweight Threat Modelling + +* Project data classification: Sensitive +* Owner(s) and/or maintainer(s): + * Name: [CloudEvents administrators and + members](https://github.com/cloudevents/spec/blob/main/docs/contributors.md) + * Representation: [Cloud Native Computing Foundation + (CNCF)](https://www.cncf.io/) + * Contact: [CloudEvents Website](https://cloudevents.io/) + +### Threat Modelling Notes + +* Where does it store data? + * CloudEvents primarily defines a specification and does not store data + itself. +* Is encryption used for data in transit and at rest? + * The specification recommends using secure protocols for data in transit. +* Is data from potentially untrusted sources subject to input validation? + * Yes, validation is part of the SDK implementations. + +### Threat Scenarios + +* **An External Attacker:** Could potentially send malformed or malicious event + data to disrupt services that consume CloudEvents. +* **An External Attacker with valid access:** Could potentially inject false + events to lead to incorrect actions being taken by consumers. +* **An Internal Attacker:** Might be able to alter event definitions or + intercept event data in transit within systems that utilize CloudEvents. +* **A Malicious Internal User:** Could misuse the event system to trigger + unauthorized actions or services. + +### Theoretical Threats + +* **Deployment Architecture (pod and namespace configuration):** Not applicable + to CloudEvents as a specification. + +* **Networking (internal and external):** Networking controls are typically + managed by the underlying infrastructure and transport protocols used for + sending and receiving CloudEvents. + +* **Cryptography:** CloudEvents does not provide encryption methods or + cryptographic implementations, all implementations are left up to the users' + choice. + +* **Audit and logging:** This is typically handled by the platforms and services + that implement CloudEvents. + +### Potential threats + +#### The SDK management teams may implement vulnerabilities while implementing SDKs + +Trail Of Bits was able to identify 7 different security concerns regarding the +different CloudEvents SDKs. While these issues have been addressed, the +expanding number of SDKs raises the possibility of introducing additional +vulnerabilities. These vulnerabilities could serve as potential weak points in +systems utilizing CloudEvents. + +Mitigations: + +* Frequently triage and patch issues. +* Always check if the code can be trusted before merging a Pull Request. +* Perform security audits when possible. + +#### Man in the middle acting as Event Mediator + +If an attacker can act as a man in the middle for an event mediator, the +intruder may be able to read the events from the event generator or modify them +before they arrive at the event consumer. + +Mitigations: + +* Users should implement infrastructure around CloudEvents making it difficult + for bad actors to get access to the systems using CloudEvents or the channels + delivering the events. + +#### CloudEvent Modification in Transit + +If event data is not properly encrypted, it could be intercepted and modified by +an attacker, leading to misinformation or unauthorized actions. + +Mitigations: + +* Users should encrypt, validate, and monitor all important data to reduce the + impact of modifications during transit. +* User permissions should be routinely checked to ensure that only the + authorized users have the required capabilities. + +#### Improper encoding and decoding of data + +A bad actor can send malicious or faulty data with a CloudEvent wrapper to the +main producer. If the decoding of that data is not handled correctly it can lead +to the system crashing. + +Mitigations: + +* All actors (event producer, event mediator event consumer) should check if the + data is correctly formatted to the CloudEvents Specification, not passing the + data forward in such scenarios, but discarding or properly handling it. +* All SDKs should help in handling these scenarios. + +#### Committing vulnerable code + +Although there are many checks before a Pull Request is accepted, a developer +can still commit code to the source repository that has vulnerabilities if +nobody notices it. This can be either because of malicious intent or because of +mistakes like vulnerable libraries being used. + +Mitigations: + +* A risk assessment can be done to uncover any potential gaps in the security + controls. +* All secure development practices established by CloudEvents and CNCF should be + strictly followed to prevent vulnerabilities from being introduced. + +#### Malicious CloudEvent Wrapper + +An attacker could wrap malicious content in a CloudEvent to exploit +vulnerabilities in event consumers. + +Mitigations: + +* Users should check for malicious content when receiving CloudEvent data, not + trusting the source whenever possible. + +### Conclusion + +Overall, CloudEvents has solid governance rules and management practices for the +[specification](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md) +and the +[SDKs](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md). +These rules delineate procedures that prioritize security patching, with strict +enforcement mechanisms. Clear articulation of goals and non-goals assists users +in discerning the aspects they need to self-enforce. + +A notable challenge within the project revolves around the numerous SDKs +developed by the CloudEvents SDK communities. Certain SDKs, particularly the +newer ones, are susceptible to security vulnerabilities. While governance rules +play a crucial role in ensuring continuous patching and monitoring, some SDKs +have experienced vulnerabilities in the past, highlighting an ongoing concern. + +During a [team meeting on November 30, 2023](https://youtu.be/2OZPTQOqFEw), a +CloudEvents administrator also mentioned plans to introduce [bots for regularly +assessing the health of each +SDK](https://github.com/cloudevents/spec/issues/1235). This proactive measure +aims to address potential security concerns that may arise in the future, +mitigating both technical and managerial aspects across various SDKs. + +### Recommendations + +As mentioned by CloudEvents, the maintainers of SDKs must release security +patches and fix issues frequently for the project to be marked as active. It is +essential for the maintainers of each SDK to frequently triage and release +patches to the security issues found, which can solve problems such as the ones +found by Trail Of Bits. Moreover, it is important for users to frequently check +and install updates to their CloudEvents SDK installation. + +## Action Items + +### [Action Item 1] Setup Snyk for SDKs + +* **GitHub Issue Link:** [Setup Snyk for + SDKs](https://github.com/cloudevents/spec/issues/1235) + +#### [Action Item 1] Objective + +Improve the security of CloudEvents SDKs by integrating Snyk for automatic +dependency assessments. This integration will both conduct comprehensive scans +for vulnerabilities within the SDK and systematically search the internet for +recently reported issues or vulnerabilities linked to the library dependencies +used in the development of CloudEvents SDKs. The automated tool will alert the +development team to threats, helping the implementation of proactive measures +for identifying, addressing, and mitigating potential risks. + +#### [Action Item 1] Steps + +Develop and deploy an automated bot system to monitor the health of various SDKs +by integrating Snyk into the development workflow. Collaborate with the team to +conceptualize the bot's features, ensuring its capability to evaluate +maintenance status, address issues, and implement patch updates following the +rules outlined in the governance documents. Configure Snyk to perform +dependaBot-type checks, ensuring comprehensive analysis of SDK dependencies. +Investigate the feasibility and requirements for adding a dedicated security bot +to scan for potential security issues. Document the integration process and +provide guidelines for ongoing usage within the development environment. + +##### Initial Setup + +1. [Install the Snyk + CLI](https://support.snyk.io/hc/en-us/articles/360003812538-Install-the-Snyk-CLI) + on a local machine according to the operating system. +2. Run the command `Snyk auth` to authenticate the Snyk account. Follow the + prompts to log in and authenticate. +3. Create the CloudEvents Snyk organization in the [Snyk + Dashboard](https://app.snyk.io/dashboard). +4. In the Snyk Dashboard, go to the organization settings and add the [GitHub + Integration](https://docs.snyk.io/integrate-with-snyk/git-repositories-scms-integrations-with-snyk/snyk-github-integration) + for CloudEvents account under `Source Control Integrations.` + +##### Individual SDK Setup + +1. In the Snyk Dashboard, click `Add Project` and select the GitHub repository + containing the CloudEvents SDK code. +2. Configure Snyk Policies by defining policies for the project to set + thresholds for vulnerability severity levels. + * This helps to control when to fail a build or raise an alert. + * The [Security Audit performed by Trail of + Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) + could be used as a guide on which types and severities of vulnerabilities + should be analyzed. +3. Enable GitHub Integration for the CloudEvents project to receive automatic + pull requests for fixing vulnerabilities, which can streamline the + remediation process. +4. Configure notification settings to alert all interested CloudEvents admins + and members for new vulnerabilities or policy violations, which should + include at least the maintainers of the specific SDK. +5. Snyk should also be integrated with the CloudEvents Semantic Versioning + control system, so Snyk can automatically update its vulnerability database + and scan for new vulnerabilities. + +##### Configure Snyk to perform Dependabot-style checks + +1. Go to the CloudEvents SDK project in the Snyk Dashboard. +2. Navigate to the `Settings` tab. +3. Under `Policy`, enable the `Auto-fix` option. + +### [Action Item 2] Regular SDK Security Audits + +#### [Action Item 2] Objective + +Establish a regular schedule for security audits of CloudEvents SDKs. + +#### [Action Item 2] Steps + +Specify the frequency of audits, assemble the audit team, identify the tools and +services required, and manage the coordination of audit activities. + +### [Action Item 3] Enforce governance rules throughout SDK development + +#### [Action Item 3] Objective + +Implement a [CI/CD +Pipeline](https://www.redhat.com/en/topics/devops/what-cicd-pipeline) to enforce +the CloudEvents governance rules. A CI/CD serves as a dynamic framework guiding +the entire software development lifecycle, encompassing key stages like +building, rigorous testing, and seamless code deployment. Given the thorough of +the CloudEvents Governance rules, integrating a CI/CD pipeline would both ensure +adherence to these rules and fortify security measures, promoting a more robust +environment for the development of the SDKs. This would lower the amount of +human mistakes in this process and, consequently, the chances of new +vulnerabilities being created. + +#### [Action Item 3] Steps + +Implementing a CI/CD pipeline for CloudEvents involves using Git for source code +management and selecting a CI/CD platform like Jenkins or GitHub Actions. The +pipeline should include a build stage to compile code and create artifacts, and +a test stage for unit and integration tests, with a focus on validating +CloudEvents generation and consumption. Artifacts should be stored in container +registries or repositories, and the deployment stage completes the process by +deploying to the target environment. This automated pipeline ensures efficient +and reliable development, testing, and deployment of applications using +CloudEvents. + +### [Action Item 4] Enhanced Encryption and Data Validation Mechanisms + +#### [Action Item 4] Objective + +Emphasize to the user the goals and non-goals of CloudEvents. + +#### [Action Item 4] Steps + +Highlight to the user the importance of establishing a robust infrastructure for +encryption and data validation practices around the CloudEvents implementation. + +### [Action Item 5] Documentation and Knowledge Sharing + +#### [Action Item 5] Objective + +Continue improving the documentation related to security practices and + vulnerabilities within CloudEvents SDKs. + +#### [Action Item 5] Steps + +Create comprehensive and accessible documentation that covers security best +practices, identified vulnerabilities, resolved issues, public Software Bill of +Materials, and strategies for mitigation of vulnerabilities. + +### [Action Item 6] Community Engagement and Feedback + +#### [Action Item 6] Objective + +Enhance engagement with the CloudEvents user community for feedback and insights +on security. + +#### [Action Item 6] Steps + +Establish channels for consistent feedback, administer community surveys, and +arrange Q&A sessions. Evaluate GitHub issues, engage in discussions with +authors, formulate mitigation or solution strategies, and execute them. +Prioritize and resolve security vulnerabilities identified by users through +proper triage processes. + +## Appendix + +### Known Issues Over Time + +#### Issues found by Trail of Bits + +The main security assessment on CloudEvents was a [Security Audit performed by +Trail of +Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) +released on October 26, 2022. These were mainly concerning the different +CloudEvents SDK, not the specification. All of the security issues found by +Trail of Bits have already been addressed. + +Below are listed the findings by Trail Of Bits with their descriptions. + +##### [Java SDK] Reliance on default encoding + +* **Severity:** Undetermined +* **Difficulty:** Low +* **Type:** Undefined Behavior +* **Finding ID:** TOB-CE-1 +* **Target:** Java SDK + +Several instances were found where the getByte() standard Java API is utilized +without specifying an encoding, leading the [Java +SDK](https://github.com/cloudevents/sdk-java) to rely on system default +encoding. This can result in varying processing of event data across platforms. +While the specification mandates adherence to appropriate and RFC-compliant +encodings, there is room for improvement in the Java SDK implementation and +documentation to emphasize the significance of consistent encoding among actors. +Although not all instances are problematic, especially when handling binary +data, it is crucial to document and address this behavior in the SDK +implementation, documentation, and provided examples. + +##### [Java SDK] Outdated Vulnerable Dependencies + +* **Severity:** Undetermined +* **Difficulty:** Medium +* **Type:** Patching +* **Finding ID:** TOB-CE-2 +* **Target:** Java SDK + +The [Java SDK](https://github.com/cloudevents/sdk-java) contains multiple +outdated dependencies with publicly known vulnerabilities, including high- and +medium-risk ones. The Snyk tool automatically audited each module due to time +constraints and ease of remediation. A manual review of exploitability within +the SDK's context was not conducted. + +##### [JavaScript SDK] Potential XSS in httpTransport() + +* **Severity:** Undetermined +* **Difficulty:** Low +* **Type:** Data Validation +* **Finding ID:** TOB-CE-3 +* **Target:** sdk-javascript/src/transport/http/index.ts + +The [JavaScript SDK](https://github.com/cloudevents/sdk-javascript)'s +httpTransport() method exposes raw error messages from the endpoint, potentially +leading to XSS vulnerabilities if user-controlled data is reflected without +proper sanitization in the rendered web page. While the specification does not +mandate validation or sanitization, the SDK documentation should emphasize the +risk of unsanitized HTTP responses when using this API in an emitter. + +##### [Go SDK] Outdated Vulnerable Dependencies + +* **Severity:** Undetermined +* **Difficulty:** Low +* **Type:** Patching +* **Finding ID:** TOB-CE-4 +* **Target:** Go SDK + +The [Go SDK](https://github.com/cloudevents/sdk-go) has multiple outdated +dependencies with known vulnerabilities. The open-source Snyk tool automatically +audited each module. Due to time constraints and ease of remediation, a manual +review of exploitability within the SDK's context was skipped. + +##### [Go SDK] Downcasting of 64-bit integer + +* **Severity:** Undetermined +* **Difficulty:** Low +* **Type:** Undefined Behavior +* **Finding ID:** TOB-CE-5 +* **Target:** sql/v2/parser/expression_visitor.go, sql/v2/utils/casting.go + +In the [Go SDK](https://github.com/cloudevents/sdk-go), the `strconv.Atoi` +function parses a machine-dependent integer (int64 for 64-bit targets). In some +code instances, the result from strconv.Atoi is later converted to a smaller +type (int16 or int32), risking overflow with specific inputs. + +##### [Go SDK] ReadHeaderTimeout not configured + +* **Severity:** Informational +* **Difficulty:** Low +* **Type:** Denial of Service +* **Finding ID:** TOB-CE-6 +* **Target:** Go SDK + +The [Go SDK](https://github.com/cloudevents/sdk-go) http.server API offers four +timeouts, including ReadHeaderTimeout. Failure to set a value for this timeout +makes the listener instance susceptible to Slowloris DoS attacks. + +##### [CSharp SDK] Outdated Vulnerable Dependencies + +* **Severity:** Undetermined +* **Difficulty:** Low +* **Type:** Patching +* **Finding ID:** TOB-CE-7 +* **Target:** CSharp SDK + +The [CSharp SDK](https://github.com/cloudevents/sdk-csharp) has multiple +outdated dependencies with known vulnerabilities. Using the open-source Snyk +tool, each module was automatically audited. Due to time constraints and ease of +remediation, a manual review of exploitability within the SDK's context was +skipped. + +### CII Best Practices + +CloudEvents aims to align with the Core Infrastructure Initiative (CII) Best +Practices, focusing on: + +* **Security Response Process**: Establishing a comprehensive process for +reporting and addressing security vulnerabilities. +* **Automated Testing**: Implementing automated testing in the development +pipeline for consistent security and vulnerability checks. +* **Dependency Management**: Regular auditing and updating of third-party +dependencies to mitigate security risks. +* **Documentation**: Enhancing documentation to provide clear guidance on +security considerations for developers. These efforts are part of CloudEvents' +commitment to maintaining high standards in open-source software development. + +### Case Studies + +CloudEvents has the potential to revolutionize event-driven architectures in +various sectors. Below are a couple of enhanced case studies demonstrating its +applicability. + +#### Healthcare Data Management + +CloudEvents plays a pivotal role in a healthcare system for managing patient +data. In this scenario, it is used to track and route events such as patient +admissions, lab results, and medication orders. By standardizing event formats, +CloudEvents ensures seamless integration between different hospital systems, +including Electronic Health Records (EHRs) and Laboratory Information Management +Systems (LIMS), enhancing patient care and operational efficiency. + +#### Smart City Infrastructure Monitoring + +In a smart city environment, CloudEvents is employed to aggregate and analyze +data from a multitude of sensors and IoT devices across the city. This includes +traffic flow sensors, public transport updates, and utility usage meters. By +utilizing CloudEvents for real-time data processing and event routing, city +administrators can make informed decisions about traffic management, public +transport schedules, and resource allocation, leading to improved city services +and resident satisfaction. + +### Related Projects and Vendors + +#### OpenTelemetry + +![OpenTelemetry Logo](images/opentelemetry-logo.svg) + +[OpenTelemetry](https://opentelemetry.io/) is a collection of APIs, SDKs, and +tools. It can be used to instrument, generate, collect, and export telemetry +data (metrics, logs, and traces) to help analyze software performance and +behavior. + +#### AsyncAPI + +![AsyncAPI Logo](images/async-api-logo.png) + +[AsyncAPI](https://www.asyncapi.com/) is an open-source initiative that seeks to +improve the current state of Event-Driven Architecture (EDA). Their long-term +goal is to make working with EDAs as easy as working with REST APIs. That goes +from documentation to code generation, and from discovery to event management. + +#### Event-B + +[Event-B](https://www.event-b.org/) is a formal method for system-level modeling +and analysis. Key features of Event-B are the use of set theory as a modeling +notation, the use of refinement to represent systems at different abstraction +levels and the use of mathematical proof to verify consistency between +refinement levels. + +#### Simple Object Access Protocol (SOAP) + +[SOAP](https://en.wikipedia.org/wiki/SOAP) is a messaging protocol specification +designed for the exchange of structured information within the implementation of +web services on computer networks. + +![SOAP Envelope](images/soap-evenlope.png) + +This protocol utilizes XML Information Set as its message format and depends on +application layer protocols, primarily Hypertext Transfer Protocol (HTTP), +though certain legacy systems may communicate using Simple Mail Transfer +Protocol (SMTP) for message negotiation and transmission. + +![SOAP web service](images/soap-webservice.png) + +According to a CloudEvents maintainer, one of the main distinctions between SOAP +and CloudEvents is the fact that the latter does not aim to develop new security +protocols. Instead, it relies on existing and resilient protocols. As mentioned +before, the CloudEvents Specification focuses solely on standardizing the +creation and representation of events across different protocols, intentionally +steering clear of specifying methods for their transportation. + +#### Apex Event Specification + +![Apex Logo](images/apex-logo.png) + +The [Apex Event Specification Guide +(ESG)](https://insights.eventscouncil.org/Portals/0/APEX_Event_Specifications_Guide.pdf) +is a written document that contains all the details of an event. The ESG is used +by event organizers to communicate information to venues and suppliers. The ESG +is a three-part template that includes: Narrative, Schedule, and Function +orders. + +This is an older document used across many engineering fields, which is not +restricted to computer science, making it different from the other examples. +However, it is an example of event specification being widely used in industry, +including more physical areas such as mechanical engineering and factories. + +## References + +* [CloudEvents Website](https://cloudevents.io/) +* [CloudEvents GitHub](https://github.com/cloudevents) +* [CloudEvents Security Assessment by Trail of + Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) +* [Security Assessment Guide](https://github.com/Rana-KV/ISP) +* [Sample Security + Assessment](https://github.com/Rana-KV/tag-security/blob/main/assessments/projects/karmada/self-assessment.md#threat-modeling-with-stride) +* [Open and Secure + Book](https://github.com/cncf/tag-security/blob/main/assessments/Open_and_Secure.pdf) From a6c5f6ed1d9218db2ddcde40b01ca81a952d6703 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Fri, 8 Dec 2023 12:41:00 -0500 Subject: [PATCH 02/18] Removed SBOM and notes Signed-off-by: Igor8mr Co-authored-by: MatthewZGong Co-authored-by: devyani-14 Co-authored-by: Kushal-kothari --- .../CE-maintainers-communications.md | 213 ------------------ .../cloudevents/files/CloudEvents SBOM.spdx | 174 -------------- .../projects/cloudevents/self-assessment.md | 1 - 3 files changed, 388 deletions(-) delete mode 100644 assessments/projects/cloudevents/CE-maintainers-communications.md delete mode 100644 assessments/projects/cloudevents/files/CloudEvents SBOM.spdx diff --git a/assessments/projects/cloudevents/CE-maintainers-communications.md b/assessments/projects/cloudevents/CE-maintainers-communications.md deleted file mode 100644 index 585b08c9b..000000000 --- a/assessments/projects/cloudevents/CE-maintainers-communications.md +++ /dev/null @@ -1,213 +0,0 @@ -# Communications with CloudEvents Maintainers - -## Slack Communications - -* **Security Pals Involved:** - * Igor Rodrigues (Igor Rodrigues) -* **CloudEvents Team Members Involved:** - * Doug Davis (dug) - -### Slack Report - -#### Igor Rodrigues (Nov 29th at 4:29:13 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701293353624819) - -Hello all, I'm a student at NYU involved in the SecurityPal effort from TAG -Security. Our group is conducting a security assessment on CloudEvents, which we -will later submit to the [TAG Security Assessments -Repository](https://github.com/cncf/tag-security/tree/main). We have completed -an [initial -evaluation](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md) -of the project and would appreciate your feedback to validate the information we -included. We also want to know if there are additional aspects we should include -in the assessment to correctly represent your project, along with more details -for sections like [security issue -resolution](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#security-issue-resolution) -and [secure development -practices](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#secure-development-practices). -Please, feel free to share your thoughts here on Slack, on GitHub, or on a call. -Thank you! - -#### Dug (Nov 29th at 8:02:04 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701306124114029?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Hi @Igor Rodrigues - will take a look. Just curious though, what made you decide -to analyze CloudEvents? - -#### Igor Rodrigues (Nov 29th at 8:36:26 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701308186825319?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Hi @dug, thank you. The assessment is one of our assignments for a class we are -taking with Professor Justin Cappos. Each group was assigned to a CNCF project, -and ours was CloudEvents. The project is interesting, so we are trying to do a -bit more than expected. I hope the assessment helps in the future. - -#### Dug (Nov 30th at 10:24:13 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701357853677559?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -@Igor Rodrigues thanks. Just a few comments from my quick scan: - -* Where do you see ANTRL being used? I'm surprised you didn't include markdown - in the list despite it not being a "programming language", being a "spec" - markdown is kind of our "language" :slightly_smiling_face: -* `CloudEvents was developed to address the lack of uniformity in event data - format...` be a bit careful here. While CE does provide a "structured" format, - that's just there are times when people want the event data and context - attributes in one doc. In general though CE is NOT trying to define "yet - another common event format (one format to rule them all)". In particular, - many people use/prefer "binary" format because it just augments their existing - events. And even with "structured", the stuff that does into the `data` - attribute is wide open - and should be defined by the business. I just don't - want people to think we're making the same mistake as other folks who tried to - force one format for all events. Rather CE is about standardizing "where to - find common metadata about the event w/o having to parse/understand the event - specific format". -* Nit: in "Protocol Binding" section it mentions `structured-mode` but hasn't - defined that term yet. You may want to define binary vs structured CEs in the - doc before this section. -* Not sure what the "trust boundary" is meant to represent in the diagram since - "trust" is kind of orthogonal to the roles. -* Goals: may want to tweak some of those based on my comments above. Plus, some - of those aren't really goals for CE since CE doesn't control them. For - example, "generate events before consumers are listening" - a good idea, but - CE doesn't really talk about those in the spec itself. CE is just about the - format and how they might appear on the transports. With a few exceptions, it - doesn't get into the protocols themselves or event - management/subscriptions..... -* CE is under review for Graduation status right now... hopefully will be - approved very soon -* CE doesn't really describe any encryption mechanism or deal with integrity - - the text you wrote kind of implies CE addresses it. Perhaps say something like - it's an implementation detail/choice?? -* Ecosystem - might be good to link to the [cloudevents.io](cloudevents.io) site - which includes a list of adopters. -* The "Security issue resolution" section reads like an SDK specific section - - perhaps "SDK" should appear in the title to make it clear that the following - sections apply to the SDK repos and not the spec repo? -* There's also a new security mailing list people should use to report security - concerns: https://lists.cncf.io/g/cncf-cloudevents-security/topics -* There is no "CloudEvents Steering Committee" that's mentioned in the Threat - Modelling section (typo in Modelling) -* It might be good to mention that (I think) all of the security issues found by - Trail of Bits have been addressed - -#### Igor Rodrigues (Nov 30th at 11:58:51 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701363531073659?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Hi @dug, Thank you for all the comments! For ANTLR, GitHub marked it as 14.1% of -the [CloudEvents spec](https://github.com/cloudevents/spec), so that's why I -added it to the assessment, but I may remove it if it's not very relevant. I'll -also definitely add Markdown, thanks for noticing that. We'll review the doc, -update it with your comments and tell you about the changes. Thank you again! - -#### Igor Rodrigues (Dec 4th at 11:15:26 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701706526314599?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Hi @dug, we fixed the comments you provided on the [security -assessment](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md), -along with the comments from the meeting. Here are the [new -changes](https://github.com/cncf/tag-security/commit/e75e0e0a908ffa462c7923fad6e6e201b5feaef0#diff-086780f8339d58b8abcf32f9cf930f8b11ebf1889ee3e36c4eeaede7dc21a7b7) -since then. Please, let me know if there are more parts we could improve. Also, -I wanted to CloudEvents have a public SBOM that we could link, and if you think -there are more aspects we could add to the specification side of the [Security -Issue -resolution](https://github.com/Igor8mr/tag-security/blob/main/assessments/projects/cloud-events/self-assessment.md#cloudevents-specification). -Thank you for all the help! - -#### Dug (Dec 4th at 11:36:23 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701707783421699?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -The closest thing we have to a SBOM is: -https://github.com/cloudevents/spec#cloudevents-documents Thanks for the update. -Will look it over in a bit. - -#### Igor Rodrigues (Dec 4th at 11:44:52 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701708292972649?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Great, thanks! - -#### Dug (Dec 4th at 12:08:22 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701709702994029?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -I put just a few minor tweaks as comments on the commit. - -#### Igor Rodrigues (Dec 4th at 12:28:53 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701710933601919?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Thanks, I'll fix those soon - -#### Igor Rodrigues (Dec 5th at 8:05:09 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701781509377939?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Hi @dug, I forgot to ask this before, but are there any action items you are -currently working on or plan to work on that would solve the concerns mentioned -in the doc or other security concerns? I think it would be good to include those -in the assessment. I remember you mentioned implementing bots to check the SDKs, -do you have a pull request, issue, or any other link to the implementation of -the bots idea? Also, we are willing to help implement one of those solutions to -the concerns if you have some specific things in mind. - -#### Dug (Dec 5th at 11:57:30 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701795450643219?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -@Igor Rodrigues just this one: https://github.com/cloudevents/spec/issues/1235 - -#### Dug (Dec 5th at 11:58:19 AM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701795499076589?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -If someone knows how to setup the bots and wants to submit a PR to add them... -that would be great! Or even just a list of instructions for an admin to follow -(if it's more than just a PR) that would be great too. - -#### Igor Rodrigues (Dec 5th at 12:12:57 PM) - -* [Message - Link](https://cloud-native.slack.com/archives/C9DB5ABAA/p1701796377013619?thread_ts=1701293353.624819&cid=C9DB5ABAA) - -Great, thanks! We are taking a look here - -## CloudEvents Team Meeting - -* **Security Pals Involved:** - * Igor Rodrigues -* **CloudEvents Team Members Involved:** - * Doug Davis - * Tommy - * Erik - * David B - * Jon - * Calum - * Jem - * Clemens - -### Team Meeting Report - -The team joined the CloudEvents public team meeting on November 30th, 2023, -which was [recorded on -YouTube](https://www.youtube.com/watch?v=2OZPTQOqFEw&t=191s). diff --git a/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx b/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx deleted file mode 100644 index 2e9ded54e..000000000 --- a/assessments/projects/cloudevents/files/CloudEvents SBOM.spdx +++ /dev/null @@ -1,174 +0,0 @@ -SPDXVersion: SPDX-2.3 -DataLicense: CC0-1.0 -SPDXID: SPDXRef-DOCUMENT -DocumentName: github.com/Igor8mr/spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -DocumentNamespace: https://s3.us-east-1.amazonaws.com/blob.fossa.io/FOSSA_BOMS/git%2Bgithub.com%2FIgor8mr%2Fspec%24130ba0d183f5e45c1d141f5c1f272cf71d898623 -Creator: Organization: NYU Igor -Creator: Tool: FOSSA v0.12.0 -Created: 2023-11-28T08:10:45Z -LicenseListVersion: 3.18 -DocumentDescribes: SPDXRef-pip-aiohttp-3.9.1 -DocumentDescribes: SPDXRef-pip-bs4-0.0.1 -DocumentDescribes: SPDXRef-pip-Markdown-3.5.1 -DocumentDescribes: SPDXRef-pip-pymdown-extensions-10.5 -DocumentDescribes: SPDXRef-pip-pytest-asyncio-0.21.1 -DocumentDescribes: SPDXRef-pip-tenacity-8.2.3 -DocumentDescribes: SPDXRef-pip-tqdm-4.66.1 - -#### Packages - -PackageName: spec -SPDXID: SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -PackageVersion: 130ba0d183f5e45c1d141f5c1f272cf71d898623 -FilesAnalyzed: true -PackageOriginator: Organization: Git -PackageLicenseDeclared: Apache-2.0 -PackageCopyrightText: 2021 The CloudEvents Authors. -PackageDownloadLocation: NOASSERTION -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:github/Igor8mr/spec@130ba0d183f5e45c1d141f5c1f272cf71d898623 -PackageChecksum: MD5: edde7edecb511530e340a6758e68469f -PackageChecksum: SHA1: 68b11edf18e3ee4aefb010d0039b46678279cc35 -PackageChecksum: SHA256: ede64337447df771e0cca0261121bf4fb2f3fe9c1b48f2c74b75907bf9c6ef8f - - -PackageName: aiohttp -SPDXID: SPDXRef-pip-aiohttp-3.9.1 -PackageVersion: 3.9.1 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: Apache-2.0 -PackageCopyrightText: aio-libs contributors. - aio-libs contributors. -PackageLicenseInfoFromFiles: MIT -PackageDownloadLocation: https://files.pythonhosted.org/packages/54/07/9467d3f8dae29b14f423b414d9e67512a76743c5bb7686fb05fe10c9cc3e/aiohttp-3.9.1.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/aiohttp@3.9.1 -PackageChecksum: MD5: a678b74da295fad8bc65e76ef882028d -PackageChecksum: SHA1: 077a26885ada5fa78bd540d61ad96d7b25ff2f14 -PackageChecksum: SHA256: 60b3a90c477906cef6846cc60499bf25a5fb725b3966958bdcfc30681fefbe46 - - -PackageName: bs4 -SPDXID: SPDXRef-pip-bs4-0.0.1 -PackageVersion: 0.0.1 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: MIT -PackageCopyrightText: NONE -PackageDownloadLocation: https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/bs4@0.0.1 -PackageChecksum: MD5: 0cf3b06d60f6de4e489ac9eaaf606e15 -PackageChecksum: SHA1: cb7eeca557338c2e6f83ded115730edb0358b5c5 -PackageChecksum: SHA256: f5238cfb5026c9846b4bbca72e3d1af0c98e750fe9c9fe610c7e1827dbd4cd8f - - -PackageName: Markdown -SPDXID: SPDXRef-pip-Markdown-3.5.1 -PackageVersion: 3.5.1 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: BSD-3-Clause -PackageCopyrightText: 2007, 2008 The Python Markdown Project (v. 1.7 and later) - 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) - 2004 Manfred Stienstra (the original version) -PackageLicenseInfoFromFiles: ietf-trust BSD-2-Clause PIL -PackageDownloadLocation: https://files.pythonhosted.org/packages/35/14/1ec9742e151f3b06a723a20d9af7201a389ebd3aae8b7d93b521819489dc/Markdown-3.5.1.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/markdown@3.5.1 -PackageChecksum: MD5: 17521d1c48bec050461c9749648eb02e -PackageChecksum: SHA1: 93ef9f0f2d38bb6a2e67b2e6b6928d8c6f3fd739 -PackageChecksum: SHA256: b33293b09516ec07f4f82388c82dc4101e2af4b0308d104a00a40c212dfda492 - - -PackageName: pymdown-extensions -SPDXID: SPDXRef-pip-pymdown-extensions-10.5 -PackageVersion: 10.5 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: MIT -PackageCopyrightText: 2014 - 2023 Isaac Muse - 2007-2008 Waylan Limberg](http://achinghead.com/). - 2008-2014 The Python Markdown Project - 2006-2008 Waylan Limberg](http://achinghead.com/). - 2013 GitHub, Inc. -PackageDownloadLocation: https://files.pythonhosted.org/packages/fd/fe/a3f51f84844e7a493884dbd5d70775fc83e26e414234c212fb342d65a079/pymdown_extensions-10.5.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/pymdown-extensions@10.5 -PackageChecksum: MD5: 5307ac49eccdfedc0500e861454c1807 -PackageChecksum: SHA1: 999e7fc85d2be0e34e2f29306aae79aeaa77fd1d -PackageChecksum: SHA256: f9bf4664db12301525699019a1325132b48e7f606d2cf85c9a10867addff5780 - - -PackageName: pytest-asyncio -SPDXID: SPDXRef-pip-pytest-asyncio-0.21.1 -PackageVersion: 0.21.1 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: Apache-2.0 -PackageCopyrightText: NONE -PackageDownloadLocation: https://files.pythonhosted.org/packages/5a/85/d39ef5f69d5597a206f213ce387bcdfa47922423875829f7a98a87d33281/pytest-asyncio-0.21.1.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/pytest-asyncio@0.21.1 -PackageChecksum: MD5: b7a6b994b519756e167eb060f7b9c215 -PackageChecksum: SHA1: 4bd2b79d5335f9edc9d651223b371b8676e5027d -PackageChecksum: SHA256: 9ed0689af4d77ce1a842e557a08346827c6f8e91432322568ef8e4d6454b2293 - - -PackageName: tenacity -SPDXID: SPDXRef-pip-tenacity-8.2.3 -PackageVersion: 8.2.3 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: Apache-2.0 -PackageCopyrightText: 2016 Étienne Bersac -PackageDownloadLocation: https://files.pythonhosted.org/packages/89/3c/253e1627262373784bf9355db9d6f20d2d8831d79f91e9cca48050cddcc2/tenacity-8.2.3.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/tenacity@8.2.3 -PackageChecksum: MD5: 997f8584a7fc7a2fac8129e5b7b38660 -PackageChecksum: SHA1: 04832f7674ec9b765f5b5fa6eedd7dcc0e66fe33 -PackageChecksum: SHA256: fa1582aa8ae5ba5e44f54ccc7de63a8be0593a8d3f77aa8966785f4bfb75b7f7 - - -PackageName: tqdm -SPDXID: SPDXRef-pip-tqdm-4.66.1 -PackageVersion: 4.66.1 -FilesAnalyzed: true -PackageOriginator: Organization: Pip -PackageLicenseDeclared: MPL-2.0 OR MIT -PackageCopyrightText: 2013 noamraph -PackageDownloadLocation: https://files.pythonhosted.org/packages/62/06/d5604a70d160f6a6ca5fd2ba25597c24abd5c5ca5f437263d177ac242308/tqdm-4.66.1.tar.gz -PackageLicenseConcluded: NOASSERTION -ExternalRef: PACKAGE-MANAGER purl pkg:pypi/tqdm@4.66.1 -PackageChecksum: MD5: 7948f65ba4a5924756d4b0f96ffbd2ac -PackageChecksum: SHA1: 8927f903a643ea9c15d2d1df91147d05f8f8f4b6 -PackageChecksum: SHA256: cc06ac41d0dca3fdd457918b98daabfb98ca4d37a5e875dbea3701c31ffc892e - - - -#### Relationships - -SPDXRef-DOCUMENT DESCRIBES SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-aiohttp-3.9.1 -SPDXRef-pip-aiohttp-3.9.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-bs4-0.0.1 -SPDXRef-pip-bs4-0.0.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-Markdown-3.5.1 -SPDXRef-pip-Markdown-3.5.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-pymdown-extensions-10.5 -SPDXRef-pip-pymdown-extensions-10.5 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-pytest-asyncio-0.21.1 -SPDXRef-pip-pytest-asyncio-0.21.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-tenacity-8.2.3 -SPDXRef-pip-tenacity-8.2.3 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 -SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 DEPENDS_ON SPDXRef-pip-tqdm-4.66.1 -SPDXRef-pip-tqdm-4.66.1 DEPENDENCY_OF SPDXRef-git-github.com-Igor8mr-spec-130ba0d183f5e45c1d141f5c1f272cf71d898623 - - - - - - - - diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 0bd6e411b..1ed06367a 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -71,7 +71,6 @@ document](CE-maintainers-communications.md). | Security Provider | CloudEvents is not a security provider | | CloudEvents Specification Language | Markdown | | CloudEvents SDK Languages | Python, C#/.NET, Go, Java, Javascript, PHP, PowerShell, Ruby and Rust | -| SBOM | [CloudEvents SBOM generated by FOSSA](files/CloudEvents%20SBOM.spdx) | | Technical Documents | [CloudEvents Documents](https://github.com/cloudevents/spec#cloudevents-documents) | | | | From 5e49b31bc5010180d0d6d678da3d26ed71be8b09 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Sun, 10 Dec 2023 10:46:26 -0500 Subject: [PATCH 03/18] Fixed more comments in the Pull Request Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 178 ++++++++++-------- 1 file changed, 104 insertions(+), 74 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 1ed06367a..39e2be1b3 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -16,7 +16,6 @@ document](CE-maintainers-communications.md). ## Table of contents -* [Table of contents](#table-of-contents) * [Metadata](#metadata) * [Security links](#security-links) * [Overview](#overview) @@ -45,17 +44,22 @@ document](CE-maintainers-communications.md). * [Conclusion](#conclusion) * [Recommendations](#recommendations) * [Action Items](#action-items) - * [[Action Item 1] Setup Snyk for SDKs](#action-item-1-setup-snyk-for-sdks) + * [[Action Item 1] Setup a bot for reviewing + SDKs](#action-item-1-setup-a-bot-for-reviewing-sdks) * [[Action Item 2] Regular SDK Security Audits](#action-item-2-regular-sdk-security-audits) * [[Action Item 3] Enforce governance rules throughout SDK development](#action-item-3-enforce-governance-rules-throughout-sdk-development) - * [[Action Item 4] Enhanced Encryption and Data Validation - Mechanisms](#action-item-4-enhanced-encryption-and-data-validation-mechanisms) - * [[Action Item 5] Documentation and Knowledge - Sharing](#action-item-5-documentation-and-knowledge-sharing) - * [[Action Item 6] Community Engagement and - Feedback](#action-item-6-community-engagement-and-feedback) + * [[Action Item 4] Obtain a Silver or Gold CII Best Practices + Badge](#action-item-4-obtain-a-silver-or-gold-cii-best-practices-badge) + * [[Action Item 5] Improve the documentation on the Security Response + Processes](#action-item-5-improve-the-documentation-on-the-security-response-processes) + * [[Action Item 6] Enhanced Encryption and Data Validation + Mechanisms](#action-item-6-enhanced-encryption-and-data-validation-mechanisms) + * [[Action Item 7] Documentation and Knowledge + Sharing](#action-item-7-documentation-and-knowledge-sharing) + * [[Action Item 8] Community Engagement and + Feedback](#action-item-8-community-engagement-and-feedback) * [Appendix](#appendix) * [Known Issues Over Time](#known-issues-over-time) * [CII Best Practices](#cii-best-practices) @@ -71,6 +75,7 @@ document](CE-maintainers-communications.md). | Security Provider | CloudEvents is not a security provider | | CloudEvents Specification Language | Markdown | | CloudEvents SDK Languages | Python, C#/.NET, Go, Java, Javascript, PHP, PowerShell, Ruby and Rust | +| SBOM | CloudEvents does not have a public SBOM available | | Technical Documents | [CloudEvents Documents](https://github.com/cloudevents/spec#cloudevents-documents) | | | | @@ -326,9 +331,7 @@ unexpected data. As of the latest security assessment, CloudEvents does not explicitly document compliance with specific security standards such as PCI-DSS, COBIT, ISO, GDPR, -etc. Current efforts are focused on evaluating compliance with these standards -and ensuring that CloudEvents adheres to industry best practices in security and -privacy. +etc. ## Secure development practices @@ -469,8 +472,10 @@ CloudEvents has many ### CloudEvents Specification -To report an issue, or to a new idea, contributors can open a new issue on the -GitHub repository. However, they should check if a similar issue already exists. +To [report an issue regarding +CloudEvents](https://github.com/cloudevents/spec/blob/main/docs/CONTRIBUTING.md#reporting-an-issue), +contributors can open a new issue on the GitHub repository. However, they should +check if a similar issue already exists. CloudEvents also provides a dedicated [email address](cncf-cloudevents-security@lists.cncf.io) and a [Security Mailing @@ -489,13 +494,16 @@ List](https://lists.cncf.io/g/cncf-cloudevents-security/topics). #### Vulnerability Response Process -It is the responsibility of the CloudEvents SDK maintainers to triage issues and -PRs from their respective repositories, as well as frequently release security -patches to issues found. As mentioned in [CloudEvents SDK -Community](#cloudevents-sdk-community), the maintainers cannot abstain from -triaging issues and PRs for more than 2 months, or releasing security patches -for more than 1 month. Otherwise, their project will be marked as `not actively -maintained`, which can lead to them losing the management of the SDK repository. +CloudEvets does not specify a strict way on how issues should be handled, but it +defines that it is the [responsibility of the CloudEvents SDK +maintainers](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#security-patches) +to triage issues and PRs from their respective repositories, as well as +frequently release security patches to issues found. As mentioned in +[CloudEvents SDK Community](#cloudevents-sdk-community), the maintainers cannot +abstain from triaging issues and PRs for more than 2 months, or releasing +security patches for more than 1 month. Otherwise, their project will be marked +as `not actively maintained`, which can lead to them losing the management of +the SDK repository. #### Incident Response @@ -510,8 +518,8 @@ any other CloudEvents communication channel. ##### Solving the Issue Once a security patch is written, the contributor should make a Pull Request and -mark it as reviewed. The PR will be reviewed, improved, and approved by the -other maintainers of the SDK. With that, a security patch is released by +mark it as ready to review. The PR will be reviewed, improved, and approved by +the other maintainers of the SDK. With that, a security patch is released by following the process described in [Contributing to CloudEvents](#contributing-to-cloudevents). @@ -673,14 +681,14 @@ and install updates to their CloudEvents SDK installation. ## Action Items -### [Action Item 1] Setup Snyk for SDKs +### [Action Item 1] Setup a bot for reviewing SDKs * **GitHub Issue Link:** [Setup Snyk for SDKs](https://github.com/cloudevents/spec/issues/1235) #### [Action Item 1] Objective -Improve the security of CloudEvents SDKs by integrating Snyk for automatic +Improve the security of CloudEvents SDKs by integrating a bot for automatic dependency assessments. This integration will both conduct comprehensive scans for vulnerabilities within the SDK and systematically search the internet for recently reported issues or vulnerabilities linked to the library dependencies @@ -691,54 +699,22 @@ for identifying, addressing, and mitigating potential risks. #### [Action Item 1] Steps Develop and deploy an automated bot system to monitor the health of various SDKs -by integrating Snyk into the development workflow. Collaborate with the team to +by integrating a bot into the development workflow. Collaborate with the team to conceptualize the bot's features, ensuring its capability to evaluate maintenance status, address issues, and implement patch updates following the -rules outlined in the governance documents. Configure Snyk to perform +rules outlined in the governance documents. Configure the bot to perform dependaBot-type checks, ensuring comprehensive analysis of SDK dependencies. Investigate the feasibility and requirements for adding a dedicated security bot to scan for potential security issues. Document the integration process and provide guidelines for ongoing usage within the development environment. -##### Initial Setup - -1. [Install the Snyk - CLI](https://support.snyk.io/hc/en-us/articles/360003812538-Install-the-Snyk-CLI) - on a local machine according to the operating system. -2. Run the command `Snyk auth` to authenticate the Snyk account. Follow the - prompts to log in and authenticate. -3. Create the CloudEvents Snyk organization in the [Snyk - Dashboard](https://app.snyk.io/dashboard). -4. In the Snyk Dashboard, go to the organization settings and add the [GitHub - Integration](https://docs.snyk.io/integrate-with-snyk/git-repositories-scms-integrations-with-snyk/snyk-github-integration) - for CloudEvents account under `Source Control Integrations.` - -##### Individual SDK Setup - -1. In the Snyk Dashboard, click `Add Project` and select the GitHub repository - containing the CloudEvents SDK code. -2. Configure Snyk Policies by defining policies for the project to set - thresholds for vulnerability severity levels. - * This helps to control when to fail a build or raise an alert. - * The [Security Audit performed by Trail of - Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) - could be used as a guide on which types and severities of vulnerabilities - should be analyzed. -3. Enable GitHub Integration for the CloudEvents project to receive automatic - pull requests for fixing vulnerabilities, which can streamline the - remediation process. -4. Configure notification settings to alert all interested CloudEvents admins - and members for new vulnerabilities or policy violations, which should - include at least the maintainers of the specific SDK. -5. Snyk should also be integrated with the CloudEvents Semantic Versioning - control system, so Snyk can automatically update its vulnerability database - and scan for new vulnerabilities. - -##### Configure Snyk to perform Dependabot-style checks - -1. Go to the CloudEvents SDK project in the Snyk Dashboard. -2. Navigate to the `Settings` tab. -3. Under `Policy`, enable the `Auto-fix` option. +The CloudEvents team created a [GitHub +Issue](https://github.com/cloudevents/spec/issues/1235) on October 10, 2023, to +implement the Snyk bot for CloudEvents, which is a possible bot that could solve +the issues mentioned above. The Security Pals team wrote a [comment on possible +steps to implement +Snyk](https://github.com/cloudevents/spec/issues/1235#issuecomment-1841532959) +under the issue. ### [Action Item 2] Regular SDK Security Audits @@ -778,38 +754,85 @@ deploying to the target environment. This automated pipeline ensures efficient and reliable development, testing, and deployment of applications using CloudEvents. -### [Action Item 4] Enhanced Encryption and Data Validation Mechanisms +### [Action Item 4] Obtain a Silver or Gold CII Best Practices Badge #### [Action Item 4] Objective -Emphasize to the user the goals and non-goals of CloudEvents. +Improve the current [CloudEvents CII Best Practices +Badge](https://www.bestpractices.dev/en/projects/6770) from `passing` level +criteria to either `silver` or `gold` by improving the project's security +practices. #### [Action Item 4] Steps +The project already has a `passing` badge and some of the necessary tasks +required to obtain the other badges. Moreover, although not documented on the +website yet, the project already accomplished some of the tasks necessary to +obtain `silver` and `gold` badges, such as defining a [project governance +model](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md) and +[key roles and +responsibilities](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md#membership). +These should be documented in the [CII Best Practices +website](https://www.bestpractices.dev/en/projects/6770?criteria_level=1). +Moreover, the project still needs to complete other tasks to get a `silver` +badge and, later, a `gold` badge, such as implementing an automated test suite +on each check-in to a shared repository for at least one branch. + +### [Action Item 5] Improve the documentation on the Security Response Processes + +#### [Action Item 5] Objective + +Currently, CloudEvents defines different means of [reporting security +issues](#responsible-disclosures-process). They also define that it is the +responsibility of the CloudEvents SDK maintainers to [triage problems and issue +security +patches](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#security-patches). +However, they still need to better specify the Vulnerability and Issue Response +Processes, which are currently scattered around different documents, such as the +[SDK Governance +Document](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE), +and not very detailed. + +#### [Action Item 5] Steps + +CloudEvents should create a separate document outlining a systematic approach to +triage issues, identify and execute solutions, and release security patches. +This process should be standard and well-defined for all SDKs. This would make +fixing problems quicker, especially issues like the ones [Trail of Bits +found](#issues-found-by-trail-of-bits). + +### [Action Item 6] Enhanced Encryption and Data Validation Mechanisms + +#### [Action Item 6] Objective + +Emphasize to the user the goals and non-goals of CloudEvents. + +#### [Action Item 6] Steps + Highlight to the user the importance of establishing a robust infrastructure for encryption and data validation practices around the CloudEvents implementation. -### [Action Item 5] Documentation and Knowledge Sharing +### [Action Item 7] Documentation and Knowledge Sharing -#### [Action Item 5] Objective +#### [Action Item 7] Objective Continue improving the documentation related to security practices and vulnerabilities within CloudEvents SDKs. -#### [Action Item 5] Steps +#### [Action Item 7] Steps Create comprehensive and accessible documentation that covers security best practices, identified vulnerabilities, resolved issues, public Software Bill of Materials, and strategies for mitigation of vulnerabilities. -### [Action Item 6] Community Engagement and Feedback +### [Action Item 8] Community Engagement and Feedback -#### [Action Item 6] Objective +#### [Action Item 8] Objective Enhance engagement with the CloudEvents user community for feedback and insights on security. -#### [Action Item 6] Steps +#### [Action Item 8] Steps Establish channels for consistent feedback, administer community surveys, and arrange Q&A sessions. Evaluate GitHub issues, engage in discussions with @@ -934,7 +957,14 @@ skipped. ### CII Best Practices -CloudEvents aims to align with the Core Infrastructure Initiative (CII) Best +CloudEvents received a `passing` [CII Best Practices +badge](https://www.bestpractices.dev/en/projects/6770) on December 08, 2022, at +17:02:04. + +[![OpenSSF Best +Practices](https://www.bestpractices.dev/projects/6770/badge)](https://www.bestpractices.dev/projects/6770) + +The project aims to align with the Core Infrastructure Initiative (CII) Best Practices, focusing on: * **Security Response Process**: Establishing a comprehensive process for From d55c09c1abddc9a03ea9abe1c28a3b71919deeb3 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Sun, 10 Dec 2023 11:06:48 -0500 Subject: [PATCH 04/18] Changed Action Item 1 to make it broader Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 39e2be1b3..4004e6850 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -44,8 +44,8 @@ document](CE-maintainers-communications.md). * [Conclusion](#conclusion) * [Recommendations](#recommendations) * [Action Items](#action-items) - * [[Action Item 1] Setup a bot for reviewing - SDKs](#action-item-1-setup-a-bot-for-reviewing-sdks) + * [[Action Item 1] Setup a system for automatically reviewing SDKs + SDKs](#action-item-1-setup-a-system-for-automatically-reviewing-sdks) * [[Action Item 2] Regular SDK Security Audits](#action-item-2-regular-sdk-security-audits) * [[Action Item 3] Enforce governance rules throughout SDK @@ -681,32 +681,38 @@ and install updates to their CloudEvents SDK installation. ## Action Items -### [Action Item 1] Setup a bot for reviewing SDKs +### [Action Item 1] Setup a system for automatically reviewing SDKs * **GitHub Issue Link:** [Setup Snyk for SDKs](https://github.com/cloudevents/spec/issues/1235) #### [Action Item 1] Objective -Improve the security of CloudEvents SDKs by integrating a bot for automatic -dependency assessments. This integration will both conduct comprehensive scans -for vulnerabilities within the SDK and systematically search the internet for -recently reported issues or vulnerabilities linked to the library dependencies -used in the development of CloudEvents SDKs. The automated tool will alert the -development team to threats, helping the implementation of proactive measures -for identifying, addressing, and mitigating potential risks. +Improve the security of CloudEvents SDKs by integrating [static application +security testing +(SAST)](https://en.wikipedia.org/wiki/Static_application_security_testing), +[Software composition analysis +(SCA)](https://www.synopsys.com/glossary/what-is-software-composition-analysis.html) +and/or [secret scanning +services](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning) +for automatic dependency assessments. This integration should both conduct +comprehensive scans for vulnerabilities within the SDK and systematically search +the internet for recently reported issues or vulnerabilities linked to the +library dependencies used in the development of CloudEvents SDKs. The automated +tool should alert the development team to threats, helping the implementation of +proactive measures for identifying, addressing, and mitigating potential risks. #### [Action Item 1] Steps -Develop and deploy an automated bot system to monitor the health of various SDKs -by integrating a bot into the development workflow. Collaborate with the team to +Develop and deploy an automated system to monitor the health of various SDKs by +integrating a bot into the development workflow. Collaborate with the team to conceptualize the bot's features, ensuring its capability to evaluate maintenance status, address issues, and implement patch updates following the -rules outlined in the governance documents. Configure the bot to perform -dependaBot-type checks, ensuring comprehensive analysis of SDK dependencies. -Investigate the feasibility and requirements for adding a dedicated security bot -to scan for potential security issues. Document the integration process and -provide guidelines for ongoing usage within the development environment. +rules outlined in the governance documents. Configure the bot to perform checks, +ensuring comprehensive analysis of SDK dependencies. Investigate the feasibility +and requirements for adding a dedicated security bot to scan for potential +security issues. Document the integration process and provide guidelines for +ongoing usage within the development environment. The CloudEvents team created a [GitHub Issue](https://github.com/cloudevents/spec/issues/1235) on October 10, 2023, to From 518893f53f1652ee471f7c0d36dee2c239fa217b Mon Sep 17 00:00:00 2001 From: MatthewZGong Date: Sun, 10 Dec 2023 14:41:53 -0500 Subject: [PATCH 05/18] condensing trail of bits section Signed-off-by: MatthewZGong --- .../projects/cloudevents/self-assessment.md | 114 ++---------------- 1 file changed, 7 insertions(+), 107 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 4004e6850..53e40ee1b 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -850,116 +850,16 @@ proper triage processes. ### Known Issues Over Time -#### Issues found by Trail of Bits +#### Trail of Bits Security Assessment -The main security assessment on CloudEvents was a [Security Audit performed by +CloudEvents underwent a [Security Audit performed by Trail of Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) -released on October 26, 2022. These were mainly concerning the different -CloudEvents SDK, not the specification. All of the security issues found by -Trail of Bits have already been addressed. - -Below are listed the findings by Trail Of Bits with their descriptions. - -##### [Java SDK] Reliance on default encoding - -* **Severity:** Undetermined -* **Difficulty:** Low -* **Type:** Undefined Behavior -* **Finding ID:** TOB-CE-1 -* **Target:** Java SDK - -Several instances were found where the getByte() standard Java API is utilized -without specifying an encoding, leading the [Java -SDK](https://github.com/cloudevents/sdk-java) to rely on system default -encoding. This can result in varying processing of event data across platforms. -While the specification mandates adherence to appropriate and RFC-compliant -encodings, there is room for improvement in the Java SDK implementation and -documentation to emphasize the significance of consistent encoding among actors. -Although not all instances are problematic, especially when handling binary -data, it is crucial to document and address this behavior in the SDK -implementation, documentation, and provided examples. - -##### [Java SDK] Outdated Vulnerable Dependencies - -* **Severity:** Undetermined -* **Difficulty:** Medium -* **Type:** Patching -* **Finding ID:** TOB-CE-2 -* **Target:** Java SDK - -The [Java SDK](https://github.com/cloudevents/sdk-java) contains multiple -outdated dependencies with publicly known vulnerabilities, including high- and -medium-risk ones. The Snyk tool automatically audited each module due to time -constraints and ease of remediation. A manual review of exploitability within -the SDK's context was not conducted. - -##### [JavaScript SDK] Potential XSS in httpTransport() - -* **Severity:** Undetermined -* **Difficulty:** Low -* **Type:** Data Validation -* **Finding ID:** TOB-CE-3 -* **Target:** sdk-javascript/src/transport/http/index.ts - -The [JavaScript SDK](https://github.com/cloudevents/sdk-javascript)'s -httpTransport() method exposes raw error messages from the endpoint, potentially -leading to XSS vulnerabilities if user-controlled data is reflected without -proper sanitization in the rendered web page. While the specification does not -mandate validation or sanitization, the SDK documentation should emphasize the -risk of unsanitized HTTP responses when using this API in an emitter. - -##### [Go SDK] Outdated Vulnerable Dependencies - -* **Severity:** Undetermined -* **Difficulty:** Low -* **Type:** Patching -* **Finding ID:** TOB-CE-4 -* **Target:** Go SDK - -The [Go SDK](https://github.com/cloudevents/sdk-go) has multiple outdated -dependencies with known vulnerabilities. The open-source Snyk tool automatically -audited each module. Due to time constraints and ease of remediation, a manual -review of exploitability within the SDK's context was skipped. - -##### [Go SDK] Downcasting of 64-bit integer - -* **Severity:** Undetermined -* **Difficulty:** Low -* **Type:** Undefined Behavior -* **Finding ID:** TOB-CE-5 -* **Target:** sql/v2/parser/expression_visitor.go, sql/v2/utils/casting.go - -In the [Go SDK](https://github.com/cloudevents/sdk-go), the `strconv.Atoi` -function parses a machine-dependent integer (int64 for 64-bit targets). In some -code instances, the result from strconv.Atoi is later converted to a smaller -type (int16 or int32), risking overflow with specific inputs. - -##### [Go SDK] ReadHeaderTimeout not configured - -* **Severity:** Informational -* **Difficulty:** Low -* **Type:** Denial of Service -* **Finding ID:** TOB-CE-6 -* **Target:** Go SDK - -The [Go SDK](https://github.com/cloudevents/sdk-go) http.server API offers four -timeouts, including ReadHeaderTimeout. Failure to set a value for this timeout -makes the listener instance susceptible to Slowloris DoS attacks. - -##### [CSharp SDK] Outdated Vulnerable Dependencies - -* **Severity:** Undetermined -* **Difficulty:** Low -* **Type:** Patching -* **Finding ID:** TOB-CE-7 -* **Target:** CSharp SDK - -The [CSharp SDK](https://github.com/cloudevents/sdk-csharp) has multiple -outdated dependencies with known vulnerabilities. Using the open-source Snyk -tool, each module was automatically audited. Due to time constraints and ease of -remediation, a manual review of exploitability within the SDK's context was -skipped. +released on October 26, 2022. + +Trail of Bits is a cybersecurity company based in the United States that specializes in various aspects of security services, including security assessments, penetration testing, and software security. + +The audit focused on various CloudEvents Software Development Kits (SDKs) rather than the specification itself. All identified security issues have been addressed. The report highlighted specific findings for different SDKs, such as the Java SDK's reliance on default encoding or the outdated and vulnerable dependencies in both Java and Go SDKs. All of the security issues found by Trail of Bits have already been addressed. ### CII Best Practices From 2e203e1a1f9953993b89f5766d6a5f5ba1dd23ef Mon Sep 17 00:00:00 2001 From: MatthewZGong Date: Sun, 10 Dec 2023 15:09:03 -0500 Subject: [PATCH 06/18] adding developer actor Signed-off-by: MatthewZGong --- assessments/projects/cloudevents/self-assessment.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 53e40ee1b..c8d60aac4 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -161,6 +161,9 @@ is the entity or system that is responsible for the distribution, processing and routing of events to consumers. The event broker ensures reliable delivery and may enforce security policies. +#### Developer +Responsible for incorporating CloudEvents support into their applications to enable interoperability with other services and systems. The developer can use CloudEvents SDKs to integrate CloudEvents functionality into their applications. Developers also collaborate to ensure the proper functioning of other actors within the CloudEvents ecosystem. + ### Actions #### Event Formatting From 5f6053c117dd0202d444c1d7f2ca4b6a239c0fc1 Mon Sep 17 00:00:00 2001 From: MatthewZGong Date: Sun, 10 Dec 2023 15:38:08 -0500 Subject: [PATCH 07/18] added more actors Signed-off-by: MatthewZGong --- assessments/projects/cloudevents/self-assessment.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index c8d60aac4..bdf3a53f9 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -164,6 +164,15 @@ may enforce security policies. #### Developer Responsible for incorporating CloudEvents support into their applications to enable interoperability with other services and systems. The developer can use CloudEvents SDKs to integrate CloudEvents functionality into their applications. Developers also collaborate to ensure the proper functioning of other actors within the CloudEvents ecosystem. +#### SDK maintainers +Part of the CloudEvents ecosystem, they are responsible for the development, maintenance, and enhancement of CloudEvents Software Development Kits (SDKs). As stewards of the SDKs, their role is critical in ensuring that developers have reliable, up-to-date and safe tools to work with. + +#### CloudEvents Administrator +These central figures in the ongoing development and governance of the CloudEvents ecosystem and specification. They are responsible for the management of critical aspects of the CloudEvents infrastructure. For example, the website, github repos and moderate the meetings. + +#### CloudEvents Spec Maintainer +A CloudEvents specification maintainer is responsible for developing and maintaining the CloudEvents standard, ensuring consistency and interoperability for describing event data. They manage the roadmap, coordinate releases, and collaborate with the community to implement changes, improving the CloudEvents specification to facilitate event exchange in diverse cloud environments. + ### Actions #### Event Formatting From e8a55c9f844bf24f39ab53339eaa4b33104a71b3 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Mon, 11 Dec 2023 09:38:16 -0500 Subject: [PATCH 08/18] Fixed formatting and titles, and added references Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 67 +++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index bdf3a53f9..16d21c653 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -5,8 +5,8 @@ September 26, 2023 Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari (@Kushal-kothari) and Devyani Bairagya (@devyani-14). -Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV) and Doug Davis -(@duglin). +Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV), Doug Davis (@duglin), +Eddie Knight (@eddie-knight) and Ragashree (@ragashreeshekar). This document elaborates and explores the design goals for [CloudEvents](https://cloudevents.io/) as well as a security assessment of the @@ -161,17 +161,38 @@ is the entity or system that is responsible for the distribution, processing and routing of events to consumers. The event broker ensures reliable delivery and may enforce security policies. -#### Developer -Responsible for incorporating CloudEvents support into their applications to enable interoperability with other services and systems. The developer can use CloudEvents SDKs to integrate CloudEvents functionality into their applications. Developers also collaborate to ensure the proper functioning of other actors within the CloudEvents ecosystem. +#### System Administrator -#### SDK maintainers -Part of the CloudEvents ecosystem, they are responsible for the development, maintenance, and enhancement of CloudEvents Software Development Kits (SDKs). As stewards of the SDKs, their role is critical in ensuring that developers have reliable, up-to-date and safe tools to work with. +Responsible for incorporating CloudEvents support into their system to enable +interoperability with other services and applications. The developer can use one +of the CloudEvents SDKs to integrate CloudEvents functionality into their +applications. Developers also collaborate to ensure the proper functioning of +other actors within the CloudEvents ecosystem. They can also report issues they +find to the CloudEvents maintainers, helping improve the specification and/or +SDKs. -#### CloudEvents Administrator -These central figures in the ongoing development and governance of the CloudEvents ecosystem and specification. They are responsible for the management of critical aspects of the CloudEvents infrastructure. For example, the website, github repos and moderate the meetings. +#### SDK Maintainers + +Part of the CloudEvents ecosystem, they are responsible for the development, +maintenance, and enhancement of CloudEvents Software Development Kits (SDKs). As +stewards of the SDKs, their role is critical in ensuring that developers have +reliable, up-to-date and safe tools to work with. They must triage issues, find +and implement solutions to them and release security patches promptly. #### CloudEvents Spec Maintainer -A CloudEvents specification maintainer is responsible for developing and maintaining the CloudEvents standard, ensuring consistency and interoperability for describing event data. They manage the roadmap, coordinate releases, and collaborate with the community to implement changes, improving the CloudEvents specification to facilitate event exchange in diverse cloud environments. + +A CloudEvents specification maintainer is responsible for developing and +maintaining the CloudEvents standard, ensuring consistency and interoperability +for describing event data. They manage the roadmap, coordinate releases, and +collaborate with the community to implement changes, improving the CloudEvents +specification to facilitate event exchange in diverse cloud environments. + +#### CloudEvents Administrator + +These central figures in the ongoing development and governance of the +CloudEvents ecosystem and specification. They are responsible for the management +of critical aspects of the CloudEvents infrastructure. For example, the website, +GitHub repos and moderate the meetings. ### Actions @@ -586,11 +607,11 @@ CloudEvents](#contributing-to-cloudevents). #### The SDK management teams may implement vulnerabilities while implementing SDKs -Trail Of Bits was able to identify 7 different security concerns regarding the -different CloudEvents SDKs. While these issues have been addressed, the -expanding number of SDKs raises the possibility of introducing additional -vulnerabilities. These vulnerabilities could serve as potential weak points in -systems utilizing CloudEvents. +Trail Of Bits was able to identify [security concerns regarding the different +CloudEvents SDKs](#trail-of-bits-security-assessment). While these issues have +been addressed, the expanding number of SDKs raises the possibility of +introducing additional vulnerabilities. These vulnerabilities could serve as +potential weak points in systems utilizing CloudEvents. Mitigations: @@ -817,9 +838,9 @@ CloudEvents should create a separate document outlining a systematic approach to triage issues, identify and execute solutions, and release security patches. This process should be standard and well-defined for all SDKs. This would make fixing problems quicker, especially issues like the ones [Trail of Bits -found](#issues-found-by-trail-of-bits). +found](#trail-of-bits-security-assessment). -### [Action Item 6] Enhanced Encryption and Data Validation Mechanisms +### [Action Item 6] Emphasize goals, non-goals and user responsibilities #### [Action Item 6] Objective @@ -864,14 +885,20 @@ proper triage processes. #### Trail of Bits Security Assessment -CloudEvents underwent a [Security Audit performed by -Trail of +CloudEvents underwent a [Security Audit performed by Trail of Bits](https://github.com/cloudevents/spec/blob/main/docs/CE-SecurityAudit-2022-10.pdf) released on October 26, 2022. -Trail of Bits is a cybersecurity company based in the United States that specializes in various aspects of security services, including security assessments, penetration testing, and software security. +Trail of Bits is a cybersecurity company based in the United States that +specializes in various aspects of security services, including security +assessments, penetration testing, and software security. -The audit focused on various CloudEvents Software Development Kits (SDKs) rather than the specification itself. All identified security issues have been addressed. The report highlighted specific findings for different SDKs, such as the Java SDK's reliance on default encoding or the outdated and vulnerable dependencies in both Java and Go SDKs. All of the security issues found by Trail of Bits have already been addressed. +The audit focused on various CloudEvents Software Development Kits (SDKs) rather +than the specification itself. All identified security issues have been +addressed. The report highlighted specific findings for different SDKs, such as +the Java SDK's reliance on default encoding or the outdated and vulnerable +dependencies in both Java and Go SDKs. All of the security issues found by Trail +of Bits have already been addressed. ### CII Best Practices From 7c3f73b24a737b5eb13bedd3abb012a3bde9ef09 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Mon, 11 Dec 2023 10:40:18 -0500 Subject: [PATCH 09/18] Added comparisons between CloudEvents and others Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 16d21c653..3a94cd4c2 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -44,7 +44,7 @@ document](CE-maintainers-communications.md). * [Conclusion](#conclusion) * [Recommendations](#recommendations) * [Action Items](#action-items) - * [[Action Item 1] Setup a system for automatically reviewing SDKs + * [[Action Item 1] Setup a system for automatically reviewing SDKs](#action-item-1-setup-a-system-for-automatically-reviewing-sdks) * [[Action Item 2] Regular SDK Security Audits](#action-item-2-regular-sdk-security-audits) @@ -54,8 +54,8 @@ document](CE-maintainers-communications.md). Badge](#action-item-4-obtain-a-silver-or-gold-cii-best-practices-badge) * [[Action Item 5] Improve the documentation on the Security Response Processes](#action-item-5-improve-the-documentation-on-the-security-response-processes) - * [[Action Item 6] Enhanced Encryption and Data Validation - Mechanisms](#action-item-6-enhanced-encryption-and-data-validation-mechanisms) + * [[Action Item 6] Emphasize goals, non-goals and user + responsibilities](#action-item-6-emphasize-goals-non-goals-and-user-responsibilities) * [[Action Item 7] Documentation and Knowledge Sharing](#action-item-7-documentation-and-knowledge-sharing) * [[Action Item 8] Community Engagement and @@ -958,6 +958,16 @@ tools. It can be used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help analyze software performance and behavior. +CloudEvents and OpenTelemetry have different purposes. CloudEvents standardizes +event formats, making it easier for different services to communicate through +events, while OpenTelemetry focuses on observability, allowing developers to +collect and analyze traces and metrics consistently. It's also normal for +systems to use CloudEvents and OpenTelemetry together. Events generated by +CloudEvents could be traced and monitored using OpenTelemetry, providing a +comprehensive view of the system's behavior. Moreover, both projects are [CNCF +Incubating +projects](https://www.cncf.io/projects/#:~:text=Our%20Incubating%20Projects). + #### AsyncAPI ![AsyncAPI Logo](images/async-api-logo.png) @@ -967,6 +977,19 @@ improve the current state of Event-Driven Architecture (EDA). Their long-term goal is to make working with EDAs as easy as working with REST APIs. That goes from documentation to code generation, and from discovery to event management. +CloudEvents and AsyncAPI are both specifications designed to facilitate +communication and interoperability in the realm of cloud computing, but they +focus on different aspects of the messaging process. CloudEvents is a standard +for commonly describing event data. It aims to provide a vendor-neutral format +for event data that can be understood across different cloud platforms. On the +other hand, AsyncAPI concentrates on defining standards for documenting +asynchronous APIs. While CloudEvents is focused on standardizing the payload +format of events, AsyncAPI is concerned with documenting the structure and +behavior of APIs in asynchronous systems, helping developers understand how to +interact with messaging services. Therefore, CloudEvents is about the format of +events, while AsyncAPI is about the documentation and specification of +asynchronous APIs. + #### Event-B [Event-B](https://www.event-b.org/) is a formal method for system-level modeling @@ -975,6 +998,17 @@ notation, the use of refinement to represent systems at different abstraction levels and the use of mathematical proof to verify consistency between refinement levels. +CloudEvents and Event-B have different uses in event-driven systems. Event-B is +a method designed for the modeling and analysis of systems. It operates at a +high level of abstraction, focusing on refining events and proving properties +about the modeled system. On the other hand, CloudEvents is a specification that +addresses the standardization of event data format in cloud-native environments. +Unlike Event-B, CloudEvents does not offer a formal method for system modeling +or verification. Instead, it concentrates on creating a common standard for +describing events. CloudEvents aims to improve interoperability among +distributed systems and services by providing a consistent structure for event +data. + #### Simple Object Access Protocol (SOAP) [SOAP](https://en.wikipedia.org/wiki/SOAP) is a messaging protocol specification From 875a7153bda3a4b75e88916391bc39a15c89459a Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Mon, 11 Dec 2023 10:57:39 -0500 Subject: [PATCH 10/18] Added more information on SOAP Signed-off-by: Igor8mr --- assessments/projects/cloudevents/self-assessment.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 3a94cd4c2..f49f0220b 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -1029,7 +1029,10 @@ and CloudEvents is the fact that the latter does not aim to develop new security protocols. Instead, it relies on existing and resilient protocols. As mentioned before, the CloudEvents Specification focuses solely on standardizing the creation and representation of events across different protocols, intentionally -steering clear of specifying methods for their transportation. +steering clear of specifying methods for their transportation. Moreover, while +CloudEvents is focused on lightweight and flexibility, SOAP is more associated +with traditional and heavyweight web services, emphasizing standards and strict +message formatting. #### Apex Event Specification From 0600c52863db2528449d993ef05ebbe04efeb0d6 Mon Sep 17 00:00:00 2001 From: Igor Rodrigues <71235730+Igor8mr@users.noreply.github.com> Date: Mon, 11 Dec 2023 23:27:55 -0500 Subject: [PATCH 11/18] Update assessments/projects/cloudevents/self-assessment.md Co-authored-by: Eddie Knight Signed-off-by: Igor Rodrigues <71235730+Igor8mr@users.noreply.github.com> --- assessments/projects/cloudevents/self-assessment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index f49f0220b..9cf5a0cb0 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -75,7 +75,7 @@ document](CE-maintainers-communications.md). | Security Provider | CloudEvents is not a security provider | | CloudEvents Specification Language | Markdown | | CloudEvents SDK Languages | Python, C#/.NET, Go, Java, Javascript, PHP, PowerShell, Ruby and Rust | -| SBOM | CloudEvents does not have a public SBOM available | +| SBOM | CloudEvents does not generate an SBOM at build time | | Technical Documents | [CloudEvents Documents](https://github.com/cloudevents/spec#cloudevents-documents) | | | | From 5d7620cfad809ca5e9b7d17976503c4a2f4a5d69 Mon Sep 17 00:00:00 2001 From: Igor Rodrigues <71235730+Igor8mr@users.noreply.github.com> Date: Mon, 11 Dec 2023 23:28:58 -0500 Subject: [PATCH 12/18] Update assessments/projects/cloudevents/self-assessment.md Co-authored-by: Eddie Knight Signed-off-by: Igor Rodrigues <71235730+Igor8mr@users.noreply.github.com> --- assessments/projects/cloudevents/self-assessment.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 9cf5a0cb0..8cf16acca 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -8,11 +8,8 @@ Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV), Doug Davis (@duglin), Eddie Knight (@eddie-knight) and Ragashree (@ragashreeshekar). -This document elaborates and explores the design goals for -[CloudEvents](https://cloudevents.io/) as well as a security assessment of the -software. It was written in collaboration with the CloudEvents team. All -communications with CloudEvents were recorded on a [separate -document](CE-maintainers-communications.md). +This document was written in collaboration with the CloudEvents team to elaborate on and explores the design goals for +[CloudEvents](https://cloudevents.io/) through a limited security assessment of the software. ## Table of contents From 620f290ebe3d996baaba8f183310c96f532c5a30 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Mon, 11 Dec 2023 23:31:32 -0500 Subject: [PATCH 13/18] Merged references with the appendix Signed-off-by: Igor8mr --- assessments/projects/cloudevents/self-assessment.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 8cf16acca..52a350245 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -8,8 +8,10 @@ Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV), Doug Davis (@duglin), Eddie Knight (@eddie-knight) and Ragashree (@ragashreeshekar). -This document was written in collaboration with the CloudEvents team to elaborate on and explores the design goals for -[CloudEvents](https://cloudevents.io/) through a limited security assessment of the software. +This document was written in collaboration with the CloudEvents team to +elaborate on and explore the design goals for +[CloudEvents](https://cloudevents.io/) through a limited security assessment of +the software. ## Table of contents @@ -62,7 +64,7 @@ This document was written in collaboration with the CloudEvents team to elaborat * [CII Best Practices](#cii-best-practices) * [Case Studies](#case-studies) * [Related Projects and Vendors](#related-projects-and-vendors) -* [References](#references) + * [References](#references) ## Metadata @@ -1047,7 +1049,7 @@ restricted to computer science, making it different from the other examples. However, it is an example of event specification being widely used in industry, including more physical areas such as mechanical engineering and factories. -## References +### References * [CloudEvents Website](https://cloudevents.io/) * [CloudEvents GitHub](https://github.com/cloudevents) From df5efbf9978324372fe0802308a7c8a7d05e2970 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Tue, 12 Dec 2023 21:53:32 -0500 Subject: [PATCH 14/18] Removed most action items as instructed Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 234 ++++-------------- 1 file changed, 50 insertions(+), 184 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 52a350245..25b662d1f 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -15,6 +15,7 @@ the software. ## Table of contents +* [Table of contents](#table-of-contents) * [Metadata](#metadata) * [Security links](#security-links) * [Overview](#overview) @@ -42,30 +43,16 @@ the software. * [Potential threats](#potential-threats) * [Conclusion](#conclusion) * [Recommendations](#recommendations) -* [Action Items](#action-items) - * [[Action Item 1] Setup a system for automatically reviewing - SDKs](#action-item-1-setup-a-system-for-automatically-reviewing-sdks) - * [[Action Item 2] Regular SDK Security - Audits](#action-item-2-regular-sdk-security-audits) - * [[Action Item 3] Enforce governance rules throughout SDK - development](#action-item-3-enforce-governance-rules-throughout-sdk-development) - * [[Action Item 4] Obtain a Silver or Gold CII Best Practices - Badge](#action-item-4-obtain-a-silver-or-gold-cii-best-practices-badge) - * [[Action Item 5] Improve the documentation on the Security Response - Processes](#action-item-5-improve-the-documentation-on-the-security-response-processes) - * [[Action Item 6] Emphasize goals, non-goals and user - responsibilities](#action-item-6-emphasize-goals-non-goals-and-user-responsibilities) - * [[Action Item 7] Documentation and Knowledge - Sharing](#action-item-7-documentation-and-knowledge-sharing) - * [[Action Item 8] Community Engagement and - Feedback](#action-item-8-community-engagement-and-feedback) * [Appendix](#appendix) * [Known Issues Over Time](#known-issues-over-time) * [CII Best Practices](#cii-best-practices) + * [Action Item: Setup a system for automatically reviewing + SDKs](#action-item-setup-a-system-for-automatically-reviewing-sdks) * [Case Studies](#case-studies) * [Related Projects and Vendors](#related-projects-and-vendors) * [References](#references) + ## Metadata | | | @@ -711,173 +698,6 @@ patches to the security issues found, which can solve problems such as the ones found by Trail Of Bits. Moreover, it is important for users to frequently check and install updates to their CloudEvents SDK installation. -## Action Items - -### [Action Item 1] Setup a system for automatically reviewing SDKs - -* **GitHub Issue Link:** [Setup Snyk for - SDKs](https://github.com/cloudevents/spec/issues/1235) - -#### [Action Item 1] Objective - -Improve the security of CloudEvents SDKs by integrating [static application -security testing -(SAST)](https://en.wikipedia.org/wiki/Static_application_security_testing), -[Software composition analysis -(SCA)](https://www.synopsys.com/glossary/what-is-software-composition-analysis.html) -and/or [secret scanning -services](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning) -for automatic dependency assessments. This integration should both conduct -comprehensive scans for vulnerabilities within the SDK and systematically search -the internet for recently reported issues or vulnerabilities linked to the -library dependencies used in the development of CloudEvents SDKs. The automated -tool should alert the development team to threats, helping the implementation of -proactive measures for identifying, addressing, and mitigating potential risks. - -#### [Action Item 1] Steps - -Develop and deploy an automated system to monitor the health of various SDKs by -integrating a bot into the development workflow. Collaborate with the team to -conceptualize the bot's features, ensuring its capability to evaluate -maintenance status, address issues, and implement patch updates following the -rules outlined in the governance documents. Configure the bot to perform checks, -ensuring comprehensive analysis of SDK dependencies. Investigate the feasibility -and requirements for adding a dedicated security bot to scan for potential -security issues. Document the integration process and provide guidelines for -ongoing usage within the development environment. - -The CloudEvents team created a [GitHub -Issue](https://github.com/cloudevents/spec/issues/1235) on October 10, 2023, to -implement the Snyk bot for CloudEvents, which is a possible bot that could solve -the issues mentioned above. The Security Pals team wrote a [comment on possible -steps to implement -Snyk](https://github.com/cloudevents/spec/issues/1235#issuecomment-1841532959) -under the issue. - -### [Action Item 2] Regular SDK Security Audits - -#### [Action Item 2] Objective - -Establish a regular schedule for security audits of CloudEvents SDKs. - -#### [Action Item 2] Steps - -Specify the frequency of audits, assemble the audit team, identify the tools and -services required, and manage the coordination of audit activities. - -### [Action Item 3] Enforce governance rules throughout SDK development - -#### [Action Item 3] Objective - -Implement a [CI/CD -Pipeline](https://www.redhat.com/en/topics/devops/what-cicd-pipeline) to enforce -the CloudEvents governance rules. A CI/CD serves as a dynamic framework guiding -the entire software development lifecycle, encompassing key stages like -building, rigorous testing, and seamless code deployment. Given the thorough of -the CloudEvents Governance rules, integrating a CI/CD pipeline would both ensure -adherence to these rules and fortify security measures, promoting a more robust -environment for the development of the SDKs. This would lower the amount of -human mistakes in this process and, consequently, the chances of new -vulnerabilities being created. - -#### [Action Item 3] Steps - -Implementing a CI/CD pipeline for CloudEvents involves using Git for source code -management and selecting a CI/CD platform like Jenkins or GitHub Actions. The -pipeline should include a build stage to compile code and create artifacts, and -a test stage for unit and integration tests, with a focus on validating -CloudEvents generation and consumption. Artifacts should be stored in container -registries or repositories, and the deployment stage completes the process by -deploying to the target environment. This automated pipeline ensures efficient -and reliable development, testing, and deployment of applications using -CloudEvents. - -### [Action Item 4] Obtain a Silver or Gold CII Best Practices Badge - -#### [Action Item 4] Objective - -Improve the current [CloudEvents CII Best Practices -Badge](https://www.bestpractices.dev/en/projects/6770) from `passing` level -criteria to either `silver` or `gold` by improving the project's security -practices. - -#### [Action Item 4] Steps - -The project already has a `passing` badge and some of the necessary tasks -required to obtain the other badges. Moreover, although not documented on the -website yet, the project already accomplished some of the tasks necessary to -obtain `silver` and `gold` badges, such as defining a [project governance -model](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md) and -[key roles and -responsibilities](https://github.com/cloudevents/spec/blob/main/docs/GOVERNANCE.md#membership). -These should be documented in the [CII Best Practices -website](https://www.bestpractices.dev/en/projects/6770?criteria_level=1). -Moreover, the project still needs to complete other tasks to get a `silver` -badge and, later, a `gold` badge, such as implementing an automated test suite -on each check-in to a shared repository for at least one branch. - -### [Action Item 5] Improve the documentation on the Security Response Processes - -#### [Action Item 5] Objective - -Currently, CloudEvents defines different means of [reporting security -issues](#responsible-disclosures-process). They also define that it is the -responsibility of the CloudEvents SDK maintainers to [triage problems and issue -security -patches](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#security-patches). -However, they still need to better specify the Vulnerability and Issue Response -Processes, which are currently scattered around different documents, such as the -[SDK Governance -Document](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE), -and not very detailed. - -#### [Action Item 5] Steps - -CloudEvents should create a separate document outlining a systematic approach to -triage issues, identify and execute solutions, and release security patches. -This process should be standard and well-defined for all SDKs. This would make -fixing problems quicker, especially issues like the ones [Trail of Bits -found](#trail-of-bits-security-assessment). - -### [Action Item 6] Emphasize goals, non-goals and user responsibilities - -#### [Action Item 6] Objective - -Emphasize to the user the goals and non-goals of CloudEvents. - -#### [Action Item 6] Steps - -Highlight to the user the importance of establishing a robust infrastructure for -encryption and data validation practices around the CloudEvents implementation. - -### [Action Item 7] Documentation and Knowledge Sharing - -#### [Action Item 7] Objective - -Continue improving the documentation related to security practices and - vulnerabilities within CloudEvents SDKs. - -#### [Action Item 7] Steps - -Create comprehensive and accessible documentation that covers security best -practices, identified vulnerabilities, resolved issues, public Software Bill of -Materials, and strategies for mitigation of vulnerabilities. - -### [Action Item 8] Community Engagement and Feedback - -#### [Action Item 8] Objective - -Enhance engagement with the CloudEvents user community for feedback and insights -on security. - -#### [Action Item 8] Steps - -Establish channels for consistent feedback, administer community surveys, and -arrange Q&A sessions. Evaluate GitHub issues, engage in discussions with -authors, formulate mitigation or solution strategies, and execute them. -Prioritize and resolve security vulnerabilities identified by users through -proper triage processes. - ## Appendix ### Known Issues Over Time @@ -921,6 +741,52 @@ dependencies to mitigate security risks. security considerations for developers. These efforts are part of CloudEvents' commitment to maintaining high standards in open-source software development. +### Action Item: Setup a system for automatically reviewing SDKs + +* **GitHub Issue Link:** [Setup Snyk for + SDKs](https://github.com/cloudevents/spec/issues/1235) + +This is an action item that the Security Pals team discussed with CloudEvents, +which can help identify security issues on their repositories, especially those +similar to the [issues found by Trail of +Bits](#trail-of-bits-security-assessment). + +#### Action Item Objective + +Improve the security of CloudEvents SDKs by integrating [static application +security testing +(SAST)](https://en.wikipedia.org/wiki/Static_application_security_testing), +[Software composition analysis +(SCA)](https://www.synopsys.com/glossary/what-is-software-composition-analysis.html) +and/or [secret scanning +services](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning) +for automatic dependency assessments. This integration should both conduct +comprehensive scans for vulnerabilities within the SDK and systematically search +the internet for recently reported issues or vulnerabilities linked to the +library dependencies used in the development of CloudEvents SDKs. The automated +tool should alert the development team to threats, helping the implementation of +proactive measures for identifying, addressing, and mitigating potential risks. + +#### Action Item Steps + +Develop and deploy an automated system to monitor the health of various SDKs by +integrating a bot into the development workflow. Collaborate with the team to +conceptualize the bot's features, ensuring its capability to evaluate +maintenance status, address issues, and implement patch updates following the +rules outlined in the governance documents. Configure the bot to perform checks, +ensuring comprehensive analysis of SDK dependencies. Investigate the feasibility +and requirements for adding a dedicated security bot to scan for potential +security issues. Document the integration process and provide guidelines for +ongoing usage within the development environment. + +The CloudEvents team created a [GitHub +Issue](https://github.com/cloudevents/spec/issues/1235) on October 10, 2023, to +implement the Snyk bot for CloudEvents, which is a possible bot that could solve +the issues mentioned above. The Security Pals team wrote a [comment on possible +steps to implement +Snyk](https://github.com/cloudevents/spec/issues/1235#issuecomment-1841532959) +under the issue. + ### Case Studies CloudEvents has the potential to revolutionize event-driven architectures in From 2e5085cede2eb8e0ce41837643045587d1c618f7 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Tue, 12 Dec 2023 23:38:48 -0500 Subject: [PATCH 15/18] Fixed issues and added documents information Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 25b662d1f..fc0485ce6 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -1,6 +1,6 @@ # CloudEvents self-assessment -September 26, 2023 +November 26, 2023 Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari (@Kushal-kothari) and Devyani Bairagya (@devyani-14). @@ -52,7 +52,6 @@ the software. * [Related Projects and Vendors](#related-projects-and-vendors) * [References](#references) - ## Metadata | | | @@ -489,6 +488,18 @@ CloudEvents has many ## Security Issue Resolution +CloudEvents currently addresses the reporting of security issues and the +responsible parties for triaging and issuing security patches through documented +processes, such as [how to report issues](#responsible-disclosures-process) and +[who should triage and solve them](#vulnerability-response-process). The +CloudEvents specification does not have centralized documentation of the +Vulnerability and Issue Response Processes; instead, these processes are +currently distributed across different documents, such as the [SDK +Governance](https://github.com/cloudevents/spec/blob/main/docs/SDK-GOVERNANCE.md#ensuring-projects-health) +and +[Contributing](https://github.com/cloudevents/spec/blob/main/docs/CONTRIBUTING.md#reporting-an-issue) +documents. + ### CloudEvents Specification To [report an issue regarding From 7f5245aab96219ac4a9e866fa7a02dc6fd402853 Mon Sep 17 00:00:00 2001 From: Igor8mr Date: Wed, 13 Dec 2023 13:53:10 -0500 Subject: [PATCH 16/18] Made document more clear on who wrote/reviewed it Signed-off-by: Igor8mr --- .../projects/cloudevents/self-assessment.md | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index fc0485ce6..1cb34fd8a 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -8,10 +8,13 @@ Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari Contributors/Reviewers: Pranava Kumar Vemula (@Rana-KV), Doug Davis (@duglin), Eddie Knight (@eddie-knight) and Ragashree (@ragashreeshekar). -This document was written in collaboration with the CloudEvents team to -elaborate on and explore the design goals for -[CloudEvents](https://cloudevents.io/) through a limited security assessment of -the software. +This document was written to elaborate on and explore the design goals of +CloudEvents through a limited security assessment of the software in +collaboration with the project maintainer team. The information contained in +this assessment was extracted from the [CloudEvents GitHub +Repository](https://github.com/cloudevents/spec), and other channels maintained +by the project, such as its [website](https://cloudevents.io/) and [Slack +workspace](http://slack.cncf.io/). ## Table of contents @@ -254,10 +257,19 @@ CloudEvents](https://github.com/cloudevents/spec/blob/main/cloudevents/primer.md ## Self-assessment use -This self-assessment is created by the CloudEvents team to perform an internal -analysis of the project's security. It is not intended to provide a security -audit of CloudEvents, or function as an independent assessment or attestation of -CloudEvents's security health. +This security assessment was created by [Igor +Rodrigues](https://github.com/Igor8mr), [Matthew +Gong](https://github.com/MatthewZGong), [Kushal +Kothari](https://github.com/Kushal-kothari), and [Devyani +Bairagya](https://github.com/devyani-14) to perform an internal analysis of the +CloudEvents project. The document was also reviewed by CloudEvents maintainers +and members of the [CNCF Security Technical Advisory Group +(TAG)](https://github.com/cncf/tag-security). It is meant to provide a current +summary of the project and its security-related aspects. It is not intended to +provide a security audit of CloudEvents, or function as an independent +assessment or attestation of CloudEvents's security health. For the latest state +of the project please check the [CloudEvents GitHub +repository](https://github.com/cloudevents/spec). This document serves to provide CloudEvents users with an initial understanding of CloudEvents's security, where to find existing security documentation, From 3fca5442a0a592420478642c3b70aff6138174a5 Mon Sep 17 00:00:00 2001 From: Raga Date: Tue, 16 Jan 2024 20:44:57 -0600 Subject: [PATCH 17/18] Update assessments/projects/cloudevents/self-assessment.md Co-authored-by: torinvdb <65670557+torinvdb@users.noreply.github.com> Signed-off-by: Raga --- assessments/projects/cloudevents/self-assessment.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 1cb34fd8a..15595cf52 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -1,5 +1,7 @@ # CloudEvents self-assessment +This assessment was created by community members as part of the [Security Pals](https://github.com/cncf/tag-security/issues/1102) process and is currently pending changes from the maintainer team. + November 26, 2023 Authors: Igor Rodrigues (@Igor8mr), Matthew Gong (@MatthewZGong), Kushal Kothari From dff31720d387d72c472d26a54f20c378ab973329 Mon Sep 17 00:00:00 2001 From: Raga Date: Tue, 16 Jan 2024 20:46:16 -0600 Subject: [PATCH 18/18] Update assessments/projects/cloudevents/self-assessment.md Co-authored-by: torinvdb <65670557+torinvdb@users.noreply.github.com> Signed-off-by: Raga --- assessments/projects/cloudevents/self-assessment.md | 1 + 1 file changed, 1 insertion(+) diff --git a/assessments/projects/cloudevents/self-assessment.md b/assessments/projects/cloudevents/self-assessment.md index 15595cf52..7b3a5eef2 100644 --- a/assessments/projects/cloudevents/self-assessment.md +++ b/assessments/projects/cloudevents/self-assessment.md @@ -61,6 +61,7 @@ workspace](http://slack.cncf.io/). | | | | -- | -- | +| Assessment Stage | Incomplete | | Software | [CloudEvents Repository](https://github.com/cloudevents/spec) | | Security Provider | CloudEvents is not a security provider | | CloudEvents Specification Language | Markdown |