Skip to content

Commit ddc4796

Browse files
fix: upgrade Storybook to 9.1.17 to address security vulnerability (#868)
## **Description** This PR upgrades Storybook from version 9.0.17 to 9.1.17 to address a critical security vulnerability (CVE) in Storybook's environment variable handling. The vulnerability could lead to `.env` file contents being unexpectedly bundled into publicly accessible build artifacts. This security patch is recommended for all Storybook 7+ users. Additionally, this PR adds `@storybook/*` and `storybook` packages to the `npmPreapprovedPackages` list in `.yarnrc.yml` to bypass the 3-day minimum age gate for critical security patches, allowing the project to quickly adopt security fixes. **Key changes:** - Upgraded all Storybook packages from 9.0.17 → 9.1.17 - Added Storybook packages to npm preapproved list for faster security patch adoption - Verified build process works correctly with the new version **Reference:** https://storybook.js.org/blog/security-advisory/ ## **Related issues** Fixes: N/A (Security patch - proactive upgrade) ## **Manual testing steps** 1. Pull the branch and run `yarn install` 2. Start the Storybook development server: ```bash yarn storybook ``` 3. Verify Storybook loads correctly on http://localhost:6006 4. Navigate through various component stories to ensure functionality 5. Build Storybook for production: ```bash yarn workspace @metamask/storybook-react build-storybook ``` 6. Verify the build completes successfully without errors 7. Check that all components render correctly in the built version ## **Screenshots/Recordings** N/A - Infrastructure/security update with no visual changes ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable (build test performed) - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable (not applicable - configuration change) - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrades all Storybook packages to 9.1.17 and adds Storybook to Yarn's npmPreapprovedPackages age-gate bypass. > > - **Dependencies**: > - Bump Storybook packages from `9.0.17` → `9.1.17` in `apps/storybook-react` and `packages/{design-system-react,design-tokens}` (`@storybook/react`, `@storybook/react-vite`, `@storybook/addon-*`, and `storybook`). > - **Tooling/Config**: > - Add `@storybook/*` and `storybook` to `.yarnrc.yml` `npmPreapprovedPackages` to bypass the minimal age gate. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 07232ba. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude <[email protected]>
1 parent 9548bbc commit ddc4796

File tree

5 files changed

+77
-71
lines changed

5 files changed

+77
-71
lines changed

.yarnrc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ npmMinimalAgeGate: 4320
2626
npmPreapprovedPackages:
2727
- '@metamask/*'
2828
- '@lavamoat/*'
29+
- '@storybook/*'
30+
- 'storybook'

apps/storybook-react/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
"@metamask/design-tokens": "workspace:^",
1717
"@metamask/utils": "^11.9.0",
1818
"@playwright/test": "^1.52.0",
19-
"@storybook/addon-a11y": "^9.0.17",
20-
"@storybook/addon-docs": "^9.0.17",
21-
"@storybook/addon-vitest": "^9.0.17",
22-
"@storybook/react": "^9.0.17",
23-
"@storybook/react-vite": "^9.0.17",
19+
"@storybook/addon-a11y": "^9.1.17",
20+
"@storybook/addon-docs": "^9.1.17",
21+
"@storybook/addon-vitest": "^9.1.17",
22+
"@storybook/react": "^9.1.17",
23+
"@storybook/react-vite": "^9.1.17",
2424
"@testing-library/dom": "^9.0.0",
2525
"@testing-library/react": "^16.0.1",
2626
"@types/prop-types": "^15",
@@ -35,7 +35,7 @@
3535
"prop-types": "^15.8.1",
3636
"react": "^18.2.0",
3737
"react-dom": "^18.2.0",
38-
"storybook": "^9.0.17",
38+
"storybook": "^9.1.17",
3939
"tailwindcss": "^3.0.0",
4040
"typescript": "~5.2.2",
4141
"vite": "^6.3.6",

packages/design-system-react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
"@metamask/auto-changelog": "^5.3.0",
6363
"@metamask/design-system-tailwind-preset": "workspace:^",
6464
"@metamask/utils": "^11.9.0",
65-
"@storybook/react": "^9.0.17",
65+
"@storybook/react": "^9.1.17",
6666
"@svgr/cli": "^8.1.0",
6767
"@testing-library/jest-dom": "^6.6.3",
6868
"@testing-library/react": "^16.0.1",

packages/design-tokens/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"devDependencies": {
5151
"@metamask/auto-changelog": "^5.3.0",
5252
"@metamask/design-system-react": "workspace:^",
53-
"@storybook/react": "^9.0.17",
53+
"@storybook/react": "^9.1.17",
5454
"@ts-bridge/cli": "^0.6.3",
5555
"@types/jest": "^27.4.1",
5656
"@types/node": "^16.18.54",

yarn.lock

Lines changed: 67 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3207,7 +3207,7 @@ __metadata:
32073207
"@metamask/jazzicon": "npm:^2.0.0"
32083208
"@metamask/utils": "npm:^11.9.0"
32093209
"@radix-ui/react-slot": "npm:^1.1.0"
3210-
"@storybook/react": "npm:^9.0.17"
3210+
"@storybook/react": "npm:^9.1.17"
32113211
"@svgr/cli": "npm:^8.1.0"
32123212
"@testing-library/jest-dom": "npm:^6.6.3"
32133213
"@testing-library/react": "npm:^16.0.1"
@@ -3305,7 +3305,7 @@ __metadata:
33053305
dependencies:
33063306
"@metamask/auto-changelog": "npm:^5.3.0"
33073307
"@metamask/design-system-react": "workspace:^"
3308-
"@storybook/react": "npm:^9.0.17"
3308+
"@storybook/react": "npm:^9.1.17"
33093309
"@ts-bridge/cli": "npm:^0.6.3"
33103310
"@types/jest": "npm:^27.4.1"
33113311
"@types/node": "npm:^16.18.54"
@@ -3492,11 +3492,11 @@ __metadata:
34923492
"@metamask/design-tokens": "workspace:^"
34933493
"@metamask/utils": "npm:^11.9.0"
34943494
"@playwright/test": "npm:^1.52.0"
3495-
"@storybook/addon-a11y": "npm:^9.0.17"
3496-
"@storybook/addon-docs": "npm:^9.0.17"
3497-
"@storybook/addon-vitest": "npm:^9.0.17"
3498-
"@storybook/react": "npm:^9.0.17"
3499-
"@storybook/react-vite": "npm:^9.0.17"
3495+
"@storybook/addon-a11y": "npm:^9.1.17"
3496+
"@storybook/addon-docs": "npm:^9.1.17"
3497+
"@storybook/addon-vitest": "npm:^9.1.17"
3498+
"@storybook/react": "npm:^9.1.17"
3499+
"@storybook/react-vite": "npm:^9.1.17"
35003500
"@testing-library/dom": "npm:^9.0.0"
35013501
"@testing-library/react": "npm:^16.0.1"
35023502
"@types/prop-types": "npm:^15"
@@ -3512,7 +3512,7 @@ __metadata:
35123512
prop-types: "npm:^15.8.1"
35133513
react: "npm:^18.2.0"
35143514
react-dom: "npm:^18.2.0"
3515-
storybook: "npm:^9.0.17"
3515+
storybook: "npm:^9.1.17"
35163516
tailwindcss: "npm:^3.0.0"
35173517
typescript: "npm:~5.2.2"
35183518
vite: "npm:^6.3.6"
@@ -4490,15 +4490,15 @@ __metadata:
44904490
languageName: node
44914491
linkType: hard
44924492

4493-
"@storybook/addon-a11y@npm:^9.0.17":
4494-
version: 9.0.17
4495-
resolution: "@storybook/addon-a11y@npm:9.0.17"
4493+
"@storybook/addon-a11y@npm:^9.1.17":
4494+
version: 9.1.17
4495+
resolution: "@storybook/addon-a11y@npm:9.1.17"
44964496
dependencies:
44974497
"@storybook/global": "npm:^5.0.0"
44984498
axe-core: "npm:^4.2.0"
44994499
peerDependencies:
4500-
storybook: ^9.0.17
4501-
checksum: 10/b7d994520577e88e17c7c24a28397f1c97106f05df87b7984910d9d9df2fc585040d1110c8e6188a38bb71901759f58a75e615902c55270ffbdbe3ce9eaa677a
4500+
storybook: ^9.1.17
4501+
checksum: 10/7ef70c560b26ed090227a432e40abac3b0bf0c27df9175578beb472ca56b246186c14f89cca0aece6b8ef4ed48d487f8cff816689f75098c93591aec64b24b5b
45024502
languageName: node
45034503
linkType: hard
45044504

@@ -4565,20 +4565,20 @@ __metadata:
45654565
languageName: node
45664566
linkType: hard
45674567

4568-
"@storybook/addon-docs@npm:^9.0.17":
4569-
version: 9.0.17
4570-
resolution: "@storybook/addon-docs@npm:9.0.17"
4568+
"@storybook/addon-docs@npm:^9.1.17":
4569+
version: 9.1.17
4570+
resolution: "@storybook/addon-docs@npm:9.1.17"
45714571
dependencies:
45724572
"@mdx-js/react": "npm:^3.0.0"
4573-
"@storybook/csf-plugin": "npm:9.0.17"
4574-
"@storybook/icons": "npm:^1.2.12"
4575-
"@storybook/react-dom-shim": "npm:9.0.17"
4573+
"@storybook/csf-plugin": "npm:9.1.17"
4574+
"@storybook/icons": "npm:^1.4.0"
4575+
"@storybook/react-dom-shim": "npm:9.1.17"
45764576
react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
45774577
react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
45784578
ts-dedent: "npm:^2.0.0"
45794579
peerDependencies:
4580-
storybook: ^9.0.17
4581-
checksum: 10/0208229dcba2c9db33b5e63f64b87d42f826050a152fb43e69d9a4afc4446c8870085e15555ff9ba097d53a4461ad5e7a78ae481e96c9d2571c4f8b1c8b4d9d7
4580+
storybook: ^9.1.17
4581+
checksum: 10/2d7a57c435792233c2b187269ceb325e8b776a037e366f9f3ef2f165fba422e27656f74172989f03344ac8b42c0421e78ec0d70ba1be1154bbe7119535e56505
45824582
languageName: node
45834583
linkType: hard
45844584

@@ -4621,27 +4621,30 @@ __metadata:
46214621
languageName: node
46224622
linkType: hard
46234623

4624-
"@storybook/addon-vitest@npm:^9.0.17":
4625-
version: 9.0.17
4626-
resolution: "@storybook/addon-vitest@npm:9.0.17"
4624+
"@storybook/addon-vitest@npm:^9.1.17":
4625+
version: 9.1.17
4626+
resolution: "@storybook/addon-vitest@npm:9.1.17"
46274627
dependencies:
46284628
"@storybook/global": "npm:^5.0.0"
46294629
"@storybook/icons": "npm:^1.4.0"
46304630
prompts: "npm:^2.4.0"
46314631
ts-dedent: "npm:^2.2.0"
46324632
peerDependencies:
4633-
"@vitest/browser": ^3.0.0
4634-
"@vitest/runner": ^3.0.0
4635-
storybook: ^9.0.17
4636-
vitest: ^3.0.0
4633+
"@vitest/browser": ^3.0.0 || ^4.0.0
4634+
"@vitest/browser-playwright": ^4.0.0
4635+
"@vitest/runner": ^3.0.0 || ^4.0.0
4636+
storybook: ^9.1.17
4637+
vitest: ^3.0.0 || ^4.0.0
46374638
peerDependenciesMeta:
46384639
"@vitest/browser":
46394640
optional: true
4641+
"@vitest/browser-playwright":
4642+
optional: true
46404643
"@vitest/runner":
46414644
optional: true
46424645
vitest:
46434646
optional: true
4644-
checksum: 10/cdb48379a38596df74e8d4afff63f203d8c4507d55ebb0fd1d972d574b35121a132ce47c451dd7794de21dd05dfb50fd68af705feeac2255e9628cfc868b41ea
4647+
checksum: 10/8d7855df64d3bb7b4a9f601d85e72b90fac7179644597f2f9a4bdd25c26dd17a9fd432c6b84aa42494a46006bd46c8bfeef3248a1f8855f35dae20e856e983b2
46454648
languageName: node
46464649
linkType: hard
46474650

@@ -4695,16 +4698,16 @@ __metadata:
46954698
languageName: node
46964699
linkType: hard
46974700

4698-
"@storybook/builder-vite@npm:9.0.17":
4699-
version: 9.0.17
4700-
resolution: "@storybook/builder-vite@npm:9.0.17"
4701+
"@storybook/builder-vite@npm:9.1.17":
4702+
version: 9.1.17
4703+
resolution: "@storybook/builder-vite@npm:9.1.17"
47014704
dependencies:
4702-
"@storybook/csf-plugin": "npm:9.0.17"
4705+
"@storybook/csf-plugin": "npm:9.1.17"
47034706
ts-dedent: "npm:^2.0.0"
47044707
peerDependencies:
4705-
storybook: ^9.0.17
4708+
storybook: ^9.1.17
47064709
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
4707-
checksum: 10/ba9a87537ecc6c66b17fc08caabb67259b836aedc45826d9f7a340eef85167b2ccd883538168b979f7c4b37b3cf9f4c9ece56a4bb27bbd86e42cc9ba103e4260
4710+
checksum: 10/6517c3f23a4b00506e9a6ed494ccef27b3d70ef8740adcfdebd86f8b14e99120f016f8026d4be44975c7ca5a205a579274361dde511a094c5967b1530d9eb676
47084711
languageName: node
47094712
linkType: hard
47104713

@@ -4915,14 +4918,14 @@ __metadata:
49154918
languageName: node
49164919
linkType: hard
49174920

4918-
"@storybook/csf-plugin@npm:9.0.17":
4919-
version: 9.0.17
4920-
resolution: "@storybook/csf-plugin@npm:9.0.17"
4921+
"@storybook/csf-plugin@npm:9.1.17":
4922+
version: 9.1.17
4923+
resolution: "@storybook/csf-plugin@npm:9.1.17"
49214924
dependencies:
49224925
unplugin: "npm:^1.3.1"
49234926
peerDependencies:
4924-
storybook: ^9.0.17
4925-
checksum: 10/82e14f90f2ac91a8f3da63dbc7ab9760ac521f1ccd6d6a5764c60180c6990d96bc8a4c9e00a2f48351a98973f6df090d18b7bdd2f2b009cce5194d5ac024c45f
4927+
storybook: ^9.1.17
4928+
checksum: 10/64236ee22130bf23998b933dc6d630225eac5eedacb0ce61356ee746e3ce5ee84717251021ff8e38f9c9d76bc190a74f1a361bfd0e16e75e3ff624aed7b2e7d2
49264929
languageName: node
49274930
linkType: hard
49284931

@@ -4942,7 +4945,7 @@ __metadata:
49424945
languageName: node
49434946
linkType: hard
49444947

4945-
"@storybook/icons@npm:^1.2.12, @storybook/icons@npm:^1.4.0":
4948+
"@storybook/icons@npm:^1.4.0":
49464949
version: 1.4.0
49474950
resolution: "@storybook/icons@npm:1.4.0"
49484951
peerDependencies:
@@ -4992,14 +4995,14 @@ __metadata:
49924995
languageName: node
49934996
linkType: hard
49944997

4995-
"@storybook/react-dom-shim@npm:9.0.17":
4996-
version: 9.0.17
4997-
resolution: "@storybook/react-dom-shim@npm:9.0.17"
4998+
"@storybook/react-dom-shim@npm:9.1.17":
4999+
version: 9.1.17
5000+
resolution: "@storybook/react-dom-shim@npm:9.1.17"
49985001
peerDependencies:
49995002
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
50005003
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
5001-
storybook: ^9.0.17
5002-
checksum: 10/93ba82f329973363566e86da30f148cb460cce54335098174f550c70dfc589ca1c7c4bf52c4f9914a5b52877f821c2162f20247436814f53be542f0b959ea508
5004+
storybook: ^9.1.17
5005+
checksum: 10/ef0d4eeca593db889d4e78ed1b5a353012cfdec3ee0f73ca31abbe207952cdedc0c291d4ba5bd6d7529f5ea430dc3a90e631844534d2aa972b45c4cde11ae33d
50035006
languageName: node
50045007
linkType: hard
50055008

@@ -5047,14 +5050,14 @@ __metadata:
50475050
languageName: node
50485051
linkType: hard
50495052

5050-
"@storybook/react-vite@npm:^9.0.17":
5051-
version: 9.0.17
5052-
resolution: "@storybook/react-vite@npm:9.0.17"
5053+
"@storybook/react-vite@npm:^9.1.17":
5054+
version: 9.1.17
5055+
resolution: "@storybook/react-vite@npm:9.1.17"
50535056
dependencies:
50545057
"@joshwooding/vite-plugin-react-docgen-typescript": "npm:0.6.1"
50555058
"@rollup/pluginutils": "npm:^5.0.2"
5056-
"@storybook/builder-vite": "npm:9.0.17"
5057-
"@storybook/react": "npm:9.0.17"
5059+
"@storybook/builder-vite": "npm:9.1.17"
5060+
"@storybook/react": "npm:9.1.17"
50585061
find-up: "npm:^7.0.0"
50595062
magic-string: "npm:^0.30.0"
50605063
react-docgen: "npm:^8.0.0"
@@ -5063,27 +5066,27 @@ __metadata:
50635066
peerDependencies:
50645067
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
50655068
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
5066-
storybook: ^9.0.17
5069+
storybook: ^9.1.17
50675070
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
5068-
checksum: 10/8ba5e2d23bfc95e30a0b2f43b21c74cd34e44661a78423f833f92fd3ccfda86c37f6da479131ec8adaf18e03ad223551387b38fc2118795743726efab13256c2
5071+
checksum: 10/aae549e1576ebfda5feaaf51658921b1524ec6513cff3fa6f93020bf9b24e0af3921a06e64b8048fe119fb283614cba55e6339b0f790b0a61ba0b1810e55de23
50695072
languageName: node
50705073
linkType: hard
50715074

5072-
"@storybook/react@npm:9.0.17, @storybook/react@npm:^9.0.17":
5073-
version: 9.0.17
5074-
resolution: "@storybook/react@npm:9.0.17"
5075+
"@storybook/react@npm:9.1.17, @storybook/react@npm:^9.1.17":
5076+
version: 9.1.17
5077+
resolution: "@storybook/react@npm:9.1.17"
50755078
dependencies:
50765079
"@storybook/global": "npm:^5.0.0"
5077-
"@storybook/react-dom-shim": "npm:9.0.17"
5080+
"@storybook/react-dom-shim": "npm:9.1.17"
50785081
peerDependencies:
50795082
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
50805083
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
5081-
storybook: ^9.0.17
5084+
storybook: ^9.1.17
50825085
typescript: ">= 4.9.x"
50835086
peerDependenciesMeta:
50845087
typescript:
50855088
optional: true
5086-
checksum: 10/15fffea18e5728558409e44c9e7f844e246764967b6a29b86cbfc83be912ea18766e6f476520a18d50d296dcb1c62d5cc6be677a9a35bb74a6effe99551238a2
5089+
checksum: 10/8b6be8cc93c53ce2ccc942a54ae76f4f3652060887f46649f8ea1311fe271753435d675ac3aae76ec2f41a8f8bb0c6a88389d2bbb9a2e6875f2a0b2e655df63a
50875090
languageName: node
50885091
linkType: hard
50895092

@@ -19454,14 +19457,15 @@ __metadata:
1945419457
languageName: node
1945519458
linkType: hard
1945619459

19457-
"storybook@npm:^9.0.17":
19458-
version: 9.0.17
19459-
resolution: "storybook@npm:9.0.17"
19460+
"storybook@npm:^9.1.17":
19461+
version: 9.1.17
19462+
resolution: "storybook@npm:9.1.17"
1946019463
dependencies:
1946119464
"@storybook/global": "npm:^5.0.0"
1946219465
"@testing-library/jest-dom": "npm:^6.6.3"
1946319466
"@testing-library/user-event": "npm:^14.6.1"
1946419467
"@vitest/expect": "npm:3.2.4"
19468+
"@vitest/mocker": "npm:3.2.4"
1946519469
"@vitest/spy": "npm:3.2.4"
1946619470
better-opn: "npm:^3.0.2"
1946719471
esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0"
@@ -19476,7 +19480,7 @@ __metadata:
1947619480
optional: true
1947719481
bin:
1947819482
storybook: ./bin/index.cjs
19479-
checksum: 10/8c464646f4a411c7b7984eca15e064b09d306f99ad56d39c069c1330219295a3bd32bcaf22f3b32935e37ef01b64fc3764d09e8236515ce8c57cd264d23dbc0c
19483+
checksum: 10/fa7d56a7cf0c6849c8130f5b7b3fcbd6615216fce94dc4ff363a5622f7091f74dac7fe3e983cecc90b3cee922f8ca30b9997b5bb936c644971cb8d20262bc038
1948019484
languageName: node
1948119485
linkType: hard
1948219486

0 commit comments

Comments
 (0)