Skip to content

Add AEAD context binding to server island encryption#16457

Merged
matthewp merged 2 commits into
mainfrom
server-island-encryption-aad
Apr 27, 2026
Merged

Add AEAD context binding to server island encryption#16457
matthewp merged 2 commits into
mainfrom
server-island-encryption-aad

Conversation

@matthewp

Copy link
Copy Markdown
Contributor

Changes

  • Server island encrypted parameters (e, p, s) are now bound to their target component and purpose using AES-GCM authenticated additional data (AAD). Each ciphertext includes context like props:Island or slots:CommentsSection so that encrypted data for one component cannot be replayed against a different component, and encrypted props cannot be reused as slots.
  • encryptString and decryptString in encryption.ts accept an optional additionalData string parameter, passed through to the Web Crypto AesGcmParams. Both the encryption side (server-islands.ts) and decryption side (endpoint.ts) now pass matching AAD values.

Testing

  • New unit test throws when decrypting with mismatched additionalData verifies that cross-component/cross-parameter replay is rejected at the crypto layer.
  • All existing server island tests updated to encrypt with proper AAD. All 45 tests pass (24 server-islands, 5 CSP, 16 encryption unit).

Docs

  • No docs update needed; this is an internal encryption hardening with no user-facing API change.

@changeset-bot

changeset-bot Bot commented Apr 23, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 165d38f

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions Bot added the pkg: astro Related to the core `astro` package (scope) label Apr 23, 2026
@matthewp matthewp force-pushed the server-island-encryption-aad branch from 20efd59 to 1cfe677 Compare April 23, 2026 12:51
@codspeed-hq

codspeed-hq Bot commented Apr 23, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 18 untouched benchmarks


Comparing server-island-encryption-aad (20efd59) with main (b2d8eb3)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (b073bad) during the generation of this report, so b2d8eb3 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@matthewp matthewp marked this pull request as ready for review April 27, 2026 13:14

@ematipico ematipico left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest reviewing what your agent writes in the PR description, because I honestly have no idea what we're fixing based on what it wrote (very technical terms, and it assumes reviewers know the very technical details of the bug/solution).

Approving, but with an asterisk

@matthewp

Copy link
Copy Markdown
Contributor Author

@ematipico I wrote the description here. How can I write it better? It is technical, but that's necessary for a PR review. I guess I could have added a link about AAD, which is something I wasn't familiar with before starting on the change. That's here: https://en.wikipedia.org/wiki/Authenticated_encryption

@matthewp matthewp merged commit 3d82220 into main Apr 27, 2026
27 checks passed
@matthewp matthewp deleted the server-island-encryption-aad branch April 27, 2026 17:29
@astrobot-houston astrobot-houston mentioned this pull request Apr 28, 2026
dadezzz pushed a commit to dadezzz/university_notes that referenced this pull request May 2, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@astrojs/check](https://github.com/withastro/astro/tree/main/packages/language-tools/astro-check) ([source](https://github.com/withastro/astro/tree/HEAD/packages/language-tools/astro-check)) | [`0.9.8` → `0.9.9`](https://renovatebot.com/diffs/npm/@astrojs%2fcheck/0.9.8/0.9.9) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@astrojs%2fcheck/0.9.9?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@astrojs%2fcheck/0.9.8/0.9.9?slim=true) |
| [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`6.1.9` → `6.1.10`](https://renovatebot.com/diffs/npm/astro/6.1.9/6.1.10) | ![age](https://developer.mend.io/api/mc/badges/age/npm/astro/6.1.10?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/astro/6.1.9/6.1.10?slim=true) |

---

### Release Notes

<details>
<summary>withastro/astro (@&#8203;astrojs/check)</summary>

### [`v0.9.9`](https://github.com/withastro/astro/blob/HEAD/packages/language-tools/astro-check/CHANGELOG.md#099)

[Compare Source](https://github.com/withastro/astro/compare/@astrojs/check@0.9.8...@astrojs/check@0.9.9)

##### Patch Changes

- [#&#8203;16471](withastro/astro#16471) [`f56bb3f`](withastro/astro@f56bb3f) Thanks [@&#8203;delucis](https://github.com/delucis)! - Adds support for TypeScript v6 to peer dependencies range

- Updated dependencies \[[`8c62159`](withastro/astro@8c62159)]:
  - [@&#8203;astrojs/language-server](https://github.com/astrojs/language-server)@&#8203;2.16.7

</details>

<details>
<summary>withastro/astro (astro)</summary>

### [`v6.1.10`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#6110)

[Compare Source](https://github.com/withastro/astro/compare/astro@6.1.9...astro@6.1.10)

##### Patch Changes

- [#&#8203;16479](withastro/astro#16479) [`1058428`](withastro/astro@1058428) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes a spurious `[WARN] [content] Content config not loaded` warning during `astro dev` for projects that don't use content collections

- [#&#8203;16457](withastro/astro#16457) [`3d82220`](withastro/astro@3d82220) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Hardens server island encryption to prevent encrypted data from one island component being replayed against a different one

- [#&#8203;16481](withastro/astro#16481) [`152700e`](withastro/astro@152700e) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes a spurious 404 request for a dev toolbar sourcemap during `astro dev` caused by the browser mis-resolving a relative `sourceMappingURL` from the `/@&#8203;id/` URL prefix

- [#&#8203;16480](withastro/astro#16480) [`1bcb43b`](withastro/astro@1bcb43b) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes an unnecessary full page reload on first navigation during dev

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuNiIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg: astro Related to the core `astro` package (scope)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants