From a535810b5d294e1ee766a93d7e0b881772c7b13a Mon Sep 17 00:00:00 2001 From: Joao Garcia Date: Wed, 28 Oct 2026 18:33:38 +0000 Subject: [PATCH 1/5] docs(get-started): add internal audits page Add an Internal Audits page under Get Started > References, next to the Cartesi CLI, Honeypot and Rollup Lab entries. It lists the internal security reviews with a PDF download. First entry is the Rollups Node v2.0.0-alpha.12 internal security review. Co-Authored-By: Claude Sonnet 5.5 --- get-started/internal-audits.md | 18 ++++++++++++++++++ sidebarsGetStarted.js | 5 +++++ ....0.0-alpha.12-internal-security-review.pdf | Bin 0 -> 9586 bytes 3 files changed, 23 insertions(+) create mode 100644 get-started/internal-audits.md create mode 100644 static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf diff --git a/get-started/internal-audits.md b/get-started/internal-audits.md new file mode 100644 index 000000000..ae25899fa --- /dev/null +++ b/get-started/internal-audits.md @@ -0,0 +1,18 @@ +--- +id: internal-audits +title: Internal audits +--- + +This page lists the internal security reviews of the Cartesi Rollups stack. Each report is a PDF with the reviewed versions, the findings that were fixed, and the fix for each one. + +:::note +These are internal reviews carried out by the Cartesi QA team. They are not audits by an external firm. +::: + +| Date | Report | Components | Download | +| --- | --- | --- | --- | +| August 4, 2026 | Rollups Node v2.0.0-alpha.12 internal security review | rollups-node v2.0.0-alpha.12, rollups-contracts v3.0.0-alpha.6, CLI alpha.34 and alpha.35 | [PDF](/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf) | + +## Reporting a vulnerability + +Do not open a public issue for a security problem. Follow the `SECURITY.md` file in the affected repository. Rewards are covered by the [Cartesi Bug Bounty program](https://immunefi.com/bounty/cartesi/). diff --git a/sidebarsGetStarted.js b/sidebarsGetStarted.js index 635b7a0a2..b712ad875 100644 --- a/sidebarsGetStarted.js +++ b/sidebarsGetStarted.js @@ -58,6 +58,11 @@ module.exports = { label: 'Rollup Lab', href: 'https://rolluplab.io', }, + { + type: 'doc', + id: 'internal-audits', + label: 'Internal Audits', + }, ], } ], diff --git a/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf b/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5ff251d5921fe351527f85a20d451a739587d802 GIT binary patch literal 9586 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 literal 0 HcmV?d00001 From 4833e7a6f8c132b0f4d067c191a94edebbc9e5f3 Mon Sep 17 00:00:00 2001 From: Joao Garcia Date: Wed, 28 Oct 2026 18:42:50 +0000 Subject: [PATCH 2/5] docs: remove dead Immunefi bug bounty link The Immunefi page for Cartesi (immunefi.com/bounty/cartesi/) returns 404. Remove it from the footer config and the unused bugBounty route, and from the new Internal Audits page and its PDF. Co-Authored-By: Claude Sonnet 5.5 --- docusaurus.config.js | 4 ---- get-started/internal-audits.md | 2 +- src/theme/Footer/FooterNav.js | 2 -- ....0.0-alpha.12-internal-security-review.pdf | Bin 9586 -> 9286 bytes 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index b3edf0a81..ea7c73a86 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -268,10 +268,6 @@ const config = { label: "Tech Articles", to: "https://medium.com/cartesi/tagged/tech", }, - { - label: "Bug Bounty", - to: "https://immunefi.com/bounty/cartesi/", - }, { label: "Run a Node", to: "https://explorer.cartesi.io/staking", diff --git a/get-started/internal-audits.md b/get-started/internal-audits.md index ae25899fa..fadc1592b 100644 --- a/get-started/internal-audits.md +++ b/get-started/internal-audits.md @@ -15,4 +15,4 @@ These are internal reviews carried out by the Cartesi QA team. They are not audi ## Reporting a vulnerability -Do not open a public issue for a security problem. Follow the `SECURITY.md` file in the affected repository. Rewards are covered by the [Cartesi Bug Bounty program](https://immunefi.com/bounty/cartesi/). +Do not open a public issue for a security problem. Follow the `SECURITY.md` file in the affected repository. \ No newline at end of file diff --git a/src/theme/Footer/FooterNav.js b/src/theme/Footer/FooterNav.js index b2fa62c13..589930c48 100644 --- a/src/theme/Footer/FooterNav.js +++ b/src/theme/Footer/FooterNav.js @@ -22,8 +22,6 @@ function FooterNav() { usagePolicy: "https://cdn.sanity.io/files/zg5gx8g4/production/ddd64effd0cbf8ff1b4193fe4ee85c7016e7c168.pdf", examples: "https://docs.cartesi.io/", showcase: "https://rolluplab.io/", - bugBounty: - "https://immunefi.com/bounty/cartesi/?_gl:1*10hyf54*_ga*MTAyODg1OTI1LjE2ODY5MDA3NjA.*_ga_HM92STPNFJ*MTY4Nzg2ODk0Ny41LjEuMTY4Nzg2OTU0OC4xOC4wLjA.", staking: "https://explorer.cartesi.io/stake", grantsProgram: "https://governance.cartesi.io/", cgpVoting: "https://snapshot.org/#/cartesi-community-grants-program.eth", diff --git a/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf b/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf index 5ff251d5921fe351527f85a20d451a739587d802..d17f0dfd42b0774305a439d7998630573cd55137 100644 GIT binary patch delta 892 zcmaiyy>H`m9L5y|iQ*QCp~FeQ;kb6~G)etZzb0|&rjC=wP1-tDdc8P_-;>6!O&nJO zmJW;v1o{mO_YW{4b!GtxCM5VH5DOE_={9=Ttqk{_p68=SdcMQ+Z}->EkH6$|BKY<_ zCMVpz%)iQmpYv=^059`jf*;o22YaMB`C=V>wOPAm1?j#BT4kwkUqfv>ll^MHbaQ|emtz5+te#s$l0^Q2 zq0z_FSwv>F3{BlrU7A#8*!FXgFYh%cq-b4L$2+m*bxCyRXny4n3yZVMerw|Ev%wj5 zQ5G9|OFs8`k4&45sud4AwxtuOa%(7KEi{gtMjstImB2#EC&yP=f?0@AF9wn6CaT(b zwjY{kq~TJxXfsY(HxRAJ$TcnL?RTAys)9+>wP5I@>J`c*-7aY0HzYUUrj! z^NW+_yx3G?Z>&@=Tl-;H8<{Q>hogR+Eo1?=r`P&Wn;{BsP-m?};#to%+?x)H)rC%f zp%M`;>Pb{A2i$c~Qt{ql=L|p9TA^G?Pq#&BwW|q^@8JS*zTMXgW85?_wV)apr|${V zE{YsQjFVMd<_7$Me3+x}{z150z%VfN`rsIb-Uy0erT;ULxnIq@A delta 1092 zcmaizOK;;;6vq_>hSp_P1%VKv&XXoi;#d4?66c+`NgBI$-o$C_#BP$tdDyYUupo>1 z0D!zjtXU$u9S{f!i3K~p$jpKfJKWB&=`6UbbAIQ4&%H-F|KGV6wI6=-I?vz1J@oBM z?>}DW=Yyn&c3yg)I^Q2Wc4ChrAI}ZLUTOL~F9AK|s ze0KQQd3yMfn|*h9;v62m>-=$;d_}e27>O4C>+YDr%bzSbg%506cWS6)mZnTI!pz_T`Ss`{qfHt83_({RlW)}cS}4yVTIZ^a z#`u{%M9}EC7TgAy=DEM5-^g`=87#&{rM-_5jJO#Tf@Sh-yU5r2)mdnW$vkXqErwr1 zcAQJ4c_lR%+RbcgSIV8IvykD-OFUcJASr5k8BWTv=xowPEz`%c+cY$8_40B+uAhgK zirm@;1fw~d^DRk>wTp{d-B?$L^__6Zv>JI|bziPmCL_Km5xMYuoZ=$7uVDw)REjuL z7wjn5OiHO$%?~XYt#KJDixIn><Ql+3o(bKrh?Ry5T1h81&-ypemVREKc%=(oa zI9&>2yw{DRgX;p1Os*}RZFM(ej+tsAV?|50zughD+rpu<`VL3e8u zb%@M`vPSNrQyhpHT@ZaYH$r}!G)LoN=@hF`&2zP*suyeMMjD6ARn#Y8!CYC3>`7 Date: Wed, 28 Oct 2026 18:50:16 +0000 Subject: [PATCH 3/5] docs(get-started): fix internal audits PDF link 404 trailingSlash is enabled, so the PDF link was rendered with a trailing slash and returned 404 on GitHub Pages. Use the pathname:// protocol so the link keeps the file path as is and still gets the baseUrl. Co-Authored-By: Claude Sonnet 5.5 --- get-started/internal-audits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/internal-audits.md b/get-started/internal-audits.md index fadc1592b..e4fac6a39 100644 --- a/get-started/internal-audits.md +++ b/get-started/internal-audits.md @@ -11,7 +11,7 @@ These are internal reviews carried out by the Cartesi QA team. They are not audi | Date | Report | Components | Download | | --- | --- | --- | --- | -| August 4, 2026 | Rollups Node v2.0.0-alpha.12 internal security review | rollups-node v2.0.0-alpha.12, rollups-contracts v3.0.0-alpha.6, CLI alpha.34 and alpha.35 | [PDF](/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf) | +| August 4, 2026 | Rollups Node v2.0.0-alpha.12 internal security review | rollups-node v2.0.0-alpha.12, rollups-contracts v3.0.0-alpha.6, CLI alpha.34 and alpha.35 | [PDF](pathname:///internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf) | ## Reporting a vulnerability From d05d9432af27e89cc4c8422509a01459a25f1ea5 Mon Sep 17 00:00:00 2001 From: Joao Garcia Date: Wed, 28 Oct 2026 19:42:23 +0000 Subject: [PATCH 4/5] docs(get-started): list all reported findings in the alpha.12 report Replace the alpha.12 internal security review PDF with a version that lists the seven findings reported to the maintainers, with a severity scale and developer experience notes, and update the page description and the reporting contact to match. Co-Authored-By: Claude Sonnet 5.5 --- get-started/internal-audits.md | 4 ++-- ....0.0-alpha.12-internal-security-review.pdf | Bin 9286 -> 56432 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/get-started/internal-audits.md b/get-started/internal-audits.md index e4fac6a39..2cdfbda57 100644 --- a/get-started/internal-audits.md +++ b/get-started/internal-audits.md @@ -3,7 +3,7 @@ id: internal-audits title: Internal audits --- -This page lists the internal security reviews of the Cartesi Rollups stack. Each report is a PDF with the reviewed versions, the findings that were fixed, and the fix for each one. +This page lists the internal security reviews of the Cartesi Rollups stack. Each report is a PDF with the reviewed versions and the findings that were reported to the maintainers, with the description and impact of each one. :::note These are internal reviews carried out by the Cartesi QA team. They are not audits by an external firm. @@ -15,4 +15,4 @@ These are internal reviews carried out by the Cartesi QA team. They are not audi ## Reporting a vulnerability -Do not open a public issue for a security problem. Follow the `SECURITY.md` file in the affected repository. \ No newline at end of file +Do not open a public issue for a security problem. Report it privately by email to [contact@cartesi.foundation](mailto:contact@cartesi.foundation), including the affected component and version, the impact, and steps to reproduce. \ No newline at end of file diff --git a/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf b/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf index d17f0dfd42b0774305a439d7998630573cd55137..4a6460496d107ed5b9841f96468d818eb0b92d31 100644 GIT binary patch literal 56432 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 A(f|Me literal 9286 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 From 31ac0c784e13812afc0315f01241660613bd5d2c Mon Sep 17 00:00:00 2001 From: Joao Garcia Date: Fri, 30 Oct 2026 11:49:44 +0000 Subject: [PATCH 5/5] docs(get-started): rename to Audit reports, add reviewer column and reporting policy Rename the page from Internal audits to Audit reports so it also fits external audits, add a "Reviewed by" column, move the PDF to static/audit-reports, and keep the vulnerability reporting policy on the page without response-time commitments. Co-Authored-By: Claude Sonnet 5.5 --- get-started/audit-reports.md | 30 ++++++++++++++++++ get-started/internal-audits.md | 18 ----------- sidebarsGetStarted.js | 4 +-- ....0.0-alpha.12-internal-security-review.pdf | Bin 4 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 get-started/audit-reports.md delete mode 100644 get-started/internal-audits.md rename static/{internal-audits => audit-reports}/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf (100%) diff --git a/get-started/audit-reports.md b/get-started/audit-reports.md new file mode 100644 index 000000000..071d3630b --- /dev/null +++ b/get-started/audit-reports.md @@ -0,0 +1,30 @@ +--- +id: audit-reports +title: Audit reports +--- + +This page lists the security reviews of the Cartesi Rollups stack, whether they were carried out by the Cartesi QA team or by an external audit firm. Each report is a PDF with the reviewed versions and the findings that were reported to the maintainers, with the description and impact of each one. + +:::note +Reviews by the Cartesi QA team are internal reviews. They are not audits by an external firm. +::: + +| Date | Report | Reviewed by | Components | Download | +| --- | --- | --- | --- | --- | +| August 4, 2026 | Rollups Node v2.0.0-alpha.12 security review | Internal QA team | rollups-node v2.0.0-alpha.12, rollups-contracts v3.0.0-alpha.6, CLI alpha.34 and alpha.35 | [PDF](pathname:///audit-reports/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf) | + +## Reporting a vulnerability + +Do not open a public issue, pull request or discussion for a security problem. Report it privately by email to [rollups@cartesi.foundation](mailto:rollups@cartesi.foundation). + +Please include: + +- The affected component and version (release tag or commit). +- The impact and who is affected. +- Steps to reproduce, ideally a script or a test. + +Reports sent by email are not encrypted. If your report contains sensitive material, mention it in your first message. + +### What happens next + +We review each report, decide how to handle it, and reply with the outcome. When a fix is released and the issue affects users, we may describe it on this page. Please give us a reasonable time to fix an issue before you disclose it publicly. diff --git a/get-started/internal-audits.md b/get-started/internal-audits.md deleted file mode 100644 index 2cdfbda57..000000000 --- a/get-started/internal-audits.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: internal-audits -title: Internal audits ---- - -This page lists the internal security reviews of the Cartesi Rollups stack. Each report is a PDF with the reviewed versions and the findings that were reported to the maintainers, with the description and impact of each one. - -:::note -These are internal reviews carried out by the Cartesi QA team. They are not audits by an external firm. -::: - -| Date | Report | Components | Download | -| --- | --- | --- | --- | -| August 4, 2026 | Rollups Node v2.0.0-alpha.12 internal security review | rollups-node v2.0.0-alpha.12, rollups-contracts v3.0.0-alpha.6, CLI alpha.34 and alpha.35 | [PDF](pathname:///internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf) | - -## Reporting a vulnerability - -Do not open a public issue for a security problem. Report it privately by email to [contact@cartesi.foundation](mailto:contact@cartesi.foundation), including the affected component and version, the impact, and steps to reproduce. \ No newline at end of file diff --git a/sidebarsGetStarted.js b/sidebarsGetStarted.js index b712ad875..c5119d28e 100644 --- a/sidebarsGetStarted.js +++ b/sidebarsGetStarted.js @@ -60,8 +60,8 @@ module.exports = { }, { type: 'doc', - id: 'internal-audits', - label: 'Internal Audits', + id: 'audit-reports', + label: 'Audit Reports', }, ], } diff --git a/static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf b/static/audit-reports/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf similarity index 100% rename from static/internal-audits/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf rename to static/audit-reports/rollups-node-v2.0.0-alpha.12-internal-security-review.pdf