Skip to content

🛡️ Sentinel: [CRITICAL] Key material not zeroed after use#5

Merged
igorls merged 1 commit intomainfrom
sentinel/fix-key-zeroing-5565583968971290168
Feb 24, 2026
Merged

🛡️ Sentinel: [CRITICAL] Key material not zeroed after use#5
igorls merged 1 commit intomainfrom
sentinel/fix-key-zeroing-5565583968971290168

Conversation

@igorls
Copy link
Copy Markdown
Owner

@igorls igorls commented Feb 24, 2026

This PR addresses a critical security vulnerability where sensitive key material (static private keys, shared secrets, chaining keys) was left in memory after a handshake session or when a peer was removed.

Changes:

  • Added deinit method to src/wireguard/noise.zig:Handshake which uses std.crypto.secureZero to wipe all sensitive fields.
  • Updated deriveTransportKeys in src/wireguard/noise.zig to securely zero ephemeral secrets (chaining_key, hash, remote_ephemeral) immediately after deriving transport keys.
  • Modified src/wireguard/device.zig:removePeer to call peer.handshake.deinit() before removing the peer from the peers array, ensuring the memory is scrubbed.
  • Added a test case in src/wireguard/noise.zig to verify deinit functionality.
  • Updated .jules/sentinel.md with the vulnerability finding and fix.

This ensures that even if memory is dumped or swapped, long-lived secrets are minimized in memory and ephemeral secrets are discarded promptly.


PR created automatically by Jules for task 5565583968971290168 started by @igorls

- Implement `deinit` in `Handshake` struct to securely wipe keys using `std.crypto.secureZero`.
- Update `deriveTransportKeys` to wipe ephemeral secrets immediately after use.
- Call `handshake.deinit()` in `WgDevice.removePeer` to ensure secrets are cleared when a peer is removed.
- Fixes CRITICAL vulnerability: "Key material not zeroed after use".
- Verified with unit tests ensuring `deinit` resets state and compiles correctly.

Co-authored-by: igorls <4753812+igorls@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@igorls igorls merged commit f6f3e1f into main Feb 24, 2026
1 check passed
@igorls igorls deleted the sentinel/fix-key-zeroing-5565583968971290168 branch February 24, 2026 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant